aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lj_asm_arm.h2
-rw-r--r--src/lj_asm_mips.h2
-rw-r--r--src/lj_asm_ppc.h2
-rw-r--r--src/lj_asm_x86.h2
4 files changed, 4 insertions, 4 deletions
diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h
index 9e4cf436..ba65f45b 100644
--- a/src/lj_asm_arm.h
+++ b/src/lj_asm_arm.h
@@ -426,7 +426,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
426static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) 426static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
427{ 427{
428 RegSet drop = RSET_SCRATCH; 428 RegSet drop = RSET_SCRATCH;
429 int hiop = ((ir+1)->o == IR_HIOP); 429 int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
430 if (ra_hasreg(ir->r)) 430 if (ra_hasreg(ir->r))
431 rset_clear(drop, ir->r); /* Dest reg handled below. */ 431 rset_clear(drop, ir->r); /* Dest reg handled below. */
432 if (hiop && ra_hasreg((ir+1)->r)) 432 if (hiop && ra_hasreg((ir+1)->r))
diff --git a/src/lj_asm_mips.h b/src/lj_asm_mips.h
index 78bd26d5..8cdd913b 100644
--- a/src/lj_asm_mips.h
+++ b/src/lj_asm_mips.h
@@ -291,7 +291,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
291static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) 291static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
292{ 292{
293 RegSet drop = RSET_SCRATCH; 293 RegSet drop = RSET_SCRATCH;
294 int hiop = ((ir+1)->o == IR_HIOP); 294 int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
295 if ((ci->flags & CCI_NOFPRCLOBBER)) 295 if ((ci->flags & CCI_NOFPRCLOBBER))
296 drop &= ~RSET_FPR; 296 drop &= ~RSET_FPR;
297 if (ra_hasreg(ir->r)) 297 if (ra_hasreg(ir->r))
diff --git a/src/lj_asm_ppc.h b/src/lj_asm_ppc.h
index 2c5d74a8..e6129032 100644
--- a/src/lj_asm_ppc.h
+++ b/src/lj_asm_ppc.h
@@ -298,7 +298,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
298static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) 298static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
299{ 299{
300 RegSet drop = RSET_SCRATCH; 300 RegSet drop = RSET_SCRATCH;
301 int hiop = ((ir+1)->o == IR_HIOP); 301 int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
302 if ((ci->flags & CCI_NOFPRCLOBBER)) 302 if ((ci->flags & CCI_NOFPRCLOBBER))
303 drop &= ~RSET_FPR; 303 drop &= ~RSET_FPR;
304 if (ra_hasreg(ir->r)) 304 if (ra_hasreg(ir->r))
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 0b6b2d4a..a79be4e6 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -531,7 +531,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
531static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) 531static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
532{ 532{
533 RegSet drop = RSET_SCRATCH; 533 RegSet drop = RSET_SCRATCH;
534 int hiop = (LJ_32 && (ir+1)->o == IR_HIOP); 534 int hiop = (LJ_32 && (ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
535 if ((ci->flags & CCI_NOFPRCLOBBER)) 535 if ((ci->flags & CCI_NOFPRCLOBBER))
536 drop &= ~RSET_FPR; 536 drop &= ~RSET_FPR;
537 if (ra_hasreg(ir->r)) 537 if (ra_hasreg(ir->r))