1 | for X = [ADD, OR, ADC, SBB, AND, SUB, XOR, CMP, TEST] do
2 | let RRW = $((X=="CMP" or X=="TEST") and "r" or "rw")
3 | let FRW = $((X=="ADC" or X=="SBB") and "rw" or "w")
4 | let BYTE = $(X~="TEST" and "<byte>")
5 | for Y = [8, 16, 32, 64, DEF] do
6 $(X86(Y)) $(X){_M$(RSZ(Y))} [RAX], $(RNAME("RCX", Y)) {|RAX/r,RCX/r,FLAGS/$(FRW)}
7 $(X86(Y)) $(X){_$(RSZ(Y))$(RSZ(Y))} $(RNAME("RCX", Y)), $(RNAME("RDX", Y)) {|RCX/$(RRW),RDX/r,FLAGS/$(FRW)}
8 $(X86(Y)) $(X){_$(RSZ(Y))M} $(RNAME("RCX", Y)), [RAX] {|RCX/$(RRW),RAX/r,FLAGS/$(FRW)}
10 $(X){_BI} CL, 1 {|RCX/$(RRW),FLAGS/$(FRW)}
11 $(X){_M8I} <byte> [RAX], 1 {|RAX/r,FLAGS/$(FRW)}
12 | for Y = [16, 32, 64, DEF] do
13 $(X86(Y)) $(X){_$(RSZ(Y))I} $(RNAME("RCX",Y)), $(BYTE) 1 {|RCX/$(RRW),FLAGS/$(FRW)}
14 $(X86(Y)) $(X){_$(RSZ(Y))I} $(RNAME("RCX",Y)), 0x100 {|RCX/$(RRW),FLAGS/$(FRW)}
15 $(X86(Y)) $(X){_M$(MSZ(Y))I} <$(NASMSZ(Y))> [RAX], $(BYTE) 1 {|RAX/r,FLAGS/$(FRW)}
16 $(X86(Y)) $(X){_M$(MSZ(Y))I} <$(NASMSZ(Y))> [RAX], 0x100 {|RAX/r,FLAGS/$(FRW)}
19 | for X = [ADD, OR, ADC, SBB, AND, SUB, XOR, CMP] do
20 | let RRW = $((X=="CMP" or X=="TEST") and "r" or "rw")
21 | let FRW = $((X=="ADC" or X=="SBB") and "rw" or "w")
22 | for Y = [8, 16, 32, 64, DEF] do
23 $(X86(Y)) $(X){_$(RNAME("RAX",Y))_I} <$(RNAME("RAX", Y)),> $(RCONST(0x12345678, Y)) {|RAX/$(RRW),FLAGS/$(FRW)}
27 | for X = [INC, DEC, NOT, NEG, DIV, IDIV, MUL, IMUL] do
28 | for Y = [8, 16, 32, 64, DEF] do
29 | let RRW = $((X=="INC" or X=="DEC" or X=="NOT" or X=="NEG") and "rw" or "r")
30 | let FRW = $((X=="INC" or X=="DEC") and "rw" or "w")
31 | let AX = $((X=="DIV" or X=="IDIV" or X=="MUL" or X=="IMUL") and ",RAX/rw")
32 | let DIVDX = $((X=="DIV" or X=="IDIV") and Y~="8" and ",RDX/rw")
33 | let MULDX = $((X=="MUL" or X=="IMUL") and Y~="8" and (Y=="16" and ",RDX/rw" or ",RDX/w"))
34 $(X86(Y)) $(X){_$(RSZ(Y))} $(RNAME("RCX", Y)) {|RCX/$(RRW),FLAGS/$(FRW) $(AX) $(MULDX) $(DIVDX)}
35 $(X86(Y)) $(X){_M$(MSZ(Y))} <$(NASMSZ(Y))> [RCX] {|RCX/r,FLAGS/$(FRW) $(AX) $(MULDX) $(DIVDX)}
39 | for Y = [16, 32, 64, DEF] do
40 | let RRW = $(Y=="16" and "rw" or "w")
41 $(X86(Y)) IMUL{_$(RSZ(Y))$(RSZ(Y))} $(RNAME("RCX", Y)), $(RNAME("RDX", Y)) {|RCX/rw,RDX/r,FLAGS/w}
42 $(X86(Y)) IMUL{_$(RSZ(Y))M} $(RNAME("RCX", Y)), <$(NASMSZ(Y))> [RAX] {|RCX/rw,RAX/r,FLAGS/w}
43 $(X86(Y)) IMUL{_$(RSZ(Y))$(RSZ(Y))I} $(RNAME("RCX", Y)), $(RNAME("RDX", Y)), <byte> 1 {|RCX/$(RRW),RDX/r,FLAGS/w}
44 $(X86(Y)) IMUL{_$(RSZ(Y))$(RSZ(Y))I} $(RNAME("RCX", Y)), $(RNAME("RDX", Y)), 0x100 {|RCX/$(RRW),RDX/r,FLAGS/w}
45 $(X86(Y)) IMUL{_$(RSZ(Y))MI} $(RNAME("RCX", Y)), <$(NASMSZ(Y))> [RAX], <byte> 1 {|RCX/$(RRW),RAX/r,FLAGS/w}
46 $(X86(Y)) IMUL{_$(RSZ(Y))MI} $(RNAME("RCX", Y)), <$(NASMSZ(Y))> [RAX], 0x100 {|RCX/$(RRW),RAX/r,FLAGS/w}
49 LEA{_WM} ECX, [RAX] {|RCX/w,RAX/r}
50 LEA{_WWWII} ECX, {EAX, EBX, 2, 0x40} <[RAX+RBX*2+0x40]> {|RCX/w,RAX/r,RBX/r}
51 64: LEA{_DM} RCX, [RAX] {|RCX/w,RAX/r}
52 64: LEA{_DDDII} RCX, {RAX, RBX, 2, 0x40} <[RAX+RBX*2+0x40]> {|RCX/w,RAX/r,RBX/r}
53 LEA{_RM} RCX, [RAX] {|RCX/w,RAX/r}
54 LEA{_RRRII} RCX, {RAX, RBX, 2, 0x40} <[RAX+RBX*2+0x40]> {|RCX/w,RAX/r,RBX/r}
56 | for X = [ROL, ROR, SHL, SHR, SAR, RCL, RCR] do
57 | let FRW = $((X=="RCL" or X=="RCR") and "rw" or "w")
58 | for Y = [8, 16, 32, 64, DEF] do
59 $(X86(Y)) $(X){_$(RSZ(Y))I} $(RNAME("RCX",Y)), 1 {|RCX/rw,FLAGS/$(FRW)}
60 $(X86(Y)) $(X){_$(RSZ(Y))I} $(RNAME("RCX",Y)), 2 {|RCX/rw,FLAGS/$(FRW)}
61 $(X86(Y)) $(X){_M$(MSZ(Y))I} <$(NASMSZ(Y))> [RAX], 1 {|RAX/r,FLAGS/$(FRW)}
62 $(X86(Y)) $(X){_M$(MSZ(Y))I} <$(NASMSZ(Y))> [RAX], 2 {|RAX/r,FLAGS/$(FRW)}
63 $(X86(Y)) $(X){_$(RSZ(Y))_CL} $(RNAME("RAX",Y))<, CL> {|RAX/rw,RCX/r,FLAGS/$(FRW)}
64 $(X86(Y)) $(X){_M$(MSZ(Y))_CL} <$(NASMSZ(Y))> [RAX]<, CL> {|RAX/r,RCX/r,FLAGS/$(FRW)}
68 | for X = [SHLD, SHRD] do
69 | for Y = [16, 32, 64, DEF] do
70 $(X86(Y)) $(X){_$(RSZ(Y))$(RSZ(Y))I} $(RNAME("RDX",Y)), $(RNAME("RAX",Y)), 2 {|RDX/rw,RAX/r,FLAGS/w}
71 $(X86(Y)) $(X){_M$(RSZ(Y))I} [RDX], $(RNAME("RAX",Y)), 2 {|RDX/r,RAX/r,FLAGS/w}
72 $(X86(Y)) $(X){_$(RSZ(Y))$(RSZ(Y))_CL} $(RNAME("RDX",Y)), $(RNAME("RAX",Y))<, CL> {|RDX/rw,RAX/r,RCX/r,FLAGS/w}
73 $(X86(Y)) $(X){_M$(RSZ(Y))_CL} [RDX], $(RNAME("RAX",Y))<, CL> {|RDX/r,RAX/r,RCX/r,FLAGS/w}