diff options
| -rw-r--r-- | amd64/emit.c | 1 | ||||
| -rw-r--r-- | amd64/isel.c | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/amd64/emit.c b/amd64/emit.c index 14b679f..5cabd09 100644 --- a/amd64/emit.c +++ b/amd64/emit.c @@ -132,6 +132,7 @@ mkmemoper(union ref r) const struct addr *addr = &addrht[r.i]; struct oper mem; + assert(addr->shift <= 3); if (addr->base.t == RTMP && ioper(addr->base.i).t == OMEM) { mem = ioper(addr->base.i); if (addr->index.bits) addmemoper(&mem, mkregoper(addr->index)); diff --git a/amd64/isel.c b/amd64/isel.c index 9065ccf..3611670 100644 --- a/amd64/isel.c +++ b/amd64/isel.c @@ -214,9 +214,9 @@ ascale(struct addr *addr, union ref a, union ref b) { if (b.t != RICON) return 0; if (addr->index.bits) return 0; + if ((unsigned)b.i > 3) return 0; if (a.t == RREG) { Scaled: - if ((unsigned)b.i > 3) return 0; addr->index = a; addr->shift = b.i; return 1; |