Fix base register coalescing in side trace.
Thanks to Sergey Kaplun, NiLuJe and Peter Cawley. #1031 #1016
This commit is contained in:
@@ -1366,6 +1366,7 @@ static void asm_head_side(ASMState *as)
|
||||
RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */
|
||||
RegSet live = RSET_EMPTY; /* Live parent registers. */
|
||||
RegSet pallow = RSET_GPR; /* Registers needed by the parent stack check. */
|
||||
Reg pbase;
|
||||
IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */
|
||||
int32_t spadj, spdelta;
|
||||
int pass2 = 0;
|
||||
@@ -1377,7 +1378,11 @@ static void asm_head_side(ASMState *as)
|
||||
as->snapno = 0;
|
||||
asm_snap_alloc(as);
|
||||
}
|
||||
allow = asm_head_side_base(as, irp, allow);
|
||||
pbase = asm_head_side_base(as, irp);
|
||||
if (pbase != RID_NONE) {
|
||||
rset_clear(allow, pbase);
|
||||
rset_clear(pallow, pbase);
|
||||
}
|
||||
|
||||
/* Scan all parent SLOADs and collect register dependencies. */
|
||||
for (i = as->stopins; i > REF_BASE; i--) {
|
||||
|
||||
Reference in New Issue
Block a user