Browse Source

Don't allocate unused 2nd result register in JIT compiler backend.

Mike Pall 9 years ago
parent
commit
a443889677
4 changed files with 4 additions and 4 deletions
  1. 1 1
      src/lj_asm_arm.h
  2. 1 1
      src/lj_asm_mips.h
  3. 1 1
      src/lj_asm_ppc.h
  4. 1 1
      src/lj_asm_x86.h

+ 1 - 1
src/lj_asm_arm.h

@@ -426,7 +426,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 {
 {
   RegSet drop = RSET_SCRATCH;
   RegSet drop = RSET_SCRATCH;
-  int hiop = ((ir+1)->o == IR_HIOP);
+  int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
   if (ra_hasreg(ir->r))
   if (ra_hasreg(ir->r))
     rset_clear(drop, ir->r);  /* Dest reg handled below. */
     rset_clear(drop, ir->r);  /* Dest reg handled below. */
   if (hiop && ra_hasreg((ir+1)->r))
   if (hiop && ra_hasreg((ir+1)->r))

+ 1 - 1
src/lj_asm_mips.h

@@ -291,7 +291,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 {
 {
   RegSet drop = RSET_SCRATCH;
   RegSet drop = RSET_SCRATCH;
-  int hiop = ((ir+1)->o == IR_HIOP);
+  int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
   if ((ci->flags & CCI_NOFPRCLOBBER))
   if ((ci->flags & CCI_NOFPRCLOBBER))
     drop &= ~RSET_FPR;
     drop &= ~RSET_FPR;
   if (ra_hasreg(ir->r))
   if (ra_hasreg(ir->r))

+ 1 - 1
src/lj_asm_ppc.h

@@ -298,7 +298,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 {
 {
   RegSet drop = RSET_SCRATCH;
   RegSet drop = RSET_SCRATCH;
-  int hiop = ((ir+1)->o == IR_HIOP);
+  int hiop = ((ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
   if ((ci->flags & CCI_NOFPRCLOBBER))
   if ((ci->flags & CCI_NOFPRCLOBBER))
     drop &= ~RSET_FPR;
     drop &= ~RSET_FPR;
   if (ra_hasreg(ir->r))
   if (ra_hasreg(ir->r))

+ 1 - 1
src/lj_asm_x86.h

@@ -531,7 +531,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci)
 {
 {
   RegSet drop = RSET_SCRATCH;
   RegSet drop = RSET_SCRATCH;
-  int hiop = (LJ_32 && (ir+1)->o == IR_HIOP);
+  int hiop = (LJ_32 && (ir+1)->o == IR_HIOP && !irt_isnil((ir+1)->t));
   if ((ci->flags & CCI_NOFPRCLOBBER))
   if ((ci->flags & CCI_NOFPRCLOBBER))
     drop &= ~RSET_FPR;
     drop &= ~RSET_FPR;
   if (ra_hasreg(ir->r))
   if (ra_hasreg(ir->r))