Lines Matching refs:inst

75 static bool decode_insn_reg0i26_fomat(union loongarch_instruction inst,  in decode_insn_reg0i26_fomat()  argument
78 switch (inst.reg0i26_format.opcode) { in decode_insn_reg0i26_fomat()
81 insn->immediate = sign_extend64(inst.reg0i26_format.immediate_h << 16 | in decode_insn_reg0i26_fomat()
82 inst.reg0i26_format.immediate_l, 25); in decode_insn_reg0i26_fomat()
86 insn->immediate = sign_extend64(inst.reg0i26_format.immediate_h << 16 | in decode_insn_reg0i26_fomat()
87 inst.reg0i26_format.immediate_l, 25); in decode_insn_reg0i26_fomat()
96 static bool decode_insn_reg1i21_fomat(union loongarch_instruction inst, in decode_insn_reg1i21_fomat() argument
99 switch (inst.reg1i21_format.opcode) { in decode_insn_reg1i21_fomat()
104 insn->immediate = sign_extend64(inst.reg1i21_format.immediate_h << 16 | in decode_insn_reg1i21_fomat()
105 inst.reg1i21_format.immediate_l, 20); in decode_insn_reg1i21_fomat()
114 static bool decode_insn_reg2i12_fomat(union loongarch_instruction inst, in decode_insn_reg2i12_fomat() argument
119 switch (inst.reg2i12_format.opcode) { in decode_insn_reg2i12_fomat()
121 if ((inst.reg2i12_format.rd == CFI_SP) || (inst.reg2i12_format.rj == CFI_SP)) { in decode_insn_reg2i12_fomat()
123 insn->immediate = sign_extend64(inst.reg2i12_format.immediate, 11); in decode_insn_reg2i12_fomat()
126 op->src.reg = inst.reg2i12_format.rj; in decode_insn_reg2i12_fomat()
129 op->dest.reg = inst.reg2i12_format.rd; in decode_insn_reg2i12_fomat()
132 if ((inst.reg2i12_format.rd == CFI_SP) && (inst.reg2i12_format.rj == CFI_FP)) { in decode_insn_reg2i12_fomat()
143 if (inst.reg2i12_format.rj == CFI_SP) { in decode_insn_reg2i12_fomat()
145 insn->immediate = sign_extend64(inst.reg2i12_format.immediate, 11); in decode_insn_reg2i12_fomat()
151 op->dest.reg = inst.reg2i12_format.rd; in decode_insn_reg2i12_fomat()
156 if (inst.reg2i12_format.rj == CFI_SP) { in decode_insn_reg2i12_fomat()
158 insn->immediate = sign_extend64(inst.reg2i12_format.immediate, 11); in decode_insn_reg2i12_fomat()
161 op->src.reg = inst.reg2i12_format.rd; in decode_insn_reg2i12_fomat()
169 if (inst.reg2i12_format.rd == 0 && in decode_insn_reg2i12_fomat()
170 inst.reg2i12_format.rj == 0 && in decode_insn_reg2i12_fomat()
171 inst.reg2i12_format.immediate == 0) in decode_insn_reg2i12_fomat()
182 static bool decode_insn_reg2i14_fomat(union loongarch_instruction inst, in decode_insn_reg2i14_fomat() argument
187 switch (inst.reg2i14_format.opcode) { in decode_insn_reg2i14_fomat()
189 if (inst.reg2i14_format.rj == CFI_SP) { in decode_insn_reg2i14_fomat()
191 insn->immediate = sign_extend64(inst.reg2i14_format.immediate, 13); in decode_insn_reg2i14_fomat()
197 op->dest.reg = inst.reg2i14_format.rd; in decode_insn_reg2i14_fomat()
202 if (inst.reg2i14_format.rj == CFI_SP) { in decode_insn_reg2i14_fomat()
204 if (inst.reg2i14_format.rd == LOONGARCH_GPR_RA && in decode_insn_reg2i14_fomat()
205 inst.reg2i14_format.immediate == 0) in decode_insn_reg2i14_fomat()
209 insn->immediate = sign_extend64(inst.reg2i14_format.immediate, 13); in decode_insn_reg2i14_fomat()
212 op->src.reg = inst.reg2i14_format.rd; in decode_insn_reg2i14_fomat()
226 static bool decode_insn_reg2i16_fomat(union loongarch_instruction inst, in decode_insn_reg2i16_fomat() argument
229 switch (inst.reg2i16_format.opcode) { in decode_insn_reg2i16_fomat()
231 if (inst.reg2i16_format.rd == 0 && in decode_insn_reg2i16_fomat()
232 inst.reg2i16_format.rj == CFI_RA && in decode_insn_reg2i16_fomat()
233 inst.reg2i16_format.immediate == 0) { in decode_insn_reg2i16_fomat()
236 } else if (inst.reg2i16_format.rd == CFI_RA) { in decode_insn_reg2i16_fomat()
239 } else if (inst.reg2i16_format.rd == CFI_A0 && in decode_insn_reg2i16_fomat()
240 inst.reg2i16_format.immediate == 0) { in decode_insn_reg2i16_fomat()
247 } else if (inst.reg2i16_format.rd == 0 && in decode_insn_reg2i16_fomat()
248 inst.reg2i16_format.immediate == 0) { in decode_insn_reg2i16_fomat()
251 } else if (inst.reg2i16_format.rd == 0 && in decode_insn_reg2i16_fomat()
252 inst.reg2i16_format.immediate != 0) { in decode_insn_reg2i16_fomat()
262 insn->immediate = sign_extend64(inst.reg2i16_format.immediate, 15); in decode_insn_reg2i16_fomat()
272 insn->immediate = sign_extend64(inst.reg2i16_format.immediate, 15); in decode_insn_reg2i16_fomat()
288 union loongarch_instruction inst; in arch_decode_instruction() local
300 inst = *(union loongarch_instruction *)(sec->data->d_buf + offset); in arch_decode_instruction()
302 if (decode_insn_reg0i26_fomat(inst, insn)) in arch_decode_instruction()
304 if (decode_insn_reg1i21_fomat(inst, insn)) in arch_decode_instruction()
306 if (decode_insn_reg2i12_fomat(inst, insn, ops_list, op)) in arch_decode_instruction()
308 if (decode_insn_reg2i14_fomat(inst, insn, ops_list, op)) in arch_decode_instruction()
310 if (decode_insn_reg2i16_fomat(inst, insn)) in arch_decode_instruction()
313 if (inst.word == 0) in arch_decode_instruction()
315 else if (inst.reg0i15_format.opcode == break_op) { in arch_decode_instruction()
318 } else if (inst.reg2_format.opcode == ertn_op) { in arch_decode_instruction()