Lines Matching refs:insn

51 static const char *get_imm (const char *param, struct spu_insn *insn, int arg);
52 static const char *get_reg (const char *param, struct spu_insn *insn, int arg,
55 struct spu_insn *insn);
152 * register names and the orx insn */
269 struct spu_insn insn;
300 /* try parsing this instruction into insn */
303 insn.exp[i].X_add_symbol = 0;
304 insn.exp[i].X_op_symbol = 0;
305 insn.exp[i].X_add_number = 0;
306 insn.exp[i].X_op = O_illegal;
307 insn.reloc_arg[i] = -1;
308 insn.flag[i] = 0;
310 insn.opcode = format->opcode;
311 insn.tag = (enum spu_insns) (format - spu_opcodes);
316 if (calcop (format, param, &insn))
334 && ! (insn.tag == M_RDCH
335 || insn.tag == M_RCHCNT
336 || insn.tag == M_WRCH))
349 md_number_to_chars (thisfrag, insn.opcode, 4);
354 if (insn.reloc_arg[i] >= 0)
357 bfd_reloc_code_real_type reloc = arg_encode[insn.reloc_arg[i]].reloc;
364 if (insn.flag[i] == 1)
366 else if (insn.flag[i] == 2)
371 &insn.exp[i],
374 fixP->tc_fix_data.arg_format = insn.reloc_arg[i];
375 fixP->tc_fix_data.insn_tag = insn.tag;
381 calcop (struct spu_opcode *format, const char *param, struct spu_insn *insn)
397 param = get_reg (param, insn, arg, 1);
399 param = get_imm (param, insn, arg);
486 get_reg (const char *param, struct spu_insn *insn, int arg, int accept_expr)
560 insn->opcode |= regno << arg_encode[arg].pos;
579 insn->opcode |= ex.X_add_number << arg_encode[arg].pos;
587 get_imm (const char *param, struct spu_insn *insn, int arg)
592 int reloc_i = insn->reloc_arg[0] >= 0 ? 1 : 0;
627 expression (&insn->exp[reloc_i]);
647 if (insn->exp[reloc_i].X_op == O_constant)
649 val = insn->exp[reloc_i].X_add_number;
688 insn->opcode |= ((val >> 2) & 0x7f);
690 insn->opcode |= (((val >> arg_encode[arg].rshift)
693 insn->reloc_arg[reloc_i] = -1;
694 insn->flag[reloc_i] = 0;
698 insn->reloc_arg[reloc_i] = arg;
700 insn->flag[reloc_i] = 1;
702 insn->flag[reloc_i] = 2;