diff options
Diffstat (limited to 'src/lj_asm_mips.h')
-rw-r--r-- | src/lj_asm_mips.h | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/lj_asm_mips.h b/src/lj_asm_mips.h index 6163882e..299b4439 100644 --- a/src/lj_asm_mips.h +++ b/src/lj_asm_mips.h | |||
@@ -364,15 +364,13 @@ static void asm_callid(ASMState *as, IRIns *ir, IRCallID id) | |||
364 | static void asm_callround(ASMState *as, IRIns *ir, IRCallID id) | 364 | static void asm_callround(ASMState *as, IRIns *ir, IRCallID id) |
365 | { | 365 | { |
366 | /* The modified regs must match with the *.dasc implementation. */ | 366 | /* The modified regs must match with the *.dasc implementation. */ |
367 | RegSet drop = RID2RSET(RID_R1)|RID2RSET(RID_R12)|RID2RSET(RID_F2)| | 367 | RegSet drop = RID2RSET(RID_R1)|RID2RSET(RID_R12)|RID2RSET(RID_FPRET)| |
368 | RID2RSET(RID_F4)|RID2RSET(RID_F12)|RID2RSET(RID_F14); | 368 | RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(REGARG_FIRSTFPR); |
369 | const CCallInfo *ci = &lj_ir_callinfo[id]; | 369 | if (ra_hasreg(ir->r)) rset_clear(drop, ir->r); |
370 | IRRef args[2]; | ||
371 | args[0] = ir->op1; | ||
372 | args[1] = ir->op2; | ||
373 | ra_evictset(as, drop); | 370 | ra_evictset(as, drop); |
374 | ra_destreg(as, ir, RID_FPRET); | 371 | ra_destreg(as, ir, RID_FPRET); |
375 | asm_gencall(as, ci, args); | 372 | emit_call(as, (void *)lj_ir_callinfo[id].func); |
373 | ra_leftov(as, REGARG_FIRSTFPR, ir->op1); | ||
376 | } | 374 | } |
377 | 375 | ||
378 | /* -- Returns ------------------------------------------------------------- */ | 376 | /* -- Returns ------------------------------------------------------------- */ |