aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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));
}
}