diff options
Diffstat (limited to 'arch/arm64/kernel/insn.c')
-rw-r--r-- | arch/arm64/kernel/insn.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c index 8cd27fedc8b6..7e9327a0986d 100644 --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c | |||
@@ -960,3 +960,29 @@ u32 aarch64_insn_gen_logical_shifted_reg(enum aarch64_insn_register dst, | |||
960 | 960 | ||
961 | return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_6, insn, shift); | 961 | return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_6, insn, shift); |
962 | } | 962 | } |
963 | |||
964 | bool aarch32_insn_is_wide(u32 insn) | ||
965 | { | ||
966 | return insn >= 0xe800; | ||
967 | } | ||
968 | |||
969 | /* | ||
970 | * Macros/defines for extracting register numbers from instruction. | ||
971 | */ | ||
972 | u32 aarch32_insn_extract_reg_num(u32 insn, int offset) | ||
973 | { | ||
974 | return (insn & (0xf << offset)) >> offset; | ||
975 | } | ||
976 | |||
977 | #define OPC2_MASK 0x7 | ||
978 | #define OPC2_OFFSET 5 | ||
979 | u32 aarch32_insn_mcr_extract_opc2(u32 insn) | ||
980 | { | ||
981 | return (insn & (OPC2_MASK << OPC2_OFFSET)) >> OPC2_OFFSET; | ||
982 | } | ||
983 | |||
984 | #define CRM_MASK 0xf | ||
985 | u32 aarch32_insn_mcr_extract_crm(u32 insn) | ||
986 | { | ||
987 | return insn & CRM_MASK; | ||
988 | } | ||