Add Intel encodings for imul.

This commit is contained in:
Jakob Stoklund Olesen
2017-07-18 09:22:50 -07:00
parent 28457f82c3
commit 02fd83cd5c
6 changed files with 52 additions and 1 deletions

View File

@@ -23,6 +23,11 @@ for inst, opc in [
# default. Otherwise reg-alloc would never use r8 and up.
I64.enc(inst.i32, *r.rr(opc))
I32.enc(base.imul.i32, *r.rrx(0x0f, 0xaf))
I64.enc(base.imul.i64, *r.rrx.rex(0x0f, 0xaf, w=1))
I64.enc(base.imul.i32, *r.rrx.rex(0x0f, 0xaf))
I64.enc(base.imul.i32, *r.rrx(0x0f, 0xaf))
I32.enc(base.copy.i32, *r.umr(0x89))
I64.enc(base.copy.i64, *r.umr.rex(0x89, w=1))
I64.enc(base.copy.i32, *r.umr.rex(0x89))

View File

@@ -197,6 +197,14 @@ rr = TailRecipe(
modrm_rr(in_reg0, in_reg1, sink);
''')
# XX /r with operands swapped. (RM form).
rrx = TailRecipe(
'rrx', Binary, size=1, ins=(GPR, GPR), outs=0,
emit='''
PUT_OP(bits, rex2(in_reg1, in_reg0), sink);
modrm_rr(in_reg1, in_reg0, sink);
''')
# XX /r, but for a unary operator with separate input/output register, like
# copies. MR form.
umr = TailRecipe(