diff options
Diffstat (limited to 'amd64')
| -rw-r--r-- | amd64/emit.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/amd64/emit.c b/amd64/emit.c index f872b49..ae3f45d 100644 --- a/amd64/emit.c +++ b/amd64/emit.c @@ -42,17 +42,16 @@ ref2oper(union ref r) enum { NOBASE = 99, NOINDEX = 99 }; -static struct oper -addmemoper(struct oper mem, struct oper add) +static void +addmemoper(struct oper *mem, struct oper add) { - assert(mem.t == OMEM); + assert(mem->t == OMEM); if (add.t == OIMM) { - mem.disp += add.imm; + mem->disp += add.imm; } else if (add.t == OREG) { - assert(mem.index == NOINDEX); - mem.index = add.reg; + assert(mem->index == NOINDEX); + mem->index = add.reg; } - return mem; } enum operpat { @@ -383,10 +382,10 @@ mkmemoper(union ref r) struct oper mem; if (addr->base.t == RTMP && ioper[addr->base.i].t == OMEM) { mem = ioper[addr->base.i]; - if (addr->index.t) addmemoper(mem, mkregoper(addr->index)); + if (addr->index.t) addmemoper(&mem, mkregoper(addr->index)); assert(!mem.shift); mem.shift = addr->shift; - addmemoper(mem, mkoper(OIMM, .imm = addr->disp)); + addmemoper(&mem, mkoper(OIMM, .imm = addr->disp)); return mem; } return mkoper(OMEM, .base = addr->base.t ? mkregoper(addr->base).reg : NOBASE, |