| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_SHARED_REGISTER_ID_H_ |
| #define SRC_DEVELOPER_DEBUG_SHARED_REGISTER_ID_H_ |
| |
| #include <inttypes.h> |
| |
| namespace debug { |
| |
| enum class RegisterID : uint32_t { |
| kUnknown = 0, |
| |
| // ARMv8 (Range: 1000-1999) ---------------------------------------------------------------------- |
| |
| // General purpose |
| |
| kARMv8_x0 = 1000, |
| kARMv8_x1 = 1001, |
| kARMv8_x2 = 1002, |
| kARMv8_x3 = 1003, |
| kARMv8_x4 = 1004, |
| kARMv8_x5 = 1005, |
| kARMv8_x6 = 1006, |
| kARMv8_x7 = 1007, |
| kARMv8_x8 = 1008, |
| kARMv8_x9 = 1009, |
| kARMv8_x10 = 1010, |
| kARMv8_x11 = 1011, |
| kARMv8_x12 = 1012, |
| kARMv8_x13 = 1013, |
| kARMv8_x14 = 1014, |
| kARMv8_x15 = 1015, |
| kARMv8_x16 = 1016, |
| kARMv8_x17 = 1017, |
| kARMv8_x18 = 1018, |
| kARMv8_x19 = 1019, |
| kARMv8_x20 = 1020, |
| kARMv8_x21 = 1021, |
| kARMv8_x22 = 1022, |
| kARMv8_x23 = 1023, |
| kARMv8_x24 = 1024, |
| kARMv8_x25 = 1025, |
| kARMv8_x26 = 1026, |
| kARMv8_x27 = 1027, |
| kARMv8_x28 = 1028, |
| kARMv8_x29 = 1029, |
| kARMv8_lr = 1030, |
| kARMv8_sp = 1031, |
| kARMv8_pc = 1032, |
| // This register doesn't exist in ARMv8, but it's used as an abstraction for |
| // accessing the PSTATE. It's functionally equivalent to SPSR_EL1. |
| kARMv8_cpsr = 1034, |
| |
| // General-purpose aliases (low 32-bits). |
| kARMv8_w0 = 1035, |
| kARMv8_w1 = 1036, |
| kARMv8_w2 = 1037, |
| kARMv8_w3 = 1038, |
| kARMv8_w4 = 1039, |
| kARMv8_w5 = 1040, |
| kARMv8_w6 = 1041, |
| kARMv8_w7 = 1042, |
| kARMv8_w8 = 1043, |
| kARMv8_w9 = 1044, |
| kARMv8_w10 = 1045, |
| kARMv8_w11 = 1046, |
| kARMv8_w12 = 1047, |
| kARMv8_w13 = 1048, |
| kARMv8_w14 = 1049, |
| kARMv8_w15 = 1050, |
| kARMv8_w16 = 1051, |
| kARMv8_w17 = 1052, |
| kARMv8_w18 = 1053, |
| kARMv8_w19 = 1054, |
| kARMv8_w20 = 1055, |
| kARMv8_w21 = 1056, |
| kARMv8_w22 = 1057, |
| kARMv8_w23 = 1058, |
| kARMv8_w24 = 1059, |
| kARMv8_w25 = 1060, |
| kARMv8_w26 = 1061, |
| kARMv8_w27 = 1062, |
| kARMv8_w28 = 1063, |
| kARMv8_w29 = 1064, |
| kARMv8_w30 = 1065, |
| |
| kARMv8_x30 = 1066, // Alias for "LR" above. |
| |
| // Thread Pointer/ID register |
| kARMv8_tpidr = 1067, |
| |
| // FP (None on ARMv8). |
| |
| // Vector. |
| |
| kARMv8_fpcr = 1100, // Control register. |
| kARMv8_fpsr = 1101, // Status register. |
| |
| kARMv8_v0 = 1200, |
| kARMv8_v1 = 1201, |
| kARMv8_v2 = 1202, |
| kARMv8_v3 = 1203, |
| kARMv8_v4 = 1204, |
| kARMv8_v5 = 1205, |
| kARMv8_v6 = 1206, |
| kARMv8_v7 = 1207, |
| kARMv8_v8 = 1208, |
| kARMv8_v9 = 1209, |
| kARMv8_v10 = 1210, |
| kARMv8_v11 = 1211, |
| kARMv8_v12 = 1212, |
| kARMv8_v13 = 1213, |
| kARMv8_v14 = 1214, |
| kARMv8_v15 = 1215, |
| kARMv8_v16 = 1216, |
| kARMv8_v17 = 1217, |
| kARMv8_v18 = 1218, |
| kARMv8_v19 = 1219, |
| kARMv8_v20 = 1220, |
| kARMv8_v21 = 1221, |
| kARMv8_v22 = 1222, |
| kARMv8_v23 = 1223, |
| kARMv8_v24 = 1224, |
| kARMv8_v25 = 1225, |
| kARMv8_v26 = 1226, |
| kARMv8_v27 = 1227, |
| kARMv8_v28 = 1228, |
| kARMv8_v29 = 1229, |
| kARMv8_v30 = 1230, |
| kARMv8_v31 = 1231, |
| |
| // Double-precision aliases. |
| kARMv8_d0 = 1232, |
| kARMv8_d1 = 1233, |
| kARMv8_d2 = 1234, |
| kARMv8_d3 = 1235, |
| kARMv8_d4 = 1236, |
| kARMv8_d5 = 1237, |
| kARMv8_d6 = 1238, |
| kARMv8_d7 = 1239, |
| kARMv8_d8 = 1240, |
| kARMv8_d9 = 1241, |
| kARMv8_d10 = 1242, |
| kARMv8_d11 = 1243, |
| kARMv8_d12 = 1244, |
| kARMv8_d13 = 1245, |
| kARMv8_d14 = 1246, |
| kARMv8_d15 = 1247, |
| kARMv8_d16 = 1248, |
| kARMv8_d17 = 1249, |
| kARMv8_d18 = 1250, |
| kARMv8_d19 = 1251, |
| kARMv8_d20 = 1252, |
| kARMv8_d21 = 1253, |
| kARMv8_d22 = 1254, |
| kARMv8_d23 = 1255, |
| kARMv8_d24 = 1256, |
| kARMv8_d25 = 1257, |
| kARMv8_d26 = 1258, |
| kARMv8_d27 = 1259, |
| kARMv8_d28 = 1260, |
| kARMv8_d29 = 1261, |
| kARMv8_d30 = 1262, |
| kARMv8_d31 = 1263, |
| |
| // Single-precision aliases. |
| kARMv8_s0 = 1264, |
| kARMv8_s1 = 1265, |
| kARMv8_s2 = 1266, |
| kARMv8_s3 = 1267, |
| kARMv8_s4 = 1268, |
| kARMv8_s5 = 1269, |
| kARMv8_s6 = 1270, |
| kARMv8_s7 = 1271, |
| kARMv8_s8 = 1272, |
| kARMv8_s9 = 1273, |
| kARMv8_s10 = 1274, |
| kARMv8_s11 = 1275, |
| kARMv8_s12 = 1276, |
| kARMv8_s13 = 1277, |
| kARMv8_s14 = 1278, |
| kARMv8_s15 = 1279, |
| kARMv8_s16 = 1280, |
| kARMv8_s17 = 1281, |
| kARMv8_s18 = 1282, |
| kARMv8_s19 = 1283, |
| kARMv8_s20 = 1284, |
| kARMv8_s21 = 1285, |
| kARMv8_s22 = 1286, |
| kARMv8_s23 = 1287, |
| kARMv8_s24 = 1289, |
| kARMv8_s25 = 1290, |
| kARMv8_s26 = 1291, |
| kARMv8_s27 = 1292, |
| kARMv8_s28 = 1293, |
| kARMv8_s29 = 1294, |
| kARMv8_s30 = 1295, |
| kARMv8_s31 = 1296, |
| |
| // Debug. |
| |
| kARMv8_id_aa64dfr0_el1 = 1300, // Debug Feature Register 0. |
| kARMv8_mdscr_el1 = 1301, // Debug System Control Register. |
| |
| // HW Registers. |
| kARMv8_dbgbcr0_el1 = 1320, |
| kARMv8_dbgbcr1_el1 = 1321, |
| kARMv8_dbgbcr2_el1 = 1322, |
| kARMv8_dbgbcr3_el1 = 1323, |
| kARMv8_dbgbcr4_el1 = 1324, |
| kARMv8_dbgbcr5_el1 = 1325, |
| kARMv8_dbgbcr6_el1 = 1326, |
| kARMv8_dbgbcr7_el1 = 1327, |
| kARMv8_dbgbcr8_el1 = 1328, |
| kARMv8_dbgbcr9_el1 = 1329, |
| kARMv8_dbgbcr10_el1 = 1330, |
| kARMv8_dbgbcr11_el1 = 1331, |
| kARMv8_dbgbcr12_el1 = 1332, |
| kARMv8_dbgbcr13_el1 = 1333, |
| kARMv8_dbgbcr14_el1 = 1334, |
| kARMv8_dbgbcr15_el1 = 1335, |
| |
| kARMv8_dbgbvr0_el1 = 1340, |
| kARMv8_dbgbvr1_el1 = 1341, |
| kARMv8_dbgbvr2_el1 = 1342, |
| kARMv8_dbgbvr3_el1 = 1343, |
| kARMv8_dbgbvr4_el1 = 1344, |
| kARMv8_dbgbvr5_el1 = 1345, |
| kARMv8_dbgbvr6_el1 = 1346, |
| kARMv8_dbgbvr7_el1 = 1347, |
| kARMv8_dbgbvr8_el1 = 1348, |
| kARMv8_dbgbvr9_el1 = 1349, |
| kARMv8_dbgbvr10_el1 = 1350, |
| kARMv8_dbgbvr11_el1 = 1351, |
| kARMv8_dbgbvr12_el1 = 1352, |
| kARMv8_dbgbvr13_el1 = 1353, |
| kARMv8_dbgbvr14_el1 = 1354, |
| kARMv8_dbgbvr15_el1 = 1355, |
| |
| // HW Watchpoints. |
| kARMv8_dbgwcr0_el1 = 1360, |
| kARMv8_dbgwcr1_el1 = 1361, |
| kARMv8_dbgwcr2_el1 = 1362, |
| kARMv8_dbgwcr3_el1 = 1363, |
| kARMv8_dbgwcr4_el1 = 1364, |
| kARMv8_dbgwcr5_el1 = 1365, |
| kARMv8_dbgwcr6_el1 = 1366, |
| kARMv8_dbgwcr7_el1 = 1367, |
| kARMv8_dbgwcr8_el1 = 1368, |
| kARMv8_dbgwcr9_el1 = 1369, |
| kARMv8_dbgwcr10_el1 = 1370, |
| kARMv8_dbgwcr11_el1 = 1371, |
| kARMv8_dbgwcr12_el1 = 1372, |
| kARMv8_dbgwcr13_el1 = 1373, |
| kARMv8_dbgwcr14_el1 = 1374, |
| kARMv8_dbgwcr15_el1 = 1375, |
| |
| kARMv8_dbgwvr0_el1 = 1380, |
| kARMv8_dbgwvr1_el1 = 1381, |
| kARMv8_dbgwvr2_el1 = 1382, |
| kARMv8_dbgwvr3_el1 = 1383, |
| kARMv8_dbgwvr4_el1 = 1384, |
| kARMv8_dbgwvr5_el1 = 1385, |
| kARMv8_dbgwvr6_el1 = 1386, |
| kARMv8_dbgwvr7_el1 = 1387, |
| kARMv8_dbgwvr8_el1 = 1388, |
| kARMv8_dbgwvr9_el1 = 1389, |
| kARMv8_dbgwvr10_el1 = 1390, |
| kARMv8_dbgwvr11_el1 = 1391, |
| kARMv8_dbgwvr12_el1 = 1392, |
| kARMv8_dbgwvr13_el1 = 1393, |
| kARMv8_dbgwvr14_el1 = 1394, |
| kARMv8_dbgwvr15_el1 = 1395, |
| |
| // x64 (Range: 2000-2999) ------------------------------------------------------------------------ |
| |
| // General purpose |
| |
| kX64_rax = 2000, |
| kX64_rbx = 2001, |
| kX64_rcx = 2002, |
| kX64_rdx = 2003, |
| kX64_rsi = 2004, |
| kX64_rdi = 2005, |
| kX64_rbp = 2006, |
| kX64_rsp = 2007, |
| kX64_r8 = 2008, |
| kX64_r9 = 2009, |
| kX64_r10 = 2010, |
| kX64_r11 = 2011, |
| kX64_r12 = 2012, |
| kX64_r13 = 2013, |
| kX64_r14 = 2014, |
| kX64_r15 = 2015, |
| kX64_rip = 2016, |
| kX64_rflags = 2017, |
| |
| // General purpose aliases. |
| |
| kX64_ah = 2018, |
| kX64_al = 2019, |
| kX64_ax = 2020, |
| kX64_eax = 2021, |
| |
| kX64_bh = 2022, |
| kX64_bl = 2023, |
| kX64_bx = 2024, |
| kX64_ebx = 2025, |
| |
| kX64_ch = 2026, |
| kX64_cl = 2027, |
| kX64_cx = 2028, |
| kX64_ecx = 2029, |
| |
| kX64_dh = 2030, |
| kX64_dl = 2031, |
| kX64_dx = 2032, |
| kX64_edx = 2033, |
| |
| kX64_si = 2034, |
| kX64_esi = 2035, |
| |
| kX64_di = 2036, |
| kX64_edi = 2037, |
| |
| // Segment registers |
| kX64_fsbase = 2038, |
| kX64_gsbase = 2039, |
| |
| // FP (x87 FPU/MMX). |
| |
| kX64_fcw = 2100, // Control word. |
| kX64_fsw = 2101, // Status word. |
| kX64_ftw = 2102, // Tag word. |
| // 2103 reserved |
| kX64_fop = 2104, // Opcode. |
| kX64_fip = 2105, // Instruction pointer. |
| kX64_fdp = 2106, // Data pointer. |
| |
| // The x87/MMX state. For x87 the each "st" entry has the low 80 bits used for |
| // the register contents. For MMX, the low 64 bits are used. |
| // The higher bits are unused. |
| kX64_st0 = 2110, |
| kX64_st1 = 2111, |
| kX64_st2 = 2112, |
| kX64_st3 = 2113, |
| kX64_st4 = 2114, |
| kX64_st5 = 2115, |
| kX64_st6 = 2116, |
| kX64_st7 = 2117, |
| |
| // Although these are technically vector registers, they're aliased on top of the x87 (fp*) |
| // registers so must be in the same category. |
| kX64_mm0 = 2120, |
| kX64_mm1 = 2121, |
| kX64_mm2 = 2122, |
| kX64_mm3 = 2123, |
| kX64_mm4 = 2124, |
| kX64_mm5 = 2125, |
| kX64_mm6 = 2126, |
| kX64_mm7 = 2127, |
| |
| // Vector. |
| |
| kX64_mxcsr = 2200, // Control and Status register. |
| |
| // SSE/AVX (512 bit, 128- and 256-bit variants will use the low bits of these). |
| kX64_zmm0 = 2400, |
| kX64_zmm1 = 2401, |
| kX64_zmm2 = 2402, |
| kX64_zmm3 = 2403, |
| kX64_zmm4 = 2404, |
| kX64_zmm5 = 2405, |
| kX64_zmm6 = 2406, |
| kX64_zmm7 = 2407, |
| kX64_zmm8 = 2408, |
| kX64_zmm9 = 2409, |
| kX64_zmm10 = 2410, |
| kX64_zmm11 = 2411, |
| kX64_zmm12 = 2412, |
| kX64_zmm13 = 2413, |
| kX64_zmm14 = 2414, |
| kX64_zmm15 = 2415, |
| kX64_zmm16 = 2416, |
| kX64_zmm17 = 2417, |
| kX64_zmm18 = 2418, |
| kX64_zmm19 = 2419, |
| kX64_zmm20 = 2420, |
| kX64_zmm21 = 2421, |
| kX64_zmm22 = 2422, |
| kX64_zmm23 = 2423, |
| kX64_zmm24 = 2424, |
| kX64_zmm25 = 2425, |
| kX64_zmm26 = 2426, |
| kX64_zmm27 = 2427, |
| kX64_zmm28 = 2428, |
| kX64_zmm29 = 2429, |
| kX64_zmm30 = 2430, |
| kX64_zmm31 = 2431, |
| |
| // Vector aliases. |
| kX64_xmm0 = 2432, |
| kX64_xmm1 = 2433, |
| kX64_xmm2 = 2434, |
| kX64_xmm3 = 2435, |
| kX64_xmm4 = 2436, |
| kX64_xmm5 = 2437, |
| kX64_xmm6 = 2438, |
| kX64_xmm7 = 2439, |
| kX64_xmm8 = 2440, |
| kX64_xmm9 = 2441, |
| kX64_xmm10 = 2442, |
| kX64_xmm11 = 2443, |
| kX64_xmm12 = 2444, |
| kX64_xmm13 = 2445, |
| kX64_xmm14 = 2446, |
| kX64_xmm15 = 2447, |
| kX64_xmm16 = 2448, |
| kX64_xmm17 = 2449, |
| kX64_xmm18 = 2450, |
| kX64_xmm19 = 2451, |
| kX64_xmm20 = 2452, |
| kX64_xmm21 = 2453, |
| kX64_xmm22 = 2454, |
| kX64_xmm23 = 2455, |
| kX64_xmm24 = 2456, |
| kX64_xmm25 = 2457, |
| kX64_xmm26 = 2458, |
| kX64_xmm27 = 2459, |
| kX64_xmm28 = 2460, |
| kX64_xmm29 = 2461, |
| kX64_xmm30 = 2462, |
| kX64_xmm31 = 2463, |
| |
| kX64_ymm0 = 2464, |
| kX64_ymm1 = 2465, |
| kX64_ymm2 = 2466, |
| kX64_ymm3 = 2467, |
| kX64_ymm4 = 2468, |
| kX64_ymm5 = 2469, |
| kX64_ymm6 = 2470, |
| kX64_ymm7 = 2471, |
| kX64_ymm8 = 2472, |
| kX64_ymm9 = 2473, |
| kX64_ymm10 = 2474, |
| kX64_ymm11 = 2475, |
| kX64_ymm12 = 2476, |
| kX64_ymm13 = 2477, |
| kX64_ymm14 = 2478, |
| kX64_ymm15 = 2479, |
| kX64_ymm16 = 2480, |
| kX64_ymm17 = 2481, |
| kX64_ymm18 = 2482, |
| kX64_ymm19 = 2483, |
| kX64_ymm20 = 2484, |
| kX64_ymm21 = 2485, |
| kX64_ymm22 = 2486, |
| kX64_ymm23 = 2487, |
| kX64_ymm24 = 2488, |
| kX64_ymm25 = 2489, |
| kX64_ymm26 = 2490, |
| kX64_ymm27 = 2491, |
| kX64_ymm28 = 2492, |
| kX64_ymm29 = 2493, |
| kX64_ymm30 = 2494, |
| kX64_ymm31 = 2495, |
| |
| // Debug. |
| |
| kX64_dr0 = 2600, |
| kX64_dr1 = 2601, |
| kX64_dr2 = 2602, |
| kX64_dr3 = 2603, |
| // dr4 is reserved. |
| // dr5 is reserved. |
| kX64_dr6 = 2606, |
| kX64_dr7 = 2607, |
| }; |
| |
| } // namespace debug |
| |
| #endif // SRC_DEVELOPER_DEBUG_SHARED_REGISTER_ID_H_ |