Example #1
0
void expand_mod(void)
{
  struct op o = get_current_seg()->code[get_current_seg()->pos];

  if ((o.op == MOD) || (o.op == UMOD))
    {
      if (o.args[0].val.regnum != o.args[2].val.regnum)
	{
	  struct seg* seg = get_current_seg();

	  set_op(seg, seg->pos, MOV);
	  set_mode(seg, seg->pos, 0, 'r');
	  set_regnum(seg, seg->pos, 0, o.args[2].val.regnum);
	  set_mode(seg, seg->pos, 1, 'r');
	  set_regnum(seg, seg->pos, 1, o.args[0].val.regnum);
	  set_listing(seg, seg->pos, xsprintf("mov\tr%d, r%d",
					      o.args[2].val.regnum,
					      o.args[0].val.regnum));

	  seg->pos++;
	  adjust_segsize(seg, seg->pos+1);

	  set_op(seg, seg->pos, o.op);
	  set_mode(seg, seg->pos, 0, 'r');
	  set_regnum(seg, seg->pos, 0, o.args[2].val.regnum);
	  set_mode(seg, seg->pos, 1, 'r');
	  set_regnum(seg, seg->pos, 1, o.args[1].val.regnum);
	  set_mode(seg, seg->pos, 2, 'r');
	  set_regnum(seg, seg->pos, 2, 0); /* this should never be used */
	  set_listing(seg, seg->pos, xsprintf("%s\tr%d, r%d, r%d",
					      o.op == MOD ? "mod" : "umod",
					      o.args[2].val.regnum,
					      o.args[1].val.regnum,
					      o.args[2].val.regnum));
	}
    }
}
Example #2
0
File: syntax.c Project: kusma/vasm
static void handle_nlist(char *s)
{
  set_listing(0);
  eol(s);
}