Skip to content

Commit c7eb414

Browse files
committed
Add 'W' operation specializer to enforce REX.W without affecting operand sizes
1 parent 82c223e commit c7eb414

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

core/mnemonicList.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ callw:x E8 jw
9797
9898
cbtw/cbw:66)98
9999
cltd/cdq:99
100-
cltq/cdqe:X 48)98
100+
cltq/cdqe:W 98
101101
clac:0F01CA
102102
clc:F8
103103
cld:FC
@@ -130,7 +130,7 @@ F3)0FC2 ib v|l >Vx K {ksf
130130
131131
cmpxchg:0FB0 Rbwlq r
132132
cmpxchg8b:0FC7.1 mQ
133-
cmpxchg16b:48)0FC7.1 mX
133+
cmpxchg16b:W 0FC7.1 mX
134134
135135
comisd:66)0F2F v Vx > {sw
136136
comiss:0F2F v Vx > {s
@@ -164,7 +164,7 @@ cvttps2pi:0F2C vX VQ
164164
cvttsd2si:F2)0F2C v#x Rlq > {s
165165
cvttss2si:F3)0F2C v#x Rlq > {s
166166
167-
cqto/cqo:X 48)99
167+
cqto/cqo:W 99
168168
cwtd/cwd:66)99
169169
cwtl/cwde:98
170170
@@ -311,9 +311,9 @@ D9.1 F
311311
D9C9
312312
313313
fxrstor:0FAE.1 m
314-
fxrstor64:X 0FAE.1 m#q
314+
fxrstor64:W 0FAE.1 m
315315
fxsave:0FAE.0 m
316-
fxsave64:X 0FAE.0 m#q
316+
fxsave64:W 0FAE.0 m
317317
fxtract:D9F4
318318
fyl2x:D9F1
319319
fyl2xp1:D9F9
@@ -798,7 +798,7 @@ pextrw
798798
0FC5 ib ^Vqx R! > {
799799
66)0F3A15 ib Vx mW > {
800800
801-
pextrq:66)0F3A16 ib Vx r#q > {
801+
pextrq:W 66)0F3A16 ib Vx rQ > {
802802
803803
phaddw:0F3801 v >V Vqxy
804804
phaddd:0F3802 v >V Vqxy
@@ -812,7 +812,7 @@ phsubw:0F3805 v >V Vqxy
812812
813813
pinsrb:66)0F3A20 ib rL >Vx Vx {
814814
pinsrd:66)0F3A22 ib rL >Vx Vx {
815-
pinsrq:66)0F3A22 ib r#q >Vx Vx {
815+
pinsrq:W 66)0F3A22 ib rQ >Vx Vx {
816816
pinsrw:0FC4 ib *rL >V Vqx {
817817
818818
pmaddubsw:0F3804 v >V Vqxyz {kz
@@ -1584,17 +1584,17 @@ xorpd:66)0F57 v >V Vxyz {kzBw
15841584
xorps:0F57 v >V Vxyz {kzb
15851585
15861586
xrstor:0FAE.5 m
1587-
xrstor64:X 0FAE.5 m#q
1587+
xrstor64:W 0FAE.5 m
15881588
xrstors:0FC7.3 m
1589-
xrstors64:X 0FC7.3 m#q
1589+
xrstors64:W 0FC7.3 m
15901590
xsave:0FAE.4 m
1591-
xsave64:X 0FAE.4 m#q
1591+
xsave64:W 0FAE.4 m
15921592
xsavec:0FC7.4 m
1593-
xsavec64:X 0FC7.4 m#q
1593+
xsavec64:W 0FC7.4 m
15941594
xsaveopt:0FAE.6 m
1595-
xsaveopt64:0FAE.6 m#q
1595+
xsaveopt64:W 0FAE.6 m
15961596
xsaves:0FC7.5 m
1597-
xsaves64:X 0FC7.5 m#q
1597+
xsaves64:W 0FC7.5 m
15981598
xsetbv:0F01D1
15991599
xtest:0F01D6
16001600
`;

core/operations.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,14 +287,16 @@ export class Operation
287287
this.vexOnly = false;
288288
this.requireMask = false;
289289
this.requireBitness = null;
290+
this.forceRexW = false;
290291

291292
// Interpreting the opcode
292293
this.forceVex = format[0][0] == 'V';
293294
this.vexOnly = format[0][0] == 'v';
294-
if("vVwl!xX".includes(format[0][0]))
295+
if("vVwWl!xX".includes(format[0][0]))
295296
{
296297
let specializers = format.shift();
297298
if(specializers.includes('w')) this.vexBase |= 0x8000;
299+
if(specializers.includes('W')) this.forceRexW = true, this.requireBitness = 64;
298300
if(specializers.includes('l')) this.vexBase |= 0x400;
299301
if(specializers.includes('!'))
300302
this.actuallyNotVex = true; // For non-VEX instructions starting with V
@@ -450,7 +452,7 @@ export class Operation
450452
if(!this.validateVEX(vexInfo))
451453
return null;
452454

453-
let adjustByteOp = false, overallSize = 0, rexw = false;
455+
let adjustByteOp = false, overallSize = 0, rexw = this.forceRexW;
454456

455457
if(this.relativeSizes)
456458
{

0 commit comments

Comments
 (0)