diff options
Diffstat (limited to 'src/lj_asm_arm.h')
-rw-r--r-- | src/lj_asm_arm.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h index 262fa59e..57575874 100644 --- a/src/lj_asm_arm.h +++ b/src/lj_asm_arm.h | |||
@@ -2114,7 +2114,7 @@ static void asm_head_root_base(ASMState *as) | |||
2114 | } | 2114 | } |
2115 | 2115 | ||
2116 | /* Coalesce BASE register for a side trace. */ | 2116 | /* Coalesce BASE register for a side trace. */ |
2117 | static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) | 2117 | static Reg asm_head_side_base(ASMState *as, IRIns *irp) |
2118 | { | 2118 | { |
2119 | IRIns *ir; | 2119 | IRIns *ir; |
2120 | asm_head_lreg(as); | 2120 | asm_head_lreg(as); |
@@ -2122,16 +2122,15 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) | |||
2122 | if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) | 2122 | if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) |
2123 | ra_spill(as, ir); | 2123 | ra_spill(as, ir); |
2124 | if (ra_hasspill(irp->s)) { | 2124 | if (ra_hasspill(irp->s)) { |
2125 | rset_clear(allow, ra_dest(as, ir, allow)); | 2125 | return ra_dest(as, ir, RSET_GPR); |
2126 | } else { | 2126 | } else { |
2127 | Reg r = irp->r; | 2127 | Reg r = irp->r; |
2128 | lua_assert(ra_hasreg(r)); | 2128 | lua_assert(ra_hasreg(r)); |
2129 | rset_clear(allow, r); | ||
2130 | if (r != ir->r && !rset_test(as->freeset, r)) | 2129 | if (r != ir->r && !rset_test(as->freeset, r)) |
2131 | ra_restore(as, regcost_ref(as->cost[r])); | 2130 | ra_restore(as, regcost_ref(as->cost[r])); |
2132 | ra_destreg(as, ir, r); | 2131 | ra_destreg(as, ir, r); |
2132 | return r; | ||
2133 | } | 2133 | } |
2134 | return allow; | ||
2135 | } | 2134 | } |
2136 | 2135 | ||
2137 | /* -- Tail of trace ------------------------------------------------------- */ | 2136 | /* -- Tail of trace ------------------------------------------------------- */ |