diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_asm_arm.h | 2 | ||||
-rw-r--r-- | src/lj_asm_ppc.h | 2 | ||||
-rw-r--r-- | src/lj_asm_x86.h | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h index c129dd4e..557626e4 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) | |||
426 | static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) | 426 | static 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_ppc.h b/src/lj_asm_ppc.h index 7deeb66e..0134258f 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) | |||
298 | static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) | 298 | static 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 941d0919..d6e272c0 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) | |||
531 | static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) | 531 | static 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)) |