aboutsummaryrefslogtreecommitdiffhomepage
path: root/amd64/isel.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-11-24 08:35:40 +0100
committerlemon <lsof@mailbox.org>2025-11-24 08:37:06 +0100
commit8ca8776f3ad526745d85adac942f0e2b6951c5c8 (patch)
treee4a444a4f380295ad4a09b658415593f3866b9fd /amd64/isel.c
parentd0dde5bc533b321ad35113d45c6b167d8f9e9ffc (diff)
isel: loadstoreaddr don't fuseaddr as much
Diffstat (limited to 'amd64/isel.c')
-rw-r--r--amd64/isel.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/amd64/isel.c b/amd64/isel.c
index 51a58db..98585fa 100644
--- a/amd64/isel.c
+++ b/amd64/isel.c
@@ -339,10 +339,12 @@ loadstoreaddr(struct block *blk, union ref *r, int *curi)
{
if (isimm32(*r)) {
*r = mkaddr((struct addr){.base = *r});
- } else if (!fuseaddr(r, blk, curi) && r->t != RTMP && r->t != RREG) {
- *r = insertinstr(blk, (*curi)++, mkinstr(Ocopy, KPTR, *r));
- } else {
+ } else if (isaddrcon(*r, 0)) {
picfixsym(r, blk, curi);
+ } else if (r->t == RTMP) {
+ if (addarg4addrp(*r)) fuseaddr(r, blk, curi);
+ } else if (r->t != RREG) {
+ *r = insertinstr(blk, (*curi)++, mkinstr(Ocopy, KPTR, *r));
}
}