/* sanity ... */
vassert(arch_host == VexArchMIPS32 || arch_host == VexArchMIPS64);
vassert(VEX_PRID_COMP_MIPS == VEX_MIPS_COMP_ID(hwcaps_host)
+ || VEX_PRID_COMP_CAVIUM == VEX_MIPS_COMP_ID(hwcaps_host)
|| VEX_PRID_COMP_BROADCOM == VEX_MIPS_COMP_ID(hwcaps_host)
|| VEX_PRID_COMP_NETLOGIC == VEX_MIPS_COMP_ID(hwcaps_host)
- || VEX_PRID_COMP_CAVIUM == VEX_MIPS_COMP_ID(hwcaps_host));
+ || VEX_PRID_COMP_INGENIC_E1 == VEX_MIPS_COMP_ID(hwcaps_host)
+ || VEX_PRID_COMP_LEGACY == VEX_MIPS_COMP_ID(hwcaps_host));
/* Check that the host's endianness is as expected. */
vassert(archinfo_host->endness == VexEndnessLE
return "Cavium-baseline";
}
+ /* Ingenic baseline. */
+ if (VEX_MIPS_COMP_ID(hwcaps) == VEX_PRID_COMP_INGENIC_E1) {
+ return "Ingenic-baseline";
+ }
+
+ /* Loongson baseline. */
+ if ((VEX_MIPS_COMP_ID(hwcaps) == VEX_PRID_COMP_LEGACY) &&
+ (VEX_MIPS_PROC_ID(hwcaps) == VEX_PRID_IMP_LOONGSON_64)) {
+ return "Loongson-baseline";
+ }
+
return "Unsupported baseline";
}
static const HChar* show_hwcaps_mips64 ( UInt hwcaps )
{
+ /* Netlogic baseline. */
+ if (VEX_MIPS_COMP_ID(hwcaps) == VEX_PRID_COMP_NETLOGIC) {
+ return "Netlogic-baseline";
+ }
+
+ /* Cavium baseline. */
+ if (VEX_MIPS_COMP_ID(hwcaps) == VEX_PRID_COMP_CAVIUM) {
+ return "Cavium-baseline";
+ }
+
+ /* Loongson baseline. */
+ if ((VEX_MIPS_COMP_ID(hwcaps) == VEX_PRID_COMP_LEGACY) &&
+ (VEX_MIPS_PROC_ID(hwcaps) == VEX_PRID_IMP_LOONGSON_64)) {
+ return "Loongson-baseline";
+ }
+
return "mips64-baseline";
}
invalid_hwcaps(arch, hwcaps,
"Host does not have long displacement facility.\n");
return;
-
+
case VexArchMIPS32:
switch (VEX_MIPS_COMP_ID(hwcaps)) {
case VEX_PRID_COMP_MIPS:
+ case VEX_PRID_COMP_CAVIUM:
+ case VEX_PRID_COMP_INGENIC_E1:
case VEX_PRID_COMP_BROADCOM:
case VEX_PRID_COMP_NETLOGIC:
return;
default:
invalid_hwcaps(arch, hwcaps, "Unsupported baseline\n");
}
-
+
case VexArchMIPS64:
- return;
+ switch (VEX_MIPS_COMP_ID(hwcaps)) {
+ case VEX_PRID_COMP_MIPS:
+ case VEX_PRID_COMP_CAVIUM:
+ case VEX_PRID_COMP_NETLOGIC:
+ return;
+ default:
+ invalid_hwcaps(arch, hwcaps, "Unsupported baseline\n");
+ }
case VexArchTILEGX:
return;
*/
-#define VEX_PRID_COMP_MIPS 0x00010000
-#define VEX_PRID_COMP_BROADCOM 0x00020000
-#define VEX_PRID_COMP_NETLOGIC 0x000C0000
-#define VEX_PRID_COMP_CAVIUM 0x000D0000
+#define VEX_PRID_COMP_LEGACY 0x00000000
+#define VEX_PRID_COMP_MIPS 0x00010000
+#define VEX_PRID_COMP_BROADCOM 0x00020000
+#define VEX_PRID_COMP_NETLOGIC 0x000C0000
+#define VEX_PRID_COMP_CAVIUM 0x000D0000
+#define VEX_PRID_COMP_INGENIC_E1 0x00E10000 /* JZ4780 */
+
+/*
+ * These are valid when 23:16 == PRID_COMP_LEGACY
+ */
+#define VEX_PRID_IMP_LOONGSON_64 0x6300 /* Loongson-2/3 */
/*
* These are the PRID's for when 23:16 == PRID_COMP_MIPS
*/
-#define VEX_PRID_IMP_34K 0x9500
-#define VEX_PRID_IMP_74K 0x9700
+#define VEX_PRID_IMP_34K 0x9500
+#define VEX_PRID_IMP_74K 0x9700
/* CPU has FPU and 32 dbl. prec. FP registers */
#define VEX_PRID_CPU_32FPR 0x00000040