Exemplo n.º 1
0
void rstack_link (lua_State *L, GCObject *o, lu_byte tt) {
    RStack *rs = rstack(L);
    o->gch.tt = tt;
    o->gch.next = NULL;
    o->gch.marked = luaC_white(G(L));
    l_setbit(o->gch.marked, FIXEDBIT);
    set_regnum(o, rs->cregnum);
}
Exemplo n.º 2
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));
	}
    }
}