|
@@ -1560,8 +1560,9 @@ static void asm_callid(ASMState *as, IRIns *ir, IRCallID id)
|
|
static void asm_callround(ASMState *as, IRIns *ir, int id)
|
|
static void asm_callround(ASMState *as, IRIns *ir, int id)
|
|
{
|
|
{
|
|
/* The modified regs must match with the *.dasc implementation. */
|
|
/* The modified regs must match with the *.dasc implementation. */
|
|
- RegSet drop = RID2RSET(RID_D1)|RID2RSET(RID_D2)|
|
|
|
|
|
|
+ RegSet drop = RID2RSET(RID_D0)|RID2RSET(RID_D1)|RID2RSET(RID_D2)|
|
|
RID2RSET(RID_R0)|RID2RSET(RID_R1);
|
|
RID2RSET(RID_R0)|RID2RSET(RID_R1);
|
|
|
|
+ if (ra_hasreg(ir->r)) rset_clear(drop, ir->r);
|
|
ra_evictset(as, drop);
|
|
ra_evictset(as, drop);
|
|
ra_destreg(as, ir, RID_FPRET);
|
|
ra_destreg(as, ir, RID_FPRET);
|
|
emit_call(as, id == IRFPM_FLOOR ? (void *)lj_vm_floor_hf :
|
|
emit_call(as, id == IRFPM_FLOOR ? (void *)lj_vm_floor_hf :
|