Lines Matching refs:insn

57 enum aarch64_insn_encoding_class __kprobes aarch64_get_insn_class(u32 insn)  in aarch64_get_insn_class()  argument
59 return aarch64_insn_encoding_class[(insn >> 25) & 0xf]; in aarch64_get_insn_class()
63 bool __kprobes aarch64_insn_is_nop(u32 insn) in aarch64_insn_is_nop() argument
65 if (!aarch64_insn_is_hint(insn)) in aarch64_insn_is_nop()
68 switch (insn & 0xFE0) { in aarch64_insn_is_nop()
121 static int __kprobes __aarch64_insn_write(void *addr, u32 insn) in __aarch64_insn_write() argument
130 ret = probe_kernel_write(waddr, &insn, AARCH64_INSN_SIZE); in __aarch64_insn_write()
138 int __kprobes aarch64_insn_write(void *addr, u32 insn) in aarch64_insn_write() argument
140 insn = cpu_to_le32(insn); in aarch64_insn_write()
141 return __aarch64_insn_write(addr, insn); in aarch64_insn_write()
144 static bool __kprobes __aarch64_insn_hotpatch_safe(u32 insn) in __aarch64_insn_hotpatch_safe() argument
146 if (aarch64_get_insn_class(insn) != AARCH64_INSN_CLS_BR_SYS) in __aarch64_insn_hotpatch_safe()
149 return aarch64_insn_is_b(insn) || in __aarch64_insn_hotpatch_safe()
150 aarch64_insn_is_bl(insn) || in __aarch64_insn_hotpatch_safe()
151 aarch64_insn_is_svc(insn) || in __aarch64_insn_hotpatch_safe()
152 aarch64_insn_is_hvc(insn) || in __aarch64_insn_hotpatch_safe()
153 aarch64_insn_is_smc(insn) || in __aarch64_insn_hotpatch_safe()
154 aarch64_insn_is_brk(insn) || in __aarch64_insn_hotpatch_safe()
155 aarch64_insn_is_nop(insn); in __aarch64_insn_hotpatch_safe()
174 int __kprobes aarch64_insn_patch_text_nosync(void *addr, u32 insn) in aarch64_insn_patch_text_nosync() argument
183 ret = aarch64_insn_write(tp, insn); in aarch64_insn_patch_text_nosync()
243 u32 insn; in aarch64_insn_patch_text() local
247 ret = aarch64_insn_read(addrs[0], &insn); in aarch64_insn_patch_text()
251 if (aarch64_insn_hotpatch_safe(insn, insns[0])) { in aarch64_insn_patch_text()
329 u64 aarch64_insn_decode_immediate(enum aarch64_insn_imm_type type, u32 insn) in aarch64_insn_decode_immediate() argument
337 immlo = (insn >> ADR_IMM_LOSHIFT) & ADR_IMM_LOMASK; in aarch64_insn_decode_immediate()
338 immhi = (insn >> ADR_IMM_HISHIFT) & ADR_IMM_HIMASK; in aarch64_insn_decode_immediate()
339 insn = (immhi << ADR_IMM_HILOSPLIT) | immlo; in aarch64_insn_decode_immediate()
350 return (insn >> shift) & mask; in aarch64_insn_decode_immediate()
354 u32 insn, u64 imm) in aarch64_insn_encode_immediate() argument
378 insn &= ~(mask << shift); in aarch64_insn_encode_immediate()
379 insn |= (imm & mask) << shift; in aarch64_insn_encode_immediate()
381 return insn; in aarch64_insn_encode_immediate()
385 u32 insn, in aarch64_insn_encode_register() argument
416 insn &= ~(GENMASK(4, 0) << shift); in aarch64_insn_encode_register()
417 insn |= reg << shift; in aarch64_insn_encode_register()
419 return insn; in aarch64_insn_encode_register()
423 u32 insn) in aarch64_insn_encode_ldst_size() argument
445 insn &= ~GENMASK(31, 30); in aarch64_insn_encode_ldst_size()
446 insn |= size << 30; in aarch64_insn_encode_ldst_size()
448 return insn; in aarch64_insn_encode_ldst_size()
471 u32 insn; in aarch64_insn_gen_branch_imm() local
483 insn = aarch64_insn_get_bl_value(); in aarch64_insn_gen_branch_imm()
486 insn = aarch64_insn_get_b_value(); in aarch64_insn_gen_branch_imm()
493 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_26, insn, in aarch64_insn_gen_branch_imm()
502 u32 insn; in aarch64_insn_gen_comp_branch_imm() local
509 insn = aarch64_insn_get_cbz_value(); in aarch64_insn_gen_comp_branch_imm()
512 insn = aarch64_insn_get_cbnz_value(); in aarch64_insn_gen_comp_branch_imm()
523 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_comp_branch_imm()
530 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RT, insn, reg); in aarch64_insn_gen_comp_branch_imm()
532 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_19, insn, in aarch64_insn_gen_comp_branch_imm()
539 u32 insn; in aarch64_insn_gen_cond_branch_imm() local
544 insn = aarch64_insn_get_bcond_value(); in aarch64_insn_gen_cond_branch_imm()
547 insn |= cond; in aarch64_insn_gen_cond_branch_imm()
549 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_19, insn, in aarch64_insn_gen_cond_branch_imm()
566 u32 insn; in aarch64_insn_gen_branch_reg() local
570 insn = aarch64_insn_get_br_value(); in aarch64_insn_gen_branch_reg()
573 insn = aarch64_insn_get_blr_value(); in aarch64_insn_gen_branch_reg()
576 insn = aarch64_insn_get_ret_value(); in aarch64_insn_gen_branch_reg()
583 return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, reg); in aarch64_insn_gen_branch_reg()
592 u32 insn; in aarch64_insn_gen_load_store_reg() local
596 insn = aarch64_insn_get_ldr_reg_value(); in aarch64_insn_gen_load_store_reg()
599 insn = aarch64_insn_get_str_reg_value(); in aarch64_insn_gen_load_store_reg()
606 insn = aarch64_insn_encode_ldst_size(size, insn); in aarch64_insn_gen_load_store_reg()
608 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RT, insn, reg); in aarch64_insn_gen_load_store_reg()
610 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, in aarch64_insn_gen_load_store_reg()
613 return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RM, insn, in aarch64_insn_gen_load_store_reg()
624 u32 insn; in aarch64_insn_gen_load_store_pair() local
629 insn = aarch64_insn_get_ldp_pre_value(); in aarch64_insn_gen_load_store_pair()
632 insn = aarch64_insn_get_stp_pre_value(); in aarch64_insn_gen_load_store_pair()
635 insn = aarch64_insn_get_ldp_post_value(); in aarch64_insn_gen_load_store_pair()
638 insn = aarch64_insn_get_stp_post_value(); in aarch64_insn_gen_load_store_pair()
657 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_load_store_pair()
664 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RT, insn, in aarch64_insn_gen_load_store_pair()
667 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RT2, insn, in aarch64_insn_gen_load_store_pair()
670 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, in aarch64_insn_gen_load_store_pair()
673 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_7, insn, in aarch64_insn_gen_load_store_pair()
682 u32 insn; in aarch64_insn_gen_add_sub_imm() local
686 insn = aarch64_insn_get_add_imm_value(); in aarch64_insn_gen_add_sub_imm()
689 insn = aarch64_insn_get_sub_imm_value(); in aarch64_insn_gen_add_sub_imm()
692 insn = aarch64_insn_get_adds_imm_value(); in aarch64_insn_gen_add_sub_imm()
695 insn = aarch64_insn_get_subs_imm_value(); in aarch64_insn_gen_add_sub_imm()
706 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_add_sub_imm()
715 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_add_sub_imm()
717 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_add_sub_imm()
719 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_12, insn, imm); in aarch64_insn_gen_add_sub_imm()
728 u32 insn; in aarch64_insn_gen_bitfield() local
733 insn = aarch64_insn_get_bfm_value(); in aarch64_insn_gen_bitfield()
736 insn = aarch64_insn_get_ubfm_value(); in aarch64_insn_gen_bitfield()
739 insn = aarch64_insn_get_sbfm_value(); in aarch64_insn_gen_bitfield()
751 insn |= AARCH64_INSN_SF_BIT | AARCH64_INSN_N_BIT; in aarch64_insn_gen_bitfield()
762 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_bitfield()
764 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_bitfield()
766 insn = aarch64_insn_encode_immediate(AARCH64_INSN_IMM_R, insn, immr); in aarch64_insn_gen_bitfield()
768 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_S, insn, imms); in aarch64_insn_gen_bitfield()
776 u32 insn; in aarch64_insn_gen_movewide() local
780 insn = aarch64_insn_get_movz_value(); in aarch64_insn_gen_movewide()
783 insn = aarch64_insn_get_movk_value(); in aarch64_insn_gen_movewide()
786 insn = aarch64_insn_get_movn_value(); in aarch64_insn_gen_movewide()
800 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_movewide()
809 insn |= (shift >> 4) << 21; in aarch64_insn_gen_movewide()
811 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_movewide()
813 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_16, insn, imm); in aarch64_insn_gen_movewide()
823 u32 insn; in aarch64_insn_gen_add_sub_shifted_reg() local
827 insn = aarch64_insn_get_add_value(); in aarch64_insn_gen_add_sub_shifted_reg()
830 insn = aarch64_insn_get_sub_value(); in aarch64_insn_gen_add_sub_shifted_reg()
833 insn = aarch64_insn_get_adds_value(); in aarch64_insn_gen_add_sub_shifted_reg()
836 insn = aarch64_insn_get_subs_value(); in aarch64_insn_gen_add_sub_shifted_reg()
848 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_add_sub_shifted_reg()
857 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_add_sub_shifted_reg()
859 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_add_sub_shifted_reg()
861 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RM, insn, reg); in aarch64_insn_gen_add_sub_shifted_reg()
863 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_6, insn, shift); in aarch64_insn_gen_add_sub_shifted_reg()
871 u32 insn; in aarch64_insn_gen_data1() local
875 insn = aarch64_insn_get_rev16_value(); in aarch64_insn_gen_data1()
878 insn = aarch64_insn_get_rev32_value(); in aarch64_insn_gen_data1()
882 insn = aarch64_insn_get_rev64_value(); in aarch64_insn_gen_data1()
893 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_data1()
900 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_data1()
902 return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_data1()
911 u32 insn; in aarch64_insn_gen_data2() local
915 insn = aarch64_insn_get_udiv_value(); in aarch64_insn_gen_data2()
918 insn = aarch64_insn_get_sdiv_value(); in aarch64_insn_gen_data2()
921 insn = aarch64_insn_get_lslv_value(); in aarch64_insn_gen_data2()
924 insn = aarch64_insn_get_lsrv_value(); in aarch64_insn_gen_data2()
927 insn = aarch64_insn_get_asrv_value(); in aarch64_insn_gen_data2()
930 insn = aarch64_insn_get_rorv_value(); in aarch64_insn_gen_data2()
941 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_data2()
948 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_data2()
950 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_data2()
952 return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RM, insn, reg); in aarch64_insn_gen_data2()
962 u32 insn; in aarch64_insn_gen_data3() local
966 insn = aarch64_insn_get_madd_value(); in aarch64_insn_gen_data3()
969 insn = aarch64_insn_get_msub_value(); in aarch64_insn_gen_data3()
980 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_data3()
987 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_data3()
989 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RA, insn, src); in aarch64_insn_gen_data3()
991 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, in aarch64_insn_gen_data3()
994 return aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RM, insn, in aarch64_insn_gen_data3()
1005 u32 insn; in aarch64_insn_gen_logical_shifted_reg() local
1009 insn = aarch64_insn_get_and_value(); in aarch64_insn_gen_logical_shifted_reg()
1012 insn = aarch64_insn_get_bic_value(); in aarch64_insn_gen_logical_shifted_reg()
1015 insn = aarch64_insn_get_orr_value(); in aarch64_insn_gen_logical_shifted_reg()
1018 insn = aarch64_insn_get_orn_value(); in aarch64_insn_gen_logical_shifted_reg()
1021 insn = aarch64_insn_get_eor_value(); in aarch64_insn_gen_logical_shifted_reg()
1024 insn = aarch64_insn_get_eon_value(); in aarch64_insn_gen_logical_shifted_reg()
1027 insn = aarch64_insn_get_ands_value(); in aarch64_insn_gen_logical_shifted_reg()
1030 insn = aarch64_insn_get_bics_value(); in aarch64_insn_gen_logical_shifted_reg()
1042 insn |= AARCH64_INSN_SF_BIT; in aarch64_insn_gen_logical_shifted_reg()
1051 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RD, insn, dst); in aarch64_insn_gen_logical_shifted_reg()
1053 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RN, insn, src); in aarch64_insn_gen_logical_shifted_reg()
1055 insn = aarch64_insn_encode_register(AARCH64_INSN_REGTYPE_RM, insn, reg); in aarch64_insn_gen_logical_shifted_reg()
1057 return aarch64_insn_encode_immediate(AARCH64_INSN_IMM_6, insn, shift); in aarch64_insn_gen_logical_shifted_reg()
1060 bool aarch32_insn_is_wide(u32 insn) in aarch32_insn_is_wide() argument
1062 return insn >= 0xe800; in aarch32_insn_is_wide()
1068 u32 aarch32_insn_extract_reg_num(u32 insn, int offset) in aarch32_insn_extract_reg_num() argument
1070 return (insn & (0xf << offset)) >> offset; in aarch32_insn_extract_reg_num()
1075 u32 aarch32_insn_mcr_extract_opc2(u32 insn) in aarch32_insn_mcr_extract_opc2() argument
1077 return (insn & (OPC2_MASK << OPC2_OFFSET)) >> OPC2_OFFSET; in aarch32_insn_mcr_extract_opc2()
1081 u32 aarch32_insn_mcr_extract_crm(u32 insn) in aarch32_insn_mcr_extract_crm() argument
1083 return insn & CRM_MASK; in aarch32_insn_mcr_extract_crm()