aboutsummaryrefslogtreecommitdiffhomepage
path: root/amd64/emit.c
diff options
context:
space:
mode:
author lemon<lsof@mailbox.org>2023-06-19 09:50:20 +0200
committer lemon<lsof@mailbox.org>2023-06-19 09:50:20 +0200
commitd1cdebc88ea1a83e580299683ed27e6ca5d26683 (patch)
tree43641a5d6a54192d4b66ce5da4d06518b99102e2 /amd64/emit.c
parent43abf782b12e883fdf3b15402b7fa09546acb9af (diff)
fix isel & emit for sym constants
Diffstat (limited to 'amd64/emit.c')
-rw-r--r--amd64/emit.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/amd64/emit.c b/amd64/emit.c
index 670fcef..8b74632 100644
--- a/amd64/emit.c
+++ b/amd64/emit.c
@@ -35,7 +35,7 @@ ref2oper(union ref r)
case RXCON:
if (conht[r.i].cls == KI4)
return mkoper(OIMM, .imm = conht[r.i].i);
- else if (conht[r.i].deref || conht[r.i].issym)
+ else if (!conht[r.i].cls)
return mkoper(OCONR, .con = r.i);
assert(0);
case RMORE: return mkmemoper(r);
@@ -123,6 +123,9 @@ mkmemoper(union ref r)
.index = addr->index.t ? mkregoper(addr->index).reg : NOINDEX,
.disp = addr->disp,
.shift = addr->shift);
+ } else if (r.t == RXCON) {
+ assert(!conht[r.i].cls);
+ return mkoper(OCONR, .con = r.i);
} else {
return mkoper(OMEM, .base = isregref(r) ? ref2oper(r).reg : NOBASE,
.index = NOINDEX,