diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_asm_arm64.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/lj_asm_arm64.h b/src/lj_asm_arm64.h index 95138fe9..d3e4bb63 100644 --- a/src/lj_asm_arm64.h +++ b/src/lj_asm_arm64.h | |||
@@ -1915,7 +1915,7 @@ static void asm_head_root_base(ASMState *as) | |||
1915 | } | 1915 | } |
1916 | 1916 | ||
1917 | /* Coalesce BASE register for a side trace. */ | 1917 | /* Coalesce BASE register for a side trace. */ |
1918 | static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) | 1918 | static Reg asm_head_side_base(ASMState *as, IRIns *irp) |
1919 | { | 1919 | { |
1920 | IRIns *ir; | 1920 | IRIns *ir; |
1921 | asm_head_lreg(as); | 1921 | asm_head_lreg(as); |
@@ -1923,16 +1923,15 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) | |||
1923 | if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) | 1923 | if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) |
1924 | ra_spill(as, ir); | 1924 | ra_spill(as, ir); |
1925 | if (ra_hasspill(irp->s)) { | 1925 | if (ra_hasspill(irp->s)) { |
1926 | rset_clear(allow, ra_dest(as, ir, allow)); | 1926 | return ra_dest(as, ir, RSET_GPR); |
1927 | } else { | 1927 | } else { |
1928 | Reg r = irp->r; | 1928 | Reg r = irp->r; |
1929 | lj_assertA(ra_hasreg(r), "base reg lost"); | 1929 | lj_assertA(ra_hasreg(r), "base reg lost"); |
1930 | rset_clear(allow, r); | ||
1931 | if (r != ir->r && !rset_test(as->freeset, r)) | 1930 | if (r != ir->r && !rset_test(as->freeset, r)) |
1932 | ra_restore(as, regcost_ref(as->cost[r])); | 1931 | ra_restore(as, regcost_ref(as->cost[r])); |
1933 | ra_destreg(as, ir, r); | 1932 | ra_destreg(as, ir, r); |
1933 | return r; | ||
1934 | } | 1934 | } |
1935 | return allow; | ||
1936 | } | 1935 | } |
1937 | 1936 | ||
1938 | /* -- Tail of trace ------------------------------------------------------- */ | 1937 | /* -- Tail of trace ------------------------------------------------------- */ |