aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Chambers <[email protected]>2021-10-19 14:47:56 +1300
committerAndrew Chambers <[email protected]>2021-10-19 14:47:56 +1300
commitaf8317ad3bf63ef7954174a68e1db1a325b390ef (patch)
tree0ec2b966588e7204328a5ded394ee0dfbaa16522
parent56e797b4845e436a198cc8bbd1bbdf393cd71b13 (diff)
Align parser tables.
-rw-r--r--asm.peg828
-rw-r--r--parse.c54
2 files changed, 449 insertions, 433 deletions
diff --git a/asm.peg b/asm.peg
index f5abbfb..9674463 100644
--- a/asm.peg
+++ b/asm.peg
@@ -190,367 +190,379 @@ nop = "nop" { $$ = OP(0x90); }
ret = "ret" { $$ = OP(0xc3); }
push = "push" (
- 'q'? ws s:r64 { $$ = R(-1, (Rex){0}, 0x50, s); }
- | 'q' ws s:mem { $$ = OPMEM(-1, (Rex){0}, 0xff, 0x06, s); }
+ 'q'? ws s:r64 { $$ = R({.w=0}, -1, 0x50, s); }
+ | 'q' ws s:mem { $$ = OPMEM({.w=0}, -1, 0xff, 0x06, s); }
)
pop = "pop" (
- 'q'? ws d:r64 { $$ = R(-1, (Rex){0}, 0x58, d); }
- | 'q' ws d:mem { $$ = OPMEM(-1, (Rex){0}, 0x8f, 0x00, d); }
+ 'q'? ws d:r64 { $$ = R({.w=0}, -1, 0x58, d); }
+ | 'q' ws d:mem { $$ = OPMEM({.w=0}, -1, 0x8f, 0x00, d); }
)
div = "div" (
- 'b' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf6, 0x06, a); }
- | 'w' ws a:mem { $$ = OPMEM(0x66, (Rex){0}, 0xf7, 0x06, a); }
- | 'l' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf7, 0x06, a); }
- | 'q' ws a:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xf7, 0x06, a); }
- | 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0xf6, 0x06, a); }
- | 'w'? ws a:r16 { $$ = OPREG(0x66, (Rex){0}, 0xf7, 0x06, a); }
- | 'l'? ws a:r32 { $$ = OPREG(-1, (Rex){0}, 0xf7, 0x06, a); }
- | 'q'? ws a:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xf7, 0x06, a); }
+ 'b' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf6, 0x06, a); }
+ | 'w' ws a:mem { $$ = OPMEM({.w=0}, 0x66, 0xf7, 0x06, a); }
+ | 'l' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf7, 0x06, a); }
+ | 'q' ws a:mem { $$ = OPMEM({.w=1}, -1, 0xf7, 0x06, a); }
+ | 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0xf6, 0x06, a); }
+ | 'w'? ws a:r16 { $$ = OPREG({.w=0}, 0x66, 0xf7, 0x06, a); }
+ | 'l'? ws a:r32 { $$ = OPREG({.w=0}, -1, 0xf7, 0x06, a); }
+ | 'q'? ws a:r64 { $$ = OPREG({.w=1}, -1, 0xf7, 0x06, a); }
)
idiv = "idiv" (
- 'b' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf6, 0x07, a); }
- | 'w' ws a:mem { $$ = OPMEM(0x66, (Rex){0}, 0xf7, 0x07, a); }
- | 'l' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf7, 0x07, a); }
- | 'q' ws a:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xf7, 0x07, a); }
- | 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0xf6, 0x07, a); }
- | 'w'? ws a:r16 { $$ = OPREG(0x66, (Rex){0}, 0xf7, 0x07, a); }
- | 'l'? ws a:r32 { $$ = OPREG(-1, (Rex){0}, 0xf7, 0x07, a); }
- | 'q'? ws a:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xf7, 0x07, a); }
+ 'b' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf6, 0x07, a); }
+ | 'w' ws a:mem { $$ = OPMEM({.w=0}, 0x66, 0xf7, 0x07, a); }
+ | 'l' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf7, 0x07, a); }
+ | 'q' ws a:mem { $$ = OPMEM({.w=1}, -1, 0xf7, 0x07, a); }
+ | 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0xf6, 0x07, a); }
+ | 'w'? ws a:r16 { $$ = OPREG({.w=0}, 0x66, 0xf7, 0x07, a); }
+ | 'l'? ws a:r32 { $$ = OPREG({.w=0}, -1, 0xf7, 0x07, a); }
+ | 'q'? ws a:r64 { $$ = OPREG({.w=1}, -1, 0xf7, 0x07, a); }
)
mul = "mul" (
- 'b' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf6, 0x04, a); }
- | 'w' ws a:mem { $$ = OPMEM(0x66, (Rex){0}, 0xf7, 0x04, a); }
- | 'l' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf7, 0x04, a); }
- | 'q' ws a:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xf7, 0x04, a); }
- | 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0xf6, 0x04, a); }
- | 'w'? ws a:r16 { $$ = OPREG(0x66, (Rex){0}, 0xf7, 0x04, a); }
- | 'l'? ws a:r32 { $$ = OPREG(-1, (Rex){0}, 0xf7, 0x04, a); }
- | 'q'? ws a:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xf7, 0x04, a); }
+ 'b' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf6, 0x04, a); }
+ | 'w' ws a:mem { $$ = OPMEM({.w=0}, 0x66, 0xf7, 0x04, a); }
+ | 'l' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf7, 0x04, a); }
+ | 'q' ws a:mem { $$ = OPMEM({.w=1}, -1, 0xf7, 0x04, a); }
+ | 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0xf6, 0x04, a); }
+ | 'w'? ws a:r16 { $$ = OPREG({.w=0}, 0x66, 0xf7, 0x04, a); }
+ | 'l'? ws a:r32 { $$ = OPREG({.w=0}, -1, 0xf7, 0x04, a); }
+ | 'q'? ws a:r64 { $$ = OPREG({.w=1}, -1, 0xf7, 0x04, a); }
)
neg = "neg" (
- 'b' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf6, 0x03, a); }
- | 'w' ws a:mem { $$ = OPMEM(0x66, (Rex){0}, 0xf7, 0x03, a); }
- | 'l' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf7, 0x03, a); }
- | 'q' ws a:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xf7, 0x03, a); }
- | 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0xf6, 0x03, a); }
- | 'w'? ws a:r16 { $$ = OPREG(0x66, (Rex){0}, 0xf7, 0x03, a); }
- | 'l'? ws a:r32 { $$ = OPREG(-1, (Rex){0}, 0xf7, 0x03, a); }
- | 'q'? ws a:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xf7, 0x03, a); }
+ 'b' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf6, 0x03, a); }
+ | 'w' ws a:mem { $$ = OPMEM({.w=0}, 0x66, 0xf7, 0x03, a); }
+ | 'l' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf7, 0x03, a); }
+ | 'q' ws a:mem { $$ = OPMEM({.w=1}, -1, 0xf7, 0x03, a); }
+ | 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0xf6, 0x03, a); }
+ | 'w'? ws a:r16 { $$ = OPREG({.w=0}, 0x66, 0xf7, 0x03, a); }
+ | 'l'? ws a:r32 { $$ = OPREG({.w=0}, -1, 0xf7, 0x03, a); }
+ | 'q'? ws a:r64 { $$ = OPREG({.w=1}, -1, 0xf7, 0x03, a); }
)
imul = "imul" (
- 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG2(0x66, (Rex){0}, 0x01000faf, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG2(-1, (Rex){0}, 0x01000faf, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x01000faf, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x01000faf, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x01000faf, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x01000faf, s, d); }
- | 'w'? ws i:imm16 ws? ',' ws? s:r16 ws? ',' ws? d:r16 { $$ = IMMREGREG2(0x66, (Rex){0}, 0x69, i, s, d); }
- | 'l'? ws i:imm32 ws? ',' ws? s:r32 ws? ',' ws? d:r32 { $$ = IMMREGREG2(-1, (Rex){0}, 0x69, i, s, d); }
- | 'q'? ws i:imm32 ws? ',' ws? s:r64 ws? ',' ws? d:r64 { $$ = IMMREGREG2(-1, (Rex){.w=1}, 0x69, i, s, d); }
- | 'w'? ws i:imm16 ws? ',' ws? s:mem ws? ',' ws? d:r16 { $$ = IMMMEMREG(0x66, (Rex){0}, 0x69, i, s, d); }
- | 'l'? ws i:imm32 ws? ',' ws? s:mem ws? ',' ws? d:r32 { $$ = IMMMEMREG(-1, (Rex){0}, 0x69, i, s, d); }
- | 'q'? ws i:imm32 ws? ',' ws? s:mem ws? ',' ws? d:r64 { $$ = IMMMEMREG(-1, (Rex){.w=1}, 0x69, i, s, d); }
+ 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG2({.w=0}, 0x66, 0x01000faf, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, -1, 0x01000faf, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x01000faf, s, d); }
+
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x01000faf, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x01000faf, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x01000faf, s, d); }
+
+ | 'w'? ws i:imm16 ws? ',' ws? s:r16 ws? ',' ws? d:r16 { $$ = IMMREGREG2({.w=0}, 0x66, 0x69, i, s, d); }
+ | 'l'? ws i:imm32 ws? ',' ws? s:r32 ws? ',' ws? d:r32 { $$ = IMMREGREG2({.w=0}, -1, 0x69, i, s, d); }
+ | 'q'? ws i:imm32 ws? ',' ws? s:r64 ws? ',' ws? d:r64 { $$ = IMMREGREG2({.w=1}, -1, 0x69, i, s, d); }
+
+ | 'w'? ws i:imm16 ws? ',' ws? s:mem ws? ',' ws? d:r16 { $$ = IMMMEMREG({.w=0}, 0x66, 0x69, i, s, d); }
+ | 'l'? ws i:imm32 ws? ',' ws? s:mem ws? ',' ws? d:r32 { $$ = IMMMEMREG({.w=0}, -1, 0x69, i, s, d); }
+ | 'q'? ws i:imm32 ws? ',' ws? s:mem ws? ',' ws? d:r64 { $$ = IMMMEMREG({.w=1}, -1, 0x69, i, s, d); }
+
# Must come last due to peg ordering.
- | 'b' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf6, 0x05, a); }
- | 'w' ws a:mem { $$ = OPMEM(0x66, (Rex){0}, 0xf7, 0x05, a); }
- | 'l' ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0xf7, 0x05, a); }
- | 'q' ws a:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xf7, 0x05, a); }
- | 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0xf6, 0x05, a); }
- | 'w'? ws a:r16 { $$ = OPREG(0x66, (Rex){0}, 0xf7, 0x05, a); }
- | 'l'? ws a:r32 { $$ = OPREG(-1, (Rex){0}, 0xf7, 0x05, a); }
- | 'q'? ws a:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xf7, 0x05, a); }
+ | 'b' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf6, 0x05, a); }
+ | 'w' ws a:mem { $$ = OPMEM({.w=0}, 0x66, 0xf7, 0x05, a); }
+ | 'l' ws a:mem { $$ = OPMEM({.w=0}, -1, 0xf7, 0x05, a); }
+ | 'q' ws a:mem { $$ = OPMEM({.w=1}, -1, 0xf7, 0x05, a); }
+
+ | 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0xf6, 0x05, a); }
+ | 'w'? ws a:r16 { $$ = OPREG({.w=0}, 0x66, 0xf7, 0x05, a); }
+ | 'l'? ws a:r32 { $$ = OPREG({.w=0}, -1, 0xf7, 0x05, a); }
+ | 'q'? ws a:r64 { $$ = OPREG({.w=1}, -1, 0xf7, 0x05, a); }
)
lea = "lea" (
- 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x8d, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x8d, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x8d, s, d); }
+ 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x8d, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x8d, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x8d, s, d); }
)
mov = "mov" (
- 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x88, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x89, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x89, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x89, s, d); }
+ 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x88, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x89, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x89, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x89, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x088, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x89, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x89, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x89, s, d); }
-
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x8a, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x8b, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x8b, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x8b, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = RIMM(-1, (Rex){0}, 0xb0, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = RIMM(0x66, (Rex){0}, 0xb8, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = RIMM(-1, (Rex){0}, 0xb8, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x88, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x89, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x89, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x89, s, d); }
+
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x8a, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x8b, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x8b, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x8b, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = RIMM({.w=0}, -1, 0xb0, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = RIMM({.w=0}, 0x66, 0xb8, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = RIMM({.w=0}, -1, 0xb8, s, d); }
| 'q'? ws s:imm ws? ',' ws? d:r64 {
if (needsmovabs(&s.imm)){
s.imm.nbytes = 8;
- $$ = RIMM(-1, (Rex){.w=1}, 0xb8, s, d);
+ $$ = RIMM({.w=1}, -1, 0xb8, s, d);
} else {
s.imm.nbytes = 4;
s.imm.v.c = ((uint64_t)s.imm.v.c) & 0xffffffff;
- $$ = IMMREG(-1, (Rex){.w=1}, 0xc7, 0x00, s, d);
+ $$ = IMMREG({.w=1}, -1, 0xc7, 0x00, s, d);
}
}
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc6, 0x00, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xc7, 0x00, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc7, 0x00, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xc7, 0x00, s, d); }
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc6, 0x00, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xc7, 0x00, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc7, 0x00, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xc7, 0x00, s, d); }
)
movsx = "movs" (
- 'bw' ws s:r8 ws? ',' ws? d:r16 { $$ = REGREG2(0x66, (Rex){0}, 0x01000fbe, s, d); }
- | 'bl' ws s:r8 ws? ',' ws? d:r32 { $$ = REGREG2(-1, (Rex){0}, 0x01000fbe, s, d); }
- | 'bq' ws s:r8 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x01000fbe, s, d); }
- | 'wl' ws s:r16 ws? ',' ws? d:r32 { $$ = REGREG2(-1, (Rex){0}, 0x01000fbf, s, d); }
- | 'wq' ws s:r16 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x01000fbf, s, d); }
- | 'lq' ws s:r32 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x63, s, d); }
- | 'bw' ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x01000fbe, s, d); }
- | 'bl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x01000fbe, s, d); }
- | 'bq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x01000fbe, s, d); }
- | 'wl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x01000fbf, s, d); }
- | 'wq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x01000fbf, s, d); }
- | 'lq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x63, s, d); }
+ 'bw' ws s:r8 ws? ',' ws? d:r16 { $$ = REGREG2({.w=0}, 0x66, 0x01000fbe, s, d); }
+ | 'bl' ws s:r8 ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, -1, 0x01000fbe, s, d); }
+ | 'bq' ws s:r8 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x01000fbe, s, d); }
+
+ | 'wl' ws s:r16 ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, -1, 0x01000fbf, s, d); }
+ | 'wq' ws s:r16 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x01000fbf, s, d); }
+
+ | 'lq' ws s:r32 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x63, s, d); }
+
+ | 'bw' ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x01000fbe, s, d); }
+ | 'bl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x01000fbe, s, d); }
+ | 'bq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x01000fbe, s, d); }
+
+ | 'wl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x01000fbf, s, d); }
+ | 'wq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x01000fbf, s, d); }
+ | 'lq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x63, s, d); }
)
movzx = "movz" (
- 'bw' ws s:r8 ws? ',' ws? d:r16 { $$ = REGREG2(0x66, (Rex){0}, 0x01000fb6, s, d); }
- | 'bl' ws s:r8 ws? ',' ws? d:r32 { $$ = REGREG2(-1, (Rex){0}, 0x01000fb6, s, d); }
- | 'bq' ws s:r8 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x01000fb6, s, d); }
- | 'wl' ws s:r16 ws? ',' ws? d:r32 { $$ = REGREG2(-1, (Rex){0}, 0x01000fb7, s, d); }
- | 'wq' ws s:r16 ws? ',' ws? d:r64 { $$ = REGREG2(-1, (Rex){.w=1}, 0x01000fb7, s, d); }
- | 'bw' ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x01000fb6, s, d); }
- | 'bl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x01000fb6, s, d); }
- | 'bq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x01000fb6, s, d); }
- | 'wl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x01000fb7, s, d); }
- | 'wq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x01000fb7, s, d); }
+ 'bw' ws s:r8 ws? ',' ws? d:r16 { $$ = REGREG2({.w=0}, 0x66, 0x01000fb6, s, d); }
+ | 'bl' ws s:r8 ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, -1, 0x01000fb6, s, d); }
+ | 'bq' ws s:r8 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x01000fb6, s, d); }
+
+ | 'wl' ws s:r16 ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, -1, 0x01000fb7, s, d); }
+ | 'wq' ws s:r16 ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, -1, 0x01000fb7, s, d); }
+
+ | 'bw' ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x01000fb6, s, d); }
+ | 'bl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x01000fb6, s, d); }
+ | 'bq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x01000fb6, s, d); }
+
+ | 'wl' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x01000fb7, s, d); }
+ | 'wq' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x01000fb7, s, d); }
)
add = "add" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x04, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x05, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x05, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x05, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x00, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x00, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x00, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x00, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x00, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x00, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x00, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x00, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x04, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x05, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x05, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x05, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x00, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x00, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x00, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x00, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x00, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x00, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x00, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x00, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x00, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x01, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x01, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x01, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x00, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x01, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x01, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x01, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x00, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x01, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x01, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x01, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x00, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x01, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x01, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x01, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x02, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x03, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x03, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x03, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x02, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x03, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x03, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x03, s, d); }
)
and = "and" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x24, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x25, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x25, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x25, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x04, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x04, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x04, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x04, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x04, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x04, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x04, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x04, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x24, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x25, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x25, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x25, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x04, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x04, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x04, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x04, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x04, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x04, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x04, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x04, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x20, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x21, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x21, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x21, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x20, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x21, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x21, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x21, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x20, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x21, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x21, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x21, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x20, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x21, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x21, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x21, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x22, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x23, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x23, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x23, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x22, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x23, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x23, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x23, s, d); }
)
cmp = "cmp" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x3c, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x3d, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x3d, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x3d, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x07, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x07, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x07, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x07, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x07, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x07, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x07, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x07, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x3c, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x3d, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x3d, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x3d, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x07, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x07, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x07, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x07, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x07, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x07, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x07, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x07, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x38, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x39, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x39, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x39, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x38, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x39, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x39, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x39, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x38, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x39, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x39, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x39, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x38, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x39, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x39, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x39, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x3a, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x3b, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x3b, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x3b, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x3a, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x3b, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x3b, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x3b, s, d); }
)
or = "or" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x0c, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x0d, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x0d, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x0d, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x01, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x01, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x01, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x01, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x01, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x01, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x01, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x01, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x0c, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x0d, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x0d, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x0d, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x01, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x01, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x01, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x01, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x01, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x01, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x01, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x01, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x08, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x09, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x09, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x09, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x08, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x09, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x09, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x09, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x08, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x09, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x09, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x09, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x08, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x09, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x09, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x09, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x0a, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x0b, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x0b, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x0b, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x0a, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x0b, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x0b, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x0b, s, d); }
)
sub = "sub" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x2c, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x2d, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x2d, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x2d, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x05, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x05, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x05, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x05, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x05, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x05, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x05, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x05, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x2c, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x2d, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x2d, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x2d, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x05, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x05, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x05, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x05, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x05, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x05, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x05, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x05, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x28, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x29, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x29, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x29, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x28, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x29, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x29, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x29, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x28, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x29, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x29, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x29, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x28, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x29, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x29, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x29, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x2a, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x2b, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x2b, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x2b, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x2a, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x2b, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x2b, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x2b, s, d); }
)
xor = "xor" (
- 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0x34, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0x35, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0x35, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0x35, s, d); }
-
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0x80, 0x06, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0x81, 0x06, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0x81, 0x06, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0x81, 0x06, s, d); }
-
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x80, 0x06, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0x81, 0x06, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0x81, 0x06, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0x81, 0x06, s, d); }
+ 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0x34, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0x35, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0x35, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0x35, s, d); }
+
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0x80, 0x06, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0x81, 0x06, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0x81, 0x06, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0x81, 0x06, s, d); }
+
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x80, 0x06, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0x81, 0x06, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0x81, 0x06, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0x81, 0x06, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x30, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x31, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x31, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x31, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x30, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x31, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x31, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x31, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x30, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x31, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x31, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x31, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x30, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x31, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x31, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x31, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x32, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x33, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x33, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x33, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x32, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x33, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x33, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x33, s, d); }
)
xchg = "xchg" (
- 'w'? ws s:ax ws? ',' ws? d:r16 { $$ = R(0x66, (Rex){0}, 0x90, d) }
- | 'w'? ws s:r16 ws? ',' ws? d:ax { $$ = R(0x66, (Rex){0}, 0x90, s) }
- | 'l'? ws s:eax ws? ',' ws? d:r32 { $$ = R(-1, (Rex){0}, 0x90, d) }
- | 'l'? ws s:r32 ws? ',' ws? d:eax { $$ = R(-1, (Rex){0}, 0x90, s) }
- | 'q'? ws s:rax ws? ',' ws? d:r64 { $$ = R(-1, (Rex){.w=1}, 0x90, d) }
- | 'q'? ws s:r64 ws? ',' ws? d:rax { $$ = R(-1, (Rex){.w=1}, 0x90, s) }
+ 'w'? ws s:ax ws? ',' ws? d:r16 { $$ = R({.w=0}, 0x66, 0x90, d) }
+ | 'w'? ws s:r16 ws? ',' ws? d:ax { $$ = R({.w=0}, 0x66, 0x90, s) }
+ | 'l'? ws s:eax ws? ',' ws? d:r32 { $$ = R({.w=0}, -1, 0x90, d) }
+ | 'l'? ws s:r32 ws? ',' ws? d:eax { $$ = R({.w=0}, -1, 0x90, s) }
+ | 'q'? ws s:rax ws? ',' ws? d:r64 { $$ = R({.w=1}, -1, 0x90, d) }
+ | 'q'? ws s:r64 ws? ',' ws? d:rax { $$ = R({.w=1}, -1, 0x90, s) }
- | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x86, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x87, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x87, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x87, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x86, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x87, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x87, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x87, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x86, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x87, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x87, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x87, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x86, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x87, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x87, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x87, s, d); }
- | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG(-1, (Rex){0}, 0x86, s, d); }
- | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG(0x66, (Rex){0}, 0x87, s, d); }
- | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(-1, (Rex){0}, 0x87, s, d); }
- | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(-1, (Rex){.w=1}, 0x87, s, d); }
+ | 'b'? ws s:mem ws? ',' ws? d:r8 { $$ = MEMREG({.w=0}, -1, 0x86, s, d); }
+ | 'w'? ws s:mem ws? ',' ws? d:r16 { $$ = MEMREG({.w=0}, 0x66, 0x87, s, d); }
+ | 'l'? ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG({.w=0}, -1, 0x87, s, d); }
+ | 'q'? ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG({.w=1}, -1, 0x87, s, d); }
)
%{
@@ -562,225 +574,227 @@ xchg = "xchg" (
%}
set = "set" cc:condition-code (
- 'b'? ws a:r8 { $$ = OPREG(-1, (Rex){0}, 0x01000f00 | cc2setop[cc.i64], 0x00, a) }
- | 'b'? ws a:mem { $$ = OPMEM(-1, (Rex){0}, 0x01000f00 | cc2setop[cc.i64], 0x00, a) }
+ 'b'? ws a:r8 { $$ = OPREG({.w=0}, -1, 0x01000f00 | cc2setop[cc.i64], 0x00, a) }
+ | 'b'? ws a:mem { $$ = OPMEM({.w=0}, -1, 0x01000f00 | cc2setop[cc.i64], 0x00, a) }
)
sal = "sal" (
- 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(0x66, (Rex){0},0xd3, 0x04, d); }
- | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){0}, 0xd3, 0x04, d); }
- | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xd3, 0x04, d); }
- | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG(0x66, (Rex){0}, 0xd3, 0x04, d); }
- | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG(-1, (Rex){0}, 0xd3, 0x04, d); }
- | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xd3, 0x04, d); }
- | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xc1, 0x04, i, d); }
- | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0xc1, 0x04, i, d); }
+ 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, 0x66, 0xd3, 0x04, d); }
+ | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, -1, 0xd3, 0x04, d); }
+ | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=1}, -1, 0xd3, 0x04, d); }
+ | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG ({.w=0}, 0x66, 0xd3, 0x04, d); }
+ | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG ({.w=0}, -1, 0xd3, 0x04, d); }
+ | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG ({.w=1}, -1, 0xd3, 0x04, d); }
+ | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xc1, 0x04, i, d); }
+ | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc1, 0x04, i, d); }
+ | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xc1, 0x04, i, d); }
+ | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0xc1, 0x04, i, d); }
+ | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0xc1, 0x04, i, d); }
+ | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0xc1, 0x04, i, d); }
)
sar = "sar" (
- 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(0x66, (Rex){0},0xd3, 0x07, d); }
- | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){0}, 0xd3, 0x07, d); }
- | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xd3, 0x07, d); }
- | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG(0x66, (Rex){0}, 0xd3, 0x07, d); }
- | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG(-1, (Rex){0}, 0xd3, 0x07, d); }
- | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xd3, 0x07, d); }
- | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xc1, 0x07, i, d); }
- | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc1, 0x07, i, d); }
- | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xc1, 0x07, i, d); }
- | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0xc1, 0x07, i, d); }
- | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0xc1, 0x07, i, d); }
- | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0xc1, 0x07, i, d); }
+ 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, 0x66, 0xd3, 0x07, d); }
+ | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, -1, 0xd3, 0x07, d); }
+ | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=1}, -1, 0xd3, 0x07, d); }
+ | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG ({.w=0}, 0x66, 0xd3, 0x07, d); }
+ | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG ({.w=0}, -1, 0xd3, 0x07, d); }
+ | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG ({.w=1}, -1, 0xd3, 0x07, d); }
+ | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xc1, 0x07, i, d); }
+ | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc1, 0x07, i, d); }
+ | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xc1, 0x07, i, d); }
+ | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0xc1, 0x07, i, d); }
+ | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0xc1, 0x07, i, d); }
+ | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0xc1, 0x07, i, d); }
)
shl = "shl" (
- 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(0x66, (Rex){0},0xd3, 0x04, d); }
- | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){0}, 0xd3, 0x04, d); }
- | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xd3, 0x04, d); }
- | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG(0x66, (Rex){0}, 0xd3, 0x04, d); }
- | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG(-1, (Rex){0}, 0xd3, 0x04, d); }
- | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xd3, 0x04, d); }
- | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xc1, 0x04, i, d); }
- | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0xc1, 0x04, i, d); }
- | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0xc1, 0x04, i, d); }
+ 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, 0x66, 0xd3, 0x04, d); }
+ | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=0}, -1, 0xd3, 0x04, d); }
+ | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM ({.w=1}, -1, 0xd3, 0x04, d); }
+ | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG ({.w=0}, 0x66, 0xd3, 0x04, d); }
+ | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG ({.w=0}, -1, 0xd3, 0x04, d); }
+ | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG ({.w=1}, -1, 0xd3, 0x04, d); }
+ | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xc1, 0x04, i, d); }
+ | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc1, 0x04, i, d); }
+ | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xc1, 0x04, i, d); }
+ | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0xc1, 0x04, i, d); }
+ | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0xc1, 0x04, i, d); }
+ | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0xc1, 0x04, i, d); }
)
shr = "shr" (
- 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(0x66, (Rex){0},0xd3, 0x05, d); }
- | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){0}, 0xd3, 0x05, d); }
- | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM(-1, (Rex){.w=1}, 0xd3, 0x05, d); }
- | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG(0x66, (Rex){0}, 0xd3, 0x05, d); }
- | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG(-1, (Rex){0}, 0xd3, 0x05, d); }
- | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG(-1, (Rex){.w=1}, 0xd3, 0x05, d); }
- | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xc1, 0x05, i, d); }
- | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xc1, 0x05, i, d); }
- | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xc1, 0x05, i, d); }
- | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0xc1, 0x05, i, d); }
- | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0xc1, 0x05, i, d); }
- | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0xc1, 0x05, i, d); }
+ 'w' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM({.w=0}, 0x66, 0xd3, 0x05, d); }
+ | 'l' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM({.w=0}, -1, 0xd3, 0x05, d); }
+ | 'q' ws c:cl ws? ',' ws? d:mem { $$ = OPMEM({.w=1}, -1, 0xd3, 0x05, d); }
+ | 'w'? ws c:cl ws? ',' ws? d:r16 { $$ = OPREG({.w=0}, 0x66, 0xd3, 0x05, d); }
+ | 'l'? ws c:cl ws? ',' ws? d:r32 { $$ = OPREG({.w=0}, -1, 0xd3, 0x05, d); }
+ | 'q'? ws c:cl ws? ',' ws? d:r64 { $$ = OPREG({.w=1}, -1, 0xd3, 0x05, d); }
+ | 'w' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xc1, 0x05, i, d); }
+ | 'l' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xc1, 0x05, i, d); }
+ | 'q' ws i:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xc1, 0x05, i, d); }
+ | 'w'? ws i:imm8 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0xc1, 0x05, i, d); }
+ | 'l'? ws i:imm8 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0xc1, 0x05, i, d); }
+ | 'q'? ws i:imm8 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0xc1, 0x05, i, d); }
)
test = "test" (
- 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG(-1, (Rex){0}, 0x84, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG(0x66, (Rex){0}, 0x85, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG(-1, (Rex){0}, 0x85, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG(-1, (Rex){.w=1}, 0x85, s, d); }
+ 'b'? ws s:r8 ws? ',' ws? d:r8 { $$ = REGREG({.w=0}, -1, 0x84, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:r16 { $$ = REGREG({.w=0}, 0x66, 0x85, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:r32 { $$ = REGREG({.w=0}, -1, 0x85, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:r64 { $$ = REGREG({.w=1}, -1, 0x85, s, d); }
- | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x84, s, d); }
- | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x85, s, d); }
- | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x85, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){.w=1}, 0x85, s, d); }
+ | 'b'? ws s:r8 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x84, s, d); }
+ | 'w'? ws s:r16 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, 0x66, 0x85, s, d); }
+ | 'l'? ws s:r32 ws? ',' ws? d:mem { $$ = REGMEM({.w=0}, -1, 0x85, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:mem { $$ = REGMEM({.w=1}, -1, 0x85, s, d); }
- | 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM(-1, (Rex){0}, 0xa8, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM(0x66, (Rex){0}, 0xa9, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM(-1, (Rex){0}, 0xa9, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM(-1, (Rex){.w=1}, 0xa9, s, d); }
+ | 'b'? ws s:imm8 ws? ',' ws? d:al { $$ = IMM({.w=0}, -1, 0xa8, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:ax { $$ = IMM({.w=0}, 0x66, 0xa9, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:eax { $$ = IMM({.w=0}, -1, 0xa9, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:rax { $$ = IMM({.w=1}, -1, 0xa9, s, d); }
- | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG(-1, (Rex){0}, 0xf6, 0x00, s, d); }
- | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG(0x66, (Rex){0}, 0xf7, 0x00, s, d); }
- | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG(-1, (Rex){0}, 0xf7, 0x00, s, d); }
- | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG(-1, (Rex){.w=1}, 0xf7, 0x00, s, d); }
+ | 'b'? ws s:imm8 ws? ',' ws? d:r8 { $$ = IMMREG({.w=0}, -1, 0xf6, 0x00, s, d); }
+ | 'w'? ws s:imm16 ws? ',' ws? d:r16 { $$ = IMMREG({.w=0}, 0x66, 0xf7, 0x00, s, d); }
+ | 'l'? ws s:imm32 ws? ',' ws? d:r32 { $$ = IMMREG({.w=0}, -1, 0xf7, 0x00, s, d); }
+ | 'q'? ws s:imm32 ws? ',' ws? d:r64 { $$ = IMMREG({.w=1}, -1, 0xf7, 0x00, s, d); }
- | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xf6, 0x00, s, d); }
- | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM(0x66, (Rex){0}, 0xf7, 0x00, s, d); }
- | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){0}, 0xf7, 0x00, s, d); }
- | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM(-1, (Rex){.w=1}, 0xf7, 0x00, s, d); }
+ | 'b' ws s:imm8 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xf6, 0x00, s, d); }
+ | 'w' ws s:imm16 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, 0x66, 0xf7, 0x00, s, d); }
+ | 'l' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=0}, -1, 0xf7, 0x00, s, d); }
+ | 'q' ws s:imm32 ws? ',' ws? d:mem { $$ = IMMMEM({.w=1}, -1, 0xf7, 0x00, s, d); }
)
# Floating point instructions.
addsd = "addsd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f58, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f58, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f58, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f58, s, d); }
)
addss = "addss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f58, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f58, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f58, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f58, s, d); }
)
subsd = "subsd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f5c, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f5c, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f5c, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f5c, s, d); }
)
subss = "subss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f5c, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f5c, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f5c, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f5c, s, d); }
)
cvtsi2sd = "cvtsi2sd" (
- ws s:r32 ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f2a, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f2a, s, d); }
- | ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){.w=1}, 0x01000f2a, s, d); }
- # XXX | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){.w=1}, 0x01000f2a, s, d); }
+ ws s:r32 ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f2a, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f2a, s, d); }
+ | ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2({.w=1}, 0xf2, 0x01000f2a, s, d); }
+
+ # XXX | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG({.w=1},0xf2, 0x01000f2a, s, d); }
)
cvtsi2ss = "cvtsi2ss" (
- ws s:r32 ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f2a, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f2a, s, d); }
- | ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){.w=1}, 0x01000f2a, s, d); }
- # XXX | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){.w=1}, 0x01000f2a, s, d); }
+ ws s:r32 ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f2a, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f2a, s, d); }
+ | ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2({.w=1}, 0xf3, 0x01000f2a, s, d); }
+
+ # XXX | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG({.w=1}, 0xf3, 0x01000f2a, s, d); }
)
cvtss2sd = "cvtss2sd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f5a, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f5a, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f5a, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f5a, s, d); }
)
cvtsd2ss = "cvtsd2ss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0x010066f3, (Rex){0}, 0x5a, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0x010066f3, (Rex){0}, 0x5a, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0x010066f3, 0x5a, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0x010066f3, 0x5a, s, d); }
)
cvttss2si = "cvttss2si" (
- 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f2c, s, d); }
- | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG2(0xf3, (Rex){.w=1}, 0x01000f2c, s, d); }
- | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f7e, s, d); }
- | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(0xf3, (Rex){.w=1}, 0x01000f2c, s, d); }
+ 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, 0xf3, 0x01000f2c, s, d); }
+ | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, 0xf3, 0x01000f2c, s, d); }
+ | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f7e, s, d); }
+ | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG ({.w=1}, 0xf3, 0x01000f2c, s, d); }
)
cvttsd2si = "cvttsd2si" (
- 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f2c, s, d); }
- | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG2(0xf2, (Rex){.w=1}, 0x01000f2c, s, d); }
- | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f7e, s, d); }
- | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG(0xf2, (Rex){.w=1}, 0x01000f2c, s, d); }
+ 'l'? ws s:xmm ws? ',' ws? d:r32 { $$ = REGREG2({.w=0}, 0xf2, 0x01000f2c, s, d); }
+ | 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG2({.w=1}, 0xf2, 0x01000f2c, s, d); }
+ | 'l' ws s:mem ws? ',' ws? d:r32 { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f7e, s, d); }
+ | 'q' ws s:mem ws? ',' ws? d:r64 { $$ = MEMREG ({.w=1} ,0xf2, 0x01000f2c, s, d); }
)
divsd = "divsd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f5e, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f5e, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f5e, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f5e, s, d); }
)
divss = "divss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f5e, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f5e, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f5e, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f5e, s, d); }
)
movaps = "movaps" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(-1, (Rex){0}, 0x01000f28, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(-1, (Rex){0}, 0x01000f28, s, d); }
- | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM(-1, (Rex){0}, 0x01000f29, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, -1, 0x01000f28, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, -1, 0x01000f28, s, d); }
+ | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM ({.w=0}, -1, 0x01000f29, s, d); }
)
mulsd = "mulsd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f59, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f59, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f59, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f59, s, d); }
)
mulss = "mulss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f59, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f59, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f59, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f59, s, d); }
)
movss = "movss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf3, (Rex){0}, 0x01000f10, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f10, s, d); }
- | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM(0xf3, (Rex){0}, 0x01000f11, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf3, 0x01000f10, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f10, s, d); }
+ | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM ({.w=0}, 0xf3, 0x01000f11, s, d); }
)
movsd = "movsd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0xf2, (Rex){0}, 0x01000f10, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf2, (Rex){0}, 0x01000f10, s, d); }
- | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM(0xf2, (Rex){0}, 0x01000f11, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0xf2, 0x01000f10, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf2, 0x01000f10, s, d); }
+ | ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM ({.w=0}, 0xf2, 0x01000f11, s, d); }
)
movq = "mov" (
- 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG(0x66, (Rex){.w=1}, 0x01000f7e, s, d); }
- | 'q'? ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2(0x66, (Rex){.w=1}, 0x01000f6e, s, d); }
- | 'q' ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM(0x66, (Rex){0}, 0x01000fd6, s, d); }
- | 'q' ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0xf3, (Rex){0}, 0x01000f7e, s, d); }
+ 'q'? ws s:xmm ws? ',' ws? d:r64 { $$ = REGREG ({.w=1}, 0x66, 0x01000f7e, s, d); }
+ | 'q'? ws s:r64 ws? ',' ws? d:xmm { $$ = REGREG2({.w=1}, 0x66, 0x01000f6e, s, d); }
+ | 'q' ws s:xmm ws? ',' ws? d:mem { $$ = REGMEM ({.w=0}, 0x66, 0x01000fd6, s, d); }
+ | 'q' ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0xf3, 0x01000f7e, s, d); }
)
ucomiss = "ucomiss" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(-1, (Rex){0}, 0x01000f2e, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(-1, (Rex){0}, 0x01000f2e, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, -1, 0x01000f2e, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, -1, 0x01000f2e, s, d); }
)
ucomisd = "ucomisd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0x66, (Rex){0}, 0x01000f2e, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0x66, (Rex){0}, 0x01000f2e, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0x66, 0x01000f2e, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0x66, 0x01000f2e, s, d); }
)
pxor = "pxor" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0x66, (Rex){0}, 0x01000fef, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0x66, (Rex){0}, 0x01000fef, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0x66, 0x01000fef, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0x66, 0x01000fef, s, d); }
)
xorpd = "xorpd" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(0x66, (Rex){0}, 0x01000f57, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(0x66, (Rex){0}, 0x01000f57, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, 0x66, 0x01000f57, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, 0x66, 0x01000f57, s, d); }
)
xorps = "xorps" (
- ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2(-1, (Rex){0}, 0x01000f57, s, d); }
- | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG(-1, (Rex){0}, 0x01000f57, s, d); }
+ ws s:xmm ws? ',' ws? d:xmm { $$ = REGREG2({.w=0}, -1, 0x01000f57, s, d); }
+ | ws s:mem ws? ',' ws? d:xmm { $$ = MEMREG ({.w=0}, -1, 0x01000f57, s, d); }
)
r64-or-rip = (
diff --git a/parse.c b/parse.c
index 33a8b66..67ac99e 100644
--- a/parse.c
+++ b/parse.c
@@ -104,116 +104,118 @@ static int needsmovabs(Imm *imm) {
} \
}
-#define OPREG(PREFIX, REX, OPCODE, REG, A1) \
+#define OPREG(REX, PREFIX, OPCODE, REG, A1) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_OPREG, .prefix = PREFIX, \
- .rex = REX, .fixedreg = REG, .opcode = OPCODE, .arg1 = internparsev(&A1) \
+ .rex = (Rex)REX, .fixedreg = REG, .opcode = OPCODE, \
+ .arg1 = internparsev(&A1) \
} \
}
-#define OPMEM(PREFIX, REX, OPCODE, REG, A1) \
+#define OPMEM(REX, PREFIX, OPCODE, REG, A1) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_OPMEM, .prefix = PREFIX, \
- .rex = REX, .fixedreg = REG, .opcode = OPCODE, .arg1 = internparsev(&A1) \
+ .rex = (Rex)REX, .fixedreg = REG, .opcode = OPCODE, \
+ .arg1 = internparsev(&A1) \
} \
}
-#define R(PREFIX, REX, OPCODE, A1) \
+#define R(REX, PREFIX, OPCODE, A1) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_R, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
} \
}
-#define IMM(PREFIX, REX, OPCODE, A1, A2) \
+#define IMM(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_IMM, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define RIMM(PREFIX, REX, OPCODE, A1, A2) \
+#define RIMM(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_RIMM, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define IMMREG(PREFIX, REX, OPCODE, IMMREG, A1, A2) \
+#define IMMREG(REX, PREFIX, OPCODE, IMMREG, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_IMMREG, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .fixedreg = IMMREG, \
+ .opcode = OPCODE, .rex = (Rex)REX, .fixedreg = IMMREG, \
.arg1 = internparsev(&A1), .arg2 = internparsev(&A2) \
} \
}
-#define IMMMEM(PREFIX, REX, OPCODE, IMMREG, A1, A2) \
+#define IMMMEM(REX, PREFIX, OPCODE, IMMREG, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_IMMMEM, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .fixedreg = IMMREG, \
+ .opcode = OPCODE, .rex = (Rex)REX, .fixedreg = IMMREG, \
.arg1 = internparsev(&A1), .arg2 = internparsev(&A2) \
} \
}
-#define REGMEM(PREFIX, REX, OPCODE, A1, A2) \
+#define REGMEM(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_REGMEM, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define MEMREG(PREFIX, REX, OPCODE, A1, A2) \
+#define MEMREG(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_MEMREG, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define REGREG(PREFIX, REX, OPCODE, A1, A2) \
+#define REGREG(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_REGREG, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define REGREG2(PREFIX, REX, OPCODE, A1, A2) \
+#define REGREG2(REX, PREFIX, OPCODE, A1, A2) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_REGREG2, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2) \
} \
}
-#define IMMREGREG2(PREFIX, REX, OPCODE, A1, A2, A3) \
+#define IMMREGREG2(REX, PREFIX, OPCODE, A1, A2, A3) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_IMMREGREG2, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2), .arg3 = internparsev(&A3) \
} \
}
-#define IMMMEMREG(PREFIX, REX, OPCODE, A1, A2, A3) \
+#define IMMMEMREG(REX, PREFIX, OPCODE, A1, A2, A3) \
(Parsev) { \
.instr = (Instr) { \
.kind = ASM_INSTR, .encoder = ENCODER_IMMMEMREG, .prefix = PREFIX, \
- .opcode = OPCODE, .rex = REX, .arg1 = internparsev(&A1), \
+ .opcode = OPCODE, .rex = (Rex)REX, .arg1 = internparsev(&A1), \
.arg2 = internparsev(&A2), .arg3 = internparsev(&A3) \
} \
}