From 2ac083cb5a0ce5f24fb1182eacf14438bb45e7ba Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 19 Aug 2012 18:41:34 +0200 Subject: [PATCH] MIPS: Fix calls to floor/ceil/trunc. --- src/lj_asm_mips.h | 12 +++++------- src/vm_mips.dasc | 2 +- 2 files changed, 6 insertions(+), 8 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) static void asm_callround(ASMState *as, IRIns *ir, IRCallID id) { /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RID2RSET(RID_R1)|RID2RSET(RID_R12)|RID2RSET(RID_F2)| - RID2RSET(RID_F4)|RID2RSET(RID_F12)|RID2RSET(RID_F14); - const CCallInfo *ci = &lj_ir_callinfo[id]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; + RegSet drop = RID2RSET(RID_R1)|RID2RSET(RID_R12)|RID2RSET(RID_FPRET)| + RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(REGARG_FIRSTFPR); + if (ra_hasreg(ir->r)) rset_clear(drop, ir->r); ra_evictset(as, drop); ra_destreg(as, ir, RID_FPRET); - asm_gencall(as, ci, args); + emit_call(as, (void *)lj_ir_callinfo[id].func); + ra_leftov(as, REGARG_FIRSTFPR, ir->op1); } /* -- Returns ------------------------------------------------------------- */ diff --git a/src/vm_mips.dasc b/src/vm_mips.dasc index 23692e34..46038c36 100644 --- a/src/vm_mips.dasc +++ b/src/vm_mips.dasc @@ -2154,7 +2154,7 @@ static void build_subroutines(BuildCtx *ctx) |//-- Math helper functions ---------------------------------------------- |//----------------------------------------------------------------------- | - |// Modifies AT, TMP0, FRET1, FRET2, f4. Keeps all others incl. FARG1, FARG2. + |// Modifies AT, TMP0, FRET1, FRET2, f4. Keeps all others incl. FARG1. |.macro vm_round, func | lui TMP0, 0x4330 // Hiword of 2^52 (double). | mtc1 r0, f4