33
33
# - (F2): the last prefix is 0xF2
34
34
# - (!F3) : the last prefix is not 0xF3 (including non-last prefix case)
35
35
# - (66&F2): Both 0x66 and 0xF2 prefixes are specified.
36
+ #
37
+ # REX2 Prefix
38
+ # - (!REX2): REX2 is not allowed
39
+ # - (REX2): REX2 variant e.g. JMPABS
36
40
37
41
Table: one byte opcode
38
42
Referrer:
@@ -157,22 +161,22 @@ AVXcode:
157
161
6e: OUTS/OUTSB DX,Xb
158
162
6f: OUTS/OUTSW/OUTSD DX,Xz
159
163
# 0x70 - 0x7f
160
- 70: JO Jb
161
- 71: JNO Jb
162
- 72: JB/JNAE/JC Jb
163
- 73: JNB/JAE/JNC Jb
164
- 74: JZ/JE Jb
165
- 75: JNZ/JNE Jb
166
- 76: JBE/JNA Jb
167
- 77: JNBE/JA Jb
168
- 78: JS Jb
169
- 79: JNS Jb
170
- 7a: JP/JPE Jb
171
- 7b: JNP/JPO Jb
172
- 7c: JL/JNGE Jb
173
- 7d: JNL/JGE Jb
174
- 7e: JLE/JNG Jb
175
- 7f: JNLE/JG Jb
164
+ 70: JO Jb (!REX2)
165
+ 71: JNO Jb (!REX2)
166
+ 72: JB/JNAE/JC Jb (!REX2)
167
+ 73: JNB/JAE/JNC Jb (!REX2)
168
+ 74: JZ/JE Jb (!REX2)
169
+ 75: JNZ/JNE Jb (!REX2)
170
+ 76: JBE/JNA Jb (!REX2)
171
+ 77: JNBE/JA Jb (!REX2)
172
+ 78: JS Jb (!REX2)
173
+ 79: JNS Jb (!REX2)
174
+ 7a: JP/JPE Jb (!REX2)
175
+ 7b: JNP/JPO Jb (!REX2)
176
+ 7c: JL/JNGE Jb (!REX2)
177
+ 7d: JNL/JGE Jb (!REX2)
178
+ 7e: JLE/JNG Jb (!REX2)
179
+ 7f: JNLE/JG Jb (!REX2)
176
180
# 0x80 - 0x8f
177
181
80: Grp1 Eb,Ib (1A)
178
182
81: Grp1 Ev,Iz (1A)
@@ -208,24 +212,24 @@ AVXcode:
208
212
9e: SAHF
209
213
9f: LAHF
210
214
# 0xa0 - 0xaf
211
- a0: MOV AL,Ob
212
- a1: MOV rAX,Ov
213
- a2: MOV Ob,AL
214
- a3: MOV Ov,rAX
215
- a4: MOVS/B Yb,Xb
216
- a5: MOVS/W/D/Q Yv,Xv
217
- a6: CMPS/B Xb,Yb
218
- a7: CMPS/W/D Xv,Yv
219
- a8: TEST AL,Ib
220
- a9: TEST rAX,Iz
221
- aa: STOS/B Yb,AL
222
- ab: STOS/W/D/Q Yv,rAX
223
- ac: LODS/B AL,Xb
224
- ad: LODS/W/D/Q rAX,Xv
225
- ae: SCAS/B AL,Yb
215
+ a0: MOV AL,Ob (!REX2)
216
+ a1: MOV rAX,Ov (!REX2) | JMPABS O (REX2),(o64)
217
+ a2: MOV Ob,AL (!REX2)
218
+ a3: MOV Ov,rAX (!REX2)
219
+ a4: MOVS/B Yb,Xb (!REX2)
220
+ a5: MOVS/W/D/Q Yv,Xv (!REX2)
221
+ a6: CMPS/B Xb,Yb (!REX2)
222
+ a7: CMPS/W/D Xv,Yv (!REX2)
223
+ a8: TEST AL,Ib (!REX2)
224
+ a9: TEST rAX,Iz (!REX2)
225
+ aa: STOS/B Yb,AL (!REX2)
226
+ ab: STOS/W/D/Q Yv,rAX (!REX2)
227
+ ac: LODS/B AL,Xb (!REX2)
228
+ ad: LODS/W/D/Q rAX,Xv (!REX2)
229
+ ae: SCAS/B AL,Yb (!REX2)
226
230
# Note: The May 2011 Intel manual shows Xv for the second parameter of the
227
231
# next instruction but Yv is correct
228
- af: SCAS/W/D/Q rAX,Yv
232
+ af: SCAS/W/D/Q rAX,Yv (!REX2)
229
233
# 0xb0 - 0xbf
230
234
b0: MOV AL/R8L,Ib
231
235
b1: MOV CL/R9L,Ib
@@ -266,7 +270,7 @@ d1: Grp2 Ev,1 (1A)
266
270
d2: Grp2 Eb,CL (1A)
267
271
d3: Grp2 Ev,CL (1A)
268
272
d4: AAM Ib (i64)
269
- d5: AAD Ib (i64)
273
+ d5: AAD Ib (i64) | REX2 (Prefix),(o64)
270
274
d6:
271
275
d7: XLAT/XLATB
272
276
d8: ESC
@@ -281,26 +285,26 @@ df: ESC
281
285
# Note: "forced64" is Intel CPU behavior: they ignore 0x66 prefix
282
286
# in 64-bit mode. AMD CPUs accept 0x66 prefix, it causes RIP truncation
283
287
# to 16 bits. In 32-bit mode, 0x66 is accepted by both Intel and AMD.
284
- e0: LOOPNE/LOOPNZ Jb (f64)
285
- e1: LOOPE/LOOPZ Jb (f64)
286
- e2: LOOP Jb (f64)
287
- e3: JrCXZ Jb (f64)
288
- e4: IN AL,Ib
289
- e5: IN eAX,Ib
290
- e6: OUT Ib,AL
291
- e7: OUT Ib,eAX
288
+ e0: LOOPNE/LOOPNZ Jb (f64) (!REX2)
289
+ e1: LOOPE/LOOPZ Jb (f64) (!REX2)
290
+ e2: LOOP Jb (f64) (!REX2)
291
+ e3: JrCXZ Jb (f64) (!REX2)
292
+ e4: IN AL,Ib (!REX2)
293
+ e5: IN eAX,Ib (!REX2)
294
+ e6: OUT Ib,AL (!REX2)
295
+ e7: OUT Ib,eAX (!REX2)
292
296
# With 0x66 prefix in 64-bit mode, for AMD CPUs immediate offset
293
297
# in "near" jumps and calls is 16-bit. For CALL,
294
298
# push of return address is 16-bit wide, RSP is decremented by 2
295
299
# but is not truncated to 16 bits, unlike RIP.
296
- e8: CALL Jz (f64)
297
- e9: JMP-near Jz (f64)
298
- ea: JMP-far Ap (i64)
299
- eb: JMP-short Jb (f64)
300
- ec: IN AL,DX
301
- ed: IN eAX,DX
302
- ee: OUT DX,AL
303
- ef: OUT DX,eAX
300
+ e8: CALL Jz (f64) (!REX2)
301
+ e9: JMP-near Jz (f64) (!REX2)
302
+ ea: JMP-far Ap (i64) (!REX2)
303
+ eb: JMP-short Jb (f64) (!REX2)
304
+ ec: IN AL,DX (!REX2)
305
+ ed: IN eAX,DX (!REX2)
306
+ ee: OUT DX,AL (!REX2)
307
+ ef: OUT DX,eAX (!REX2)
304
308
# 0xf0 - 0xff
305
309
f0: LOCK (Prefix)
306
310
f1:
@@ -386,14 +390,14 @@ AVXcode: 1
386
390
2e: vucomiss Vss,Wss (v1) | vucomisd Vsd,Wsd (66),(v1)
387
391
2f: vcomiss Vss,Wss (v1) | vcomisd Vsd,Wsd (66),(v1)
388
392
# 0x0f 0x30-0x3f
389
- 30: WRMSR
390
- 31: RDTSC
391
- 32: RDMSR
392
- 33: RDPMC
393
- 34: SYSENTER
394
- 35: SYSEXIT
393
+ 30: WRMSR (!REX2)
394
+ 31: RDTSC (!REX2)
395
+ 32: RDMSR (!REX2)
396
+ 33: RDPMC (!REX2)
397
+ 34: SYSENTER (!REX2)
398
+ 35: SYSEXIT (!REX2)
395
399
36:
396
- 37: GETSEC
400
+ 37: GETSEC (!REX2)
397
401
38: escape # 3-byte escape 1
398
402
39:
399
403
3a: escape # 3-byte escape 2
@@ -473,22 +477,22 @@ AVXcode: 1
473
477
7f: movq Qq,Pq | vmovdqa Wx,Vx (66) | vmovdqa32/64 Wx,Vx (66),(evo) | vmovdqu Wx,Vx (F3) | vmovdqu32/64 Wx,Vx (F3),(evo) | vmovdqu8/16 Wx,Vx (F2),(ev)
474
478
# 0x0f 0x80-0x8f
475
479
# Note: "forced64" is Intel CPU behavior (see comment about CALL insn).
476
- 80: JO Jz (f64)
477
- 81: JNO Jz (f64)
478
- 82: JB/JC/JNAE Jz (f64)
479
- 83: JAE/JNB/JNC Jz (f64)
480
- 84: JE/JZ Jz (f64)
481
- 85: JNE/JNZ Jz (f64)
482
- 86: JBE/JNA Jz (f64)
483
- 87: JA/JNBE Jz (f64)
484
- 88: JS Jz (f64)
485
- 89: JNS Jz (f64)
486
- 8a: JP/JPE Jz (f64)
487
- 8b: JNP/JPO Jz (f64)
488
- 8c: JL/JNGE Jz (f64)
489
- 8d: JNL/JGE Jz (f64)
490
- 8e: JLE/JNG Jz (f64)
491
- 8f: JNLE/JG Jz (f64)
480
+ 80: JO Jz (f64) (!REX2)
481
+ 81: JNO Jz (f64) (!REX2)
482
+ 82: JB/JC/JNAE Jz (f64) (!REX2)
483
+ 83: JAE/JNB/JNC Jz (f64) (!REX2)
484
+ 84: JE/JZ Jz (f64) (!REX2)
485
+ 85: JNE/JNZ Jz (f64) (!REX2)
486
+ 86: JBE/JNA Jz (f64) (!REX2)
487
+ 87: JA/JNBE Jz (f64) (!REX2)
488
+ 88: JS Jz (f64) (!REX2)
489
+ 89: JNS Jz (f64) (!REX2)
490
+ 8a: JP/JPE Jz (f64) (!REX2)
491
+ 8b: JNP/JPO Jz (f64) (!REX2)
492
+ 8c: JL/JNGE Jz (f64) (!REX2)
493
+ 8d: JNL/JGE Jz (f64) (!REX2)
494
+ 8e: JLE/JNG Jz (f64) (!REX2)
495
+ 8f: JNLE/JG Jz (f64) (!REX2)
492
496
# 0x0f 0x90-0x9f
493
497
90: SETO Eb | kmovw/q Vk,Wk | kmovb/d Vk,Wk (66)
494
498
91: SETNO Eb | kmovw/q Mv,Vk | kmovb/d Mv,Vk (66)
0 commit comments