diff options
Diffstat (limited to 'amd64/isel.c')
| -rw-r--r-- | amd64/isel.c | 8 |
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)); } } |