diff options
-rw-r--r-- | src/lj_asm_arm.h | 2 | ||||
-rw-r--r-- | src/lj_asm_mips.h | 2 | ||||
-rw-r--r-- | src/lj_asm_ppc.h | 2 | ||||
-rw-r--r-- | src/lj_asm_x86.h | 2 |
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) | |||
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_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) | |||
291 | static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) | 291 | static 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) | |||
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 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) | |||
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)) |