{"basepri_max", 0x12}, {"BASEPRI_MAX", 0x12},
{"faultmask", 0x13}, {"FAULTMASK", 0x13},
{"control", 0x14}, {"CONTROL", 0x14},
+ {"pac_key_p_0", 0x20}, {"PAC_KEY_P_0", 0x20},
+ {"pac_key_p_1", 0x21}, {"PAC_KEY_P_1", 0x21},
+ {"pac_key_p_2", 0x22}, {"PAC_KEY_P_2", 0x22},
+ {"pac_key_p_3", 0x23}, {"PAC_KEY_P_3", 0x23},
+ {"pac_key_u_0", 0x24}, {"PAC_KEY_U_0", 0x24},
+ {"pac_key_u_1", 0x25}, {"PAC_KEY_U_1", 0x25},
+ {"pac_key_u_2", 0x26}, {"PAC_KEY_U_2", 0x26},
+ {"pac_key_u_3", 0x27}, {"PAC_KEY_U_3", 0x27},
{"msp_ns", 0x88}, {"MSP_NS", 0x88},
{"psp_ns", 0x89}, {"PSP_NS", 0x89},
{"msplim_ns", 0x8a}, {"MSPLIM_NS", 0x8a},
{"basepri_ns", 0x91}, {"BASEPRI_NS", 0x91},
{"faultmask_ns", 0x93}, {"FAULTMASK_NS", 0x93},
{"control_ns", 0x94}, {"CONTROL_NS", 0x94},
- {"sp_ns", 0x98}, {"SP_NS", 0x98 }
+ {"sp_ns", 0x98}, {"SP_NS", 0x98},
+ {"pac_key_p_0_ns", 0xa0}, {"PAC_KEY_P_0_NS", 0xa0},
+ {"pac_key_p_1_ns", 0xa1}, {"PAC_KEY_P_1_NS", 0xa1},
+ {"pac_key_p_2_ns", 0xa2}, {"PAC_KEY_P_2_NS", 0xa2},
+ {"pac_key_p_3_ns", 0xa3}, {"PAC_KEY_P_3_NS", 0xa3},
+ {"pac_key_u_0_ns", 0xa4}, {"PAC_KEY_U_0_NS", 0xa4},
+ {"pac_key_u_1_ns", 0xa5}, {"PAC_KEY_U_1_NS", 0xa5},
+ {"pac_key_u_2_ns", 0xa6}, {"PAC_KEY_U_2_NS", 0xa6},
+ {"pac_key_u_3_ns", 0xa7}, {"PAC_KEY_U_3_NS", 0xa7},
};
/* Table of all shift-in-operand names. */
--- /dev/null
+#name: ARMv8.1-M Mainline PACBTI Extension MSR/MRS instructions
+#as: -march=armv8.1-m.main+pacbti
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-pe *-wince-*
+
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+[^>]*> f380 8820 msr PAC_KEY_P_0, r0
+[^>]*> f3ef 8020 mrs r0, PAC_KEY_P_0
+[^>]*> f380 8821 msr PAC_KEY_P_1, r0
+[^>]*> f3ef 8021 mrs r0, PAC_KEY_P_1
+[^>]*> f380 8822 msr PAC_KEY_P_2, r0
+[^>]*> f3ef 8022 mrs r0, PAC_KEY_P_2
+[^>]*> f380 8823 msr PAC_KEY_P_3, r0
+[^>]*> f3ef 8023 mrs r0, PAC_KEY_P_3
+[^>]*> f389 8820 msr PAC_KEY_P_0, r9
+[^>]*> f3ef 8920 mrs r9, PAC_KEY_P_0
+[^>]*> f389 8821 msr PAC_KEY_P_1, r9
+[^>]*> f3ef 8921 mrs r9, PAC_KEY_P_1
+[^>]*> f389 8822 msr PAC_KEY_P_2, r9
+[^>]*> f3ef 8922 mrs r9, PAC_KEY_P_2
+[^>]*> f389 8823 msr PAC_KEY_P_3, r9
+[^>]*> f3ef 8923 mrs r9, PAC_KEY_P_3
+[^>]*> f380 8820 msr PAC_KEY_P_0, r0
+[^>]*> f3ef 8020 mrs r0, PAC_KEY_P_0
+[^>]*> f380 8821 msr PAC_KEY_P_1, r0
+[^>]*> f3ef 8021 mrs r0, PAC_KEY_P_1
+[^>]*> f380 8822 msr PAC_KEY_P_2, r0
+[^>]*> f3ef 8022 mrs r0, PAC_KEY_P_2
+[^>]*> f380 8823 msr PAC_KEY_P_3, r0
+[^>]*> f3ef 8023 mrs r0, PAC_KEY_P_3
+[^>]*> f389 8820 msr PAC_KEY_P_0, r9
+[^>]*> f3ef 8920 mrs r9, PAC_KEY_P_0
+[^>]*> f389 8821 msr PAC_KEY_P_1, r9
+[^>]*> f3ef 8921 mrs r9, PAC_KEY_P_1
+[^>]*> f389 8822 msr PAC_KEY_P_2, r9
+[^>]*> f3ef 8922 mrs r9, PAC_KEY_P_2
+[^>]*> f389 8823 msr PAC_KEY_P_3, r9
+[^>]*> f3ef 8923 mrs r9, PAC_KEY_P_3
+[^>]*> f380 8824 msr PAC_KEY_U_0, r0
+[^>]*> f3ef 8024 mrs r0, PAC_KEY_U_0
+[^>]*> f380 8825 msr PAC_KEY_U_1, r0
+[^>]*> f3ef 8025 mrs r0, PAC_KEY_U_1
+[^>]*> f380 8826 msr PAC_KEY_U_2, r0
+[^>]*> f3ef 8026 mrs r0, PAC_KEY_U_2
+[^>]*> f380 8827 msr PAC_KEY_U_3, r0
+[^>]*> f3ef 8027 mrs r0, PAC_KEY_U_3
+[^>]*> f389 8824 msr PAC_KEY_U_0, r9
+[^>]*> f3ef 8924 mrs r9, PAC_KEY_U_0
+[^>]*> f389 8825 msr PAC_KEY_U_1, r9
+[^>]*> f3ef 8925 mrs r9, PAC_KEY_U_1
+[^>]*> f389 8826 msr PAC_KEY_U_2, r9
+[^>]*> f3ef 8926 mrs r9, PAC_KEY_U_2
+[^>]*> f389 8827 msr PAC_KEY_U_3, r9
+[^>]*> f3ef 8927 mrs r9, PAC_KEY_U_3
+[^>]*> f380 8824 msr PAC_KEY_U_0, r0
+[^>]*> f3ef 8024 mrs r0, PAC_KEY_U_0
+[^>]*> f380 8825 msr PAC_KEY_U_1, r0
+[^>]*> f3ef 8025 mrs r0, PAC_KEY_U_1
+[^>]*> f380 8826 msr PAC_KEY_U_2, r0
+[^>]*> f3ef 8026 mrs r0, PAC_KEY_U_2
+[^>]*> f380 8827 msr PAC_KEY_U_3, r0
+[^>]*> f3ef 8027 mrs r0, PAC_KEY_U_3
+[^>]*> f389 8824 msr PAC_KEY_U_0, r9
+[^>]*> f3ef 8924 mrs r9, PAC_KEY_U_0
+[^>]*> f389 8825 msr PAC_KEY_U_1, r9
+[^>]*> f3ef 8925 mrs r9, PAC_KEY_U_1
+[^>]*> f389 8826 msr PAC_KEY_U_2, r9
+[^>]*> f3ef 8926 mrs r9, PAC_KEY_U_2
+[^>]*> f389 8827 msr PAC_KEY_U_3, r9
+[^>]*> f3ef 8927 mrs r9, PAC_KEY_U_3
+[^>]*> f380 88a0 msr PAC_KEY_P_0_NS, r0
+[^>]*> f3ef 80a0 mrs r0, PAC_KEY_P_0_NS
+[^>]*> f380 88a1 msr PAC_KEY_P_1_NS, r0
+[^>]*> f3ef 80a1 mrs r0, PAC_KEY_P_1_NS
+[^>]*> f380 88a2 msr PAC_KEY_P_2_NS, r0
+[^>]*> f3ef 80a2 mrs r0, PAC_KEY_P_2_NS
+[^>]*> f380 88a3 msr PAC_KEY_P_3_NS, r0
+[^>]*> f3ef 80a3 mrs r0, PAC_KEY_P_3_NS
+[^>]*> f389 88a0 msr PAC_KEY_P_0_NS, r9
+[^>]*> f3ef 89a0 mrs r9, PAC_KEY_P_0_NS
+[^>]*> f389 88a1 msr PAC_KEY_P_1_NS, r9
+[^>]*> f3ef 89a1 mrs r9, PAC_KEY_P_1_NS
+[^>]*> f389 88a2 msr PAC_KEY_P_2_NS, r9
+[^>]*> f3ef 89a2 mrs r9, PAC_KEY_P_2_NS
+[^>]*> f389 88a3 msr PAC_KEY_P_3_NS, r9
+[^>]*> f3ef 89a3 mrs r9, PAC_KEY_P_3_NS
+[^>]*> f380 88a0 msr PAC_KEY_P_0_NS, r0
+[^>]*> f3ef 80a0 mrs r0, PAC_KEY_P_0_NS
+[^>]*> f380 88a1 msr PAC_KEY_P_1_NS, r0
+[^>]*> f3ef 80a1 mrs r0, PAC_KEY_P_1_NS
+[^>]*> f380 88a2 msr PAC_KEY_P_2_NS, r0
+[^>]*> f3ef 80a2 mrs r0, PAC_KEY_P_2_NS
+[^>]*> f380 88a3 msr PAC_KEY_P_3_NS, r0
+[^>]*> f3ef 80a3 mrs r0, PAC_KEY_P_3_NS
+[^>]*> f389 88a0 msr PAC_KEY_P_0_NS, r9
+[^>]*> f3ef 89a0 mrs r9, PAC_KEY_P_0_NS
+[^>]*> f389 88a1 msr PAC_KEY_P_1_NS, r9
+[^>]*> f3ef 89a1 mrs r9, PAC_KEY_P_1_NS
+[^>]*> f389 88a2 msr PAC_KEY_P_2_NS, r9
+[^>]*> f3ef 89a2 mrs r9, PAC_KEY_P_2_NS
+[^>]*> f389 88a3 msr PAC_KEY_P_3_NS, r9
+[^>]*> f3ef 89a3 mrs r9, PAC_KEY_P_3_NS
+[^>]*> f380 88a4 msr PAC_KEY_U_0_NS, r0
+[^>]*> f3ef 80a4 mrs r0, PAC_KEY_U_0_NS
+[^>]*> f380 88a5 msr PAC_KEY_U_1_NS, r0
+[^>]*> f3ef 80a5 mrs r0, PAC_KEY_U_1_NS
+[^>]*> f380 88a6 msr PAC_KEY_U_2_NS, r0
+[^>]*> f3ef 80a6 mrs r0, PAC_KEY_U_2_NS
+[^>]*> f380 88a7 msr PAC_KEY_U_3_NS, r0
+[^>]*> f3ef 80a7 mrs r0, PAC_KEY_U_3_NS
+[^>]*> f389 88a4 msr PAC_KEY_U_0_NS, r9
+[^>]*> f3ef 89a4 mrs r9, PAC_KEY_U_0_NS
+[^>]*> f389 88a5 msr PAC_KEY_U_1_NS, r9
+[^>]*> f3ef 89a5 mrs r9, PAC_KEY_U_1_NS
+[^>]*> f389 88a6 msr PAC_KEY_U_2_NS, r9
+[^>]*> f3ef 89a6 mrs r9, PAC_KEY_U_2_NS
+[^>]*> f389 88a7 msr PAC_KEY_U_3_NS, r9
+[^>]*> f3ef 89a7 mrs r9, PAC_KEY_U_3_NS
+[^>]*> f380 88a4 msr PAC_KEY_U_0_NS, r0
+[^>]*> f3ef 80a4 mrs r0, PAC_KEY_U_0_NS
+[^>]*> f380 88a5 msr PAC_KEY_U_1_NS, r0
+[^>]*> f3ef 80a5 mrs r0, PAC_KEY_U_1_NS
+[^>]*> f380 88a6 msr PAC_KEY_U_2_NS, r0
+[^>]*> f3ef 80a6 mrs r0, PAC_KEY_U_2_NS
+[^>]*> f380 88a7 msr PAC_KEY_U_3_NS, r0
+[^>]*> f3ef 80a7 mrs r0, PAC_KEY_U_3_NS
+[^>]*> f389 88a4 msr PAC_KEY_U_0_NS, r9
+[^>]*> f3ef 89a4 mrs r9, PAC_KEY_U_0_NS
+[^>]*> f389 88a5 msr PAC_KEY_U_1_NS, r9
+[^>]*> f3ef 89a5 mrs r9, PAC_KEY_U_1_NS
+[^>]*> f389 88a6 msr PAC_KEY_U_2_NS, r9
+[^>]*> f3ef 89a6 mrs r9, PAC_KEY_U_2_NS
+[^>]*> f389 88a7 msr PAC_KEY_U_3_NS, r9
+[^>]*> f3ef 89a7 mrs r9, PAC_KEY_U_3_NS
--- /dev/null
+.macro rw_sys_reg sys_reg reg
+msr \sys_reg, \reg
+mrs \reg, \sys_reg
+.endm
+
+rw_sys_reg sys_reg=pac_key_p_0 reg=r0
+rw_sys_reg sys_reg=pac_key_p_1 reg=r0
+rw_sys_reg sys_reg=pac_key_p_2 reg=r0
+rw_sys_reg sys_reg=pac_key_p_3 reg=r0
+rw_sys_reg sys_reg=pac_key_p_0 reg=r9
+rw_sys_reg sys_reg=pac_key_p_1 reg=r9
+rw_sys_reg sys_reg=pac_key_p_2 reg=r9
+rw_sys_reg sys_reg=pac_key_p_3 reg=r9
+
+rw_sys_reg sys_reg=PAC_KEY_P_0 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_1 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_2 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_3 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_0 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_1 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_2 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_3 reg=r9
+
+rw_sys_reg sys_reg=pac_key_u_0 reg=r0
+rw_sys_reg sys_reg=pac_key_u_1 reg=r0
+rw_sys_reg sys_reg=pac_key_u_2 reg=r0
+rw_sys_reg sys_reg=pac_key_u_3 reg=r0
+rw_sys_reg sys_reg=pac_key_u_0 reg=r9
+rw_sys_reg sys_reg=pac_key_u_1 reg=r9
+rw_sys_reg sys_reg=pac_key_u_2 reg=r9
+rw_sys_reg sys_reg=pac_key_u_3 reg=r9
+
+rw_sys_reg sys_reg=PAC_KEY_U_0 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_1 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_2 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_3 reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_0 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_1 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_2 reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_3 reg=r9
+
+rw_sys_reg sys_reg=pac_key_p_0_ns reg=r0
+rw_sys_reg sys_reg=pac_key_p_1_ns reg=r0
+rw_sys_reg sys_reg=pac_key_p_2_ns reg=r0
+rw_sys_reg sys_reg=pac_key_p_3_ns reg=r0
+rw_sys_reg sys_reg=pac_key_p_0_ns reg=r9
+rw_sys_reg sys_reg=pac_key_p_1_ns reg=r9
+rw_sys_reg sys_reg=pac_key_p_2_ns reg=r9
+rw_sys_reg sys_reg=pac_key_p_3_ns reg=r9
+
+rw_sys_reg sys_reg=PAC_KEY_P_0_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_1_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_2_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_3_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_P_0_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_1_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_2_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_P_3_NS reg=r9
+
+rw_sys_reg sys_reg=pac_key_u_0_ns reg=r0
+rw_sys_reg sys_reg=pac_key_u_1_ns reg=r0
+rw_sys_reg sys_reg=pac_key_u_2_ns reg=r0
+rw_sys_reg sys_reg=pac_key_u_3_ns reg=r0
+rw_sys_reg sys_reg=pac_key_u_0_ns reg=r9
+rw_sys_reg sys_reg=pac_key_u_1_ns reg=r9
+rw_sys_reg sys_reg=pac_key_u_2_ns reg=r9
+rw_sys_reg sys_reg=pac_key_u_3_ns reg=r9
+
+rw_sys_reg sys_reg=PAC_KEY_U_0_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_1_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_2_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_3_NS reg=r0
+rw_sys_reg sys_reg=PAC_KEY_U_0_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_1_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_2_NS reg=r9
+rw_sys_reg sys_reg=PAC_KEY_U_3_NS reg=r9
+
}
static bool
-is_mve_architecture (struct disassemble_info *info)
+is_v81m_architecture (struct disassemble_info *info)
{
struct arm_private_data *private_data = info->private_data;
arm_feature_set allowed_arches = private_data->features;
case 0x12: return "BASEPRI_MAX";
case 0x13: return "FAULTMASK";
case 0x14: return "CONTROL";
+ case 0x20: return "PAC_KEY_P_0";
+ case 0x21: return "PAC_KEY_P_1";
+ case 0x22: return "PAC_KEY_P_2";
+ case 0x23: return "PAC_KEY_P_3";
+ case 0x24: return "PAC_KEY_U_0";
+ case 0x25: return "PAC_KEY_U_1";
+ case 0x26: return "PAC_KEY_U_2";
+ case 0x27: return "PAC_KEY_U_3";
case 0x88: return "MSP_NS";
case 0x89: return "PSP_NS";
case 0x8a: return "MSPLIM_NS";
case 0x93: return "FAULTMASK_NS";
case 0x94: return "CONTROL_NS";
case 0x98: return "SP_NS";
+ case 0xa0: return "PAC_KEY_P_0_NS";
+ case 0xa1: return "PAC_KEY_P_1_NS";
+ case 0xa2: return "PAC_KEY_P_2_NS";
+ case 0xa3: return "PAC_KEY_P_3_NS";
+ case 0xa4: return "PAC_KEY_U_0_NS";
+ case 0xa5: return "PAC_KEY_U_1_NS";
+ case 0xa6: return "PAC_KEY_U_2_NS";
+ case 0xa7: return "PAC_KEY_U_3_NS";
default: return "<unknown>";
}
}
const struct opcode32 *insn;
void *stream = info->stream;
fprintf_styled_ftype func = info->fprintf_styled_func;
- bool is_mve = is_mve_architecture (info);
+ bool is_mve = is_v81m_architecture (info);
enum disassembler_style base_style = dis_style_mnemonic;
enum disassembler_style old_base_style = base_style;
if (given & 0x100)
func (stream, dis_style_register, "c");
}
+ else if (is_v81m_architecture (info))
+ func (stream, dis_style_register, "%s",
+ psr_name (given & 0xff));
+
else if ((given & 0x20) == 0x20)
{
char const* name;
break;
case 'D':
- if (((given & 0xff) == 0)
- || ((given & 0x20) == 0x20))
+ if (is_v81m_architecture (info))
+ func (stream, dis_style_register, "%s",
+ psr_name (given & 0xff));
+ else if (((given & 0xff) == 0)
+ || ((given & 0x20) == 0x20))
{
char const* name;
unsigned sm = (given & 0xf0000) >> 16;