x86 assembler:

* Optimized the opcode representation of movq and remaining 3DNow instructions
* Disallow immediates not fitting in 32 bits (Mantis #14685) + test
* Disallow push/pop with 32-bit operands in x86_64 + test

git-svn-id: trunk@17490 -
This commit is contained in:
sergei 2011-05-17 20:06:12 +00:00
parent 6ea8eb7dc2
commit 9e8a31193b
9 changed files with 438 additions and 305 deletions

2
.gitattributes vendored
View File

@ -9569,6 +9569,8 @@ tests/test/tasm1.pp svneol=native#text/plain
tests/test/tasm2.pp svneol=native#text/plain tests/test/tasm2.pp svneol=native#text/plain
tests/test/tasm3.pp svneol=native#text/plain tests/test/tasm3.pp svneol=native#text/plain
tests/test/tasm4.pp svneol=native#text/plain tests/test/tasm4.pp svneol=native#text/plain
tests/test/tasm5.pp svneol=native#text/plain
tests/test/tasm6.pp svneol=native#text/plain
tests/test/tasmread.pp svneol=native#text/plain tests/test/tasmread.pp svneol=native#text/plain
tests/test/tasout.pp svneol=native#text/plain tests/test/tasout.pp svneol=native#text/plain
tests/test/tassignmentoperator1.pp svneol=native#text/pascal tests/test/tassignmentoperator1.pp svneol=native#text/pascal

View File

@ -1,2 +1,2 @@
{ don't edit, this file is generated from x86ins.dat } { don't edit, this file is generated from x86ins.dat }
1215; 1210;

View File

@ -87,16 +87,16 @@
( (
opcode : A_ADC; opcode : A_ADC;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#21#33; code : #213#1#21#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADC; opcode : A_ADC;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#130#33; code : #213#1#129#130#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADC; opcode : A_ADC;
@ -164,16 +164,16 @@
( (
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#5#33; code : #208#1#5#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#128#33; code : #213#1#129#128#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADD; opcode : A_ADD;
@ -241,16 +241,16 @@
( (
opcode : A_AND; opcode : A_AND;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#37#33; code : #213#1#37#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_AND; opcode : A_AND;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#132#33; code : #213#1#129#132#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_AND; opcode : A_AND;
@ -542,16 +542,16 @@
( (
opcode : A_CMP; opcode : A_CMP;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#61#33; code : #213#1#61#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_CMP; opcode : A_CMP;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#135#33; code : #213#1#129#135#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_CMP; opcode : A_CMP;
@ -2320,8 +2320,8 @@
( (
opcode : A_IMUL; opcode : A_IMUL;
ops : 2; ops : 2;
optypes : (ot_reg32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg32,ot_immediate,ot_none);
code : #208#1#105#64#33; code : #213#1#105#64#33;
flags : if_286 or if_sd flags : if_286 or if_sd
), ),
( (
@ -2957,9 +2957,9 @@
( (
opcode : A_MOV; opcode : A_MOV;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#199#128#33; code : #213#1#199#128#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_MOV; opcode : A_MOV;
@ -3167,59 +3167,31 @@
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#111#72; code : #2#15#111#72;
flags : if_pent or if_mmx or if_sm flags : if_pent or if_mmx or if_sm
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxrm,ot_mmxreg,ot_none);
code : #2#15#111#72;
flags : if_pent or if_mmx
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_memory,ot_mmxreg,ot_none);
code : #2#15#127#65; code : #2#15#127#65;
flags : if_pent or if_mmx or if_sm flags : if_pent or if_mmx or if_sm
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_xmmreg,ot_xmmrm,ot_none);
code : #2#15#127#65;
flags : if_pent or if_mmx
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_xmmreg,ot_xmmreg,ot_none);
code : #219#2#15#126#72; code : #219#2#15#126#72;
flags : if_willamette or if_sse2 flags : if_willamette or if_sse2
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_xmmreg,ot_xmmreg,ot_none); optypes : (ot_xmmrm,ot_xmmreg,ot_none);
code : #241#2#15#214#72; code : #241#2#15#214#72;
flags : if_willamette or if_sse2 flags : if_willamette or if_sse2
), ),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_memory,ot_xmmreg,ot_none);
code : #241#2#15#214#65;
flags : if_willamette or if_sse2
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_xmmreg,ot_memory,ot_none);
code : #219#2#15#126#72;
flags : if_willamette or if_sse2
),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
@ -3412,16 +3384,16 @@
( (
opcode : A_OR; opcode : A_OR;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#13#33; code : #213#1#13#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_OR; opcode : A_OR;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#129#33; code : #213#1#129#129#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_OR; opcode : A_OR;
@ -4021,17 +3993,31 @@
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #208#8#88#221; code : #212#8#88;
flags : if_8086 flags : if_8086
), ),
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg32,ot_none,ot_none);
code : #192#208#1#143#128#221; code : #213#8#88;
flags : if_386 or if_nox86_64
),
(
opcode : A_POP;
ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #212#1#143#128;
flags : if_8086 flags : if_8086
), ),
(
opcode : A_POP;
ops : 1;
optypes : (ot_regmem or ot_bits32,ot_none,ot_none);
code : #213#1#143#128;
flags : if_386 or if_nox86_64
),
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
@ -4553,17 +4539,31 @@
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #208#8#80#221; code : #212#8#80;
flags : if_8086 flags : if_8086
), ),
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg32,ot_none,ot_none);
code : #192#208#1#255#134#221; code : #213#8#80;
flags : if_386 or if_nox86_64
),
(
opcode : A_PUSH;
ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #212#1#255#134;
flags : if_8086 flags : if_8086
), ),
(
opcode : A_PUSH;
ops : 1;
optypes : (ot_regmem or ot_bits32,ot_none,ot_none);
code : #213#1#255#134;
flags : if_386 or if_nox86_64
),
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
@ -5085,16 +5085,16 @@
( (
opcode : A_SBB; opcode : A_SBB;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#29#33; code : #213#1#29#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SBB; opcode : A_SBB;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#131#33; code : #208#1#129#131#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SBB; opcode : A_SBB;
@ -5449,16 +5449,16 @@
( (
opcode : A_SUB; opcode : A_SUB;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#45#33; code : #213#1#45#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SUB; opcode : A_SUB;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#133#33; code : #208#1#129#133#33;
flags : if_8086 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SUB; opcode : A_SUB;
@ -5890,16 +5890,16 @@
( (
opcode : A_XOR; opcode : A_XOR;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#53#33; code : #213#1#53#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_XOR; opcode : A_XOR;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#134#33; code : #208#1#129#134#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_XOR; opcode : A_XOR;
@ -6793,70 +6793,35 @@
( (
opcode : A_PFNACC; opcode : A_PFNACC;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#138; code : #2#15#15#72#1#138;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
(
opcode : A_PFNACC;
ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
code : #2#15#15#72#1#138;
flags : if_pent or if_3dnow
),
(
opcode : A_PFPNACC;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#142;
flags : if_pent or if_3dnow or if_sm
),
( (
opcode : A_PFPNACC; opcode : A_PFPNACC;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#142; code : #2#15#15#72#1#142;
flags : if_pent or if_3dnow
),
(
opcode : A_PI2FW;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#12;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PI2FW; opcode : A_PI2FW;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#12; code : #2#15#15#72#1#12;
flags : if_pent or if_3dnow
),
(
opcode : A_PF2IW;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#28;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PF2IW; opcode : A_PF2IW;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#28; code : #2#15#15#72#1#28;
flags : if_pent or if_3dnow
),
(
opcode : A_PSWAPD;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#187;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PSWAPD; opcode : A_PSWAPD;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#187; code : #2#15#15#72#1#187;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),

View File

@ -1769,7 +1769,8 @@ implementation
end; end;
32,33,34, 32,33,34,
52,53,54, 52,53,54,
56,57,58 : 56,57,58,
172,173,174 :
inc(len,4); inc(len,4);
192,193,194 : 192,193,194 :
if NeedAddrPrefix(c-192) then if NeedAddrPrefix(c-192) then
@ -1819,7 +1820,7 @@ implementation
omit_rexw:=true omit_rexw:=true
{$endif x86_64} {$endif x86_64}
; ;
64..191 : 64..151 :
begin begin
{$ifdef x86_64} {$ifdef x86_64}
if (c<127) then if (c<127) then
@ -1892,6 +1893,7 @@ implementation
* field the register value of operand b. * field the register value of operand b.
* \2ab - a ModRM, calculated on EA in operand a, with the spare * \2ab - a ModRM, calculated on EA in operand a, with the spare
* field equal to digit b. * field equal to digit b.
* \254,\255,\256 - a signed 32-bit immediate to be extended to 64 bits
* \300,\301,\302 - might be an 0x67, depending on the address size of * \300,\301,\302 - might be an 0x67, depending on the address size of
* the memory reference in operand x. * the memory reference in operand x.
* \310 - indicates fixed 16-bit address size, i.e. optional 0x67. * \310 - indicates fixed 16-bit address size, i.e. optional 0x67.
@ -2194,6 +2196,17 @@ implementation
else else
objdata_writereloc(currval-insend,4,nil,currabsreloc32) objdata_writereloc(currval-insend,4,nil,currabsreloc32)
end; end;
172,173,174 : // 0254..0256 - dword implicitly sign-extended to 64-bit (x86_64 only)
begin
getvalsym(c-172);
if (currval<low(longint)) or (currval>high(longint)) then
Message2(asmw_e_value_exceeds_bounds,'signed dword',tostr(currval));
if assigned(currsym) then
objdata_writereloc(currval,4,currsym,currabsreloc32)
else
objdata.writebytes(currval,4);
end;
192,193,194 : 192,193,194 :
begin begin
if NeedAddrPrefix(c-192) then if NeedAddrPrefix(c-192) then
@ -2279,9 +2292,9 @@ implementation
if (rex<>0) and not(rexwritten) then if (rex<>0) and not(rexwritten) then
internalerror(200603191); internalerror(200603191);
{$endif x86_64} {$endif x86_64}
if (c>=64) and (c<=191) then if (c>=64) and (c<=151) then // 0100..0227
begin begin
if (c<127) then if (c<127) then // 0177
begin begin
if (oper[c and 7]^.typ=top_reg) then if (oper[c and 7]^.typ=top_reg) then
rfield:=regval(oper[c and 7]^.reg) rfield:=regval(oper[c and 7]^.reg)
@ -2353,7 +2366,7 @@ implementation
Dec(currval, 1); Dec(currval, 1);
24,25,26: 24,25,26:
Dec(currval, 2); Dec(currval, 2);
32,33,34: 32,33,34,172,173,174:
Dec(currval, 4); Dec(currval, 4);
end; end;
end end

View File

@ -39,8 +39,10 @@ reg16|32|64,regmem \320\1\x13\110 8086,SM
rm8,reg8 \1\x10\101 8086 rm8,reg8 \1\x10\101 8086
reg8,rm8 \1\x12\110 8086 reg8,rm8 \1\x12\110 8086
rm16|32|64,imm8 \320\1\x83\202\15 8086 rm16|32|64,imm8 \320\1\x83\202\15 8086
reg_eax|64,imm \320\1\x15\41 386,SD reg_eax,imm \325\1\x15\41 386,SM
rm32|64,imm \320\1\x81\202\41 386,SD reg_rax,imm \326\1\x15\255 X86_64,SM
rm32,imm \325\1\x81\202\41 386,SM
rm64,imm \326\1\x81\202\255 X86_64,SM
reg_ax,imm \324\1\x15\31 8086,SW reg_ax,imm \324\1\x15\31 8086,SW
rm16,imm \324\1\x81\202\31 8086,SW rm16,imm \324\1\x81\202\31 8086,SW
reg_al,imm \1\x14\21 8086,SB reg_al,imm \1\x14\21 8086,SB
@ -53,8 +55,10 @@ reg16|32|64,regmem \320\1\x03\110 8086,SM
rm8,reg8 \1\x00\101 8086 rm8,reg8 \1\x00\101 8086
reg8,rm8 \1\x02\110 8086,SM reg8,rm8 \1\x02\110 8086,SM
rm16|32|64,imm8 \320\1\x83\200\15 8086 rm16|32|64,imm8 \320\1\x83\200\15 8086
reg_eax|64,imm \320\1\x05\41 386,SD reg_eax,imm \320\1\x05\41 386,SM
rm32|64,imm \320\1\x81\200\41 386,SD reg_rax,imm \326\1\x05\255 X86_64,SM
rm32,imm \325\1\x81\200\41 386,SM
rm64,imm \326\1\x81\200\255 X86_64,SM
reg_ax,imm \324\1\x05\31 8086,SW reg_ax,imm \324\1\x05\31 8086,SW
rm16,imm \324\1\x81\200\31 8086,SW rm16,imm \324\1\x81\200\31 8086,SW
reg_al,imm \1\x04\21 8086,SB reg_al,imm \1\x04\21 8086,SB
@ -67,8 +71,10 @@ reg16|32|64,regmem \320\1\x23\110 8086,SM
rm8,reg8 \1\x20\101 8086 rm8,reg8 \1\x20\101 8086
reg8,rm8 \1\x22\110 8086 reg8,rm8 \1\x22\110 8086
rm16|32|64,imm8 \320\1\x83\204\15 8086 rm16|32|64,imm8 \320\1\x83\204\15 8086
reg_eax|64,imm \320\1\x25\41 386,SD reg_eax,imm \325\1\x25\41 386,SM
rm32|64,imm \320\1\x81\204\41 386,SD reg_rax,imm \326\1\x25\255 X86_64,SM
rm32,imm \325\1\x81\204\41 386,SM
rm64,imm \326\1\x81\204\255 X86_64,SM
reg_ax,imm \324\1\x25\31 8086,SW reg_ax,imm \324\1\x25\31 8086,SW
rm16,imm \324\1\x81\204\31 8086,SW rm16,imm \324\1\x81\204\31 8086,SW
reg_al,imm \1\x24\21 8086,SB reg_al,imm \1\x24\21 8086,SB
@ -165,8 +171,10 @@ reg16|32|64,regmem \320\1\x3B\110 8086,SM
rm8,reg8 \1\x38\101 8086 rm8,reg8 \1\x38\101 8086
reg8,rm8 \1\x3A\110 8086 reg8,rm8 \1\x3A\110 8086
rm16|32|64,imm8 \320\1\x83\207\15 8086 rm16|32|64,imm8 \320\1\x83\207\15 8086
reg_eax|64,imm \320\1\x3D\41 386,SD reg_eax,imm \325\1\x3D\41 386,SM
rm32|64,imm \320\1\x81\207\41 386,SD reg_rax,imm \326\1\x3D\255 X86_64,SM
rm32,imm \325\1\x81\207\41 386,SM
rm64,imm \326\1\x81\207\255 X86_64,SM
reg_ax,imm \324\1\x3D\31 8086,SW reg_ax,imm \324\1\x3D\31 8086,SW
rm16,imm \324\1\x81\207\31 8086,SW rm16,imm \324\1\x81\207\31 8086,SW
reg_al,imm \1\x3C\21 8086,SB reg_al,imm \1\x3C\21 8086,SB
@ -776,7 +784,8 @@ rm16|32|64 \320\1\xF7\205 8086
reg32|64,regmem,imm8 \320\1\x6B\110\16 286,SM reg32|64,regmem,imm8 \320\1\x6B\110\16 286,SM
reg32|64,regmem,imm \320\1\x69\110\42 286,SM,SD,AR2 reg32|64,regmem,imm \320\1\x69\110\42 286,SM,SD,AR2
reg32|64,imm8 \320\1\x6B\100\15 286 reg32|64,imm8 \320\1\x6B\100\15 286
reg32|64,imm \320\1\x69\100\41 286,SD reg32,imm \325\1\x69\100\41 286,SD
reg64,imm \326\1\x69\100\255 X86_64
reg16,regmem,imm8 \324\1\x6B\110\16 286,SM reg16,regmem,imm8 \324\1\x6B\110\16 286,SM
reg16,regmem,imm \324\1\x69\110\32 286,SM,SW,AR2 reg16,regmem,imm \324\1\x69\110\32 286,SM,SW,AR2
reg16,imm8 \324\1\x6B\100\15 286 reg16,imm8 \324\1\x6B\100\15 286
@ -1020,7 +1029,8 @@ reg_ax,mem_offs \324\1\xA1\35 8086,SM,NOX86_64
reg_eax,mem_offs \325\1\xA1\35 386,SM,NOX86_64 reg_eax,mem_offs \325\1\xA1\35 386,SM,NOX86_64
reg16|32|64,regmem \320\1\x8B\110 8086,SM reg16|32|64,regmem \320\1\x8B\110 8086,SM
reg32|64,imm \320\10\xB8\35 386,SD reg32|64,imm \320\10\xB8\35 386,SD
rm32|64,imm \320\1\xC7\200\41 386,SD rm32,imm \325\1\xC7\200\41 386,SM
rm64,imm \326\1\xC7\200\255 X86_64,SM
reg16,imm \324\10\xB8\31 8086,SW reg16,imm \324\10\xB8\31 8086,SW
rm16,imm \324\1\xC7\200\31 8086,SW rm16,imm \324\1\xC7\200\31 8086,SW
mem_offs,reg_al \1\xA2\34 8086,SM,NOX86_64 mem_offs,reg_al \1\xA2\34 8086,SM,NOX86_64
@ -1064,14 +1074,10 @@ xmmreg,mem \361\325\2\x0F\x6E\110 WILLAMETTE,SSE2
[MOVQ,movq] [MOVQ,movq]
(Ch_Rop1, Ch_Wop2, Ch_None) (Ch_Rop1, Ch_Wop2, Ch_None)
mmxreg,mem \2\x0F\x6F\110 PENT,MMX,SM mmxreg,mmxrm \2\x0F\x6F\110 PENT,MMX,SM
mmxreg,mmxreg \2\x0F\x6F\110 PENT,MMX mmxrm,mmxreg \2\x0F\x7F\101 PENT,MMX,SM
mem,mmxreg \2\x0F\x7F\101 PENT,MMX,SM xmmreg,xmmrm \333\2\x0F\x7E\110 WILLAMETTE,SSE2
mmxreg,mmxreg \2\x0F\x7F\101 PENT,MMX xmmrm,xmmreg \361\2\x0F\xD6\110 WILLAMETTE,SSE2
xmmreg,xmmreg \333\2\x0F\x7E\110 WILLAMETTE,SSE2
xmmreg,xmmreg \361\2\x0F\xD6\110 WILLAMETTE,SSE2
mem,xmmreg \361\2\x0F\xD6\101 WILLAMETTE,SSE2
xmmreg,mem \333\2\x0F\x7E\110 WILLAMETTE,SSE2
xmmreg,reg64 \361\326\2\x0F\x6E\110 WILLAMETTE,SSE2 xmmreg,reg64 \361\326\2\x0F\x6E\110 WILLAMETTE,SSE2
reg64,xmmreg \361\326\2\x0F\x7E\101 WILLAMETTE,SSE2 reg64,xmmreg \361\326\2\x0F\x7E\101 WILLAMETTE,SSE2
@ -1138,8 +1144,10 @@ reg16|32|64,regmem \320\1\x0B\110 8086,SM
rm8,reg8 \1\x08\101 8086 rm8,reg8 \1\x08\101 8086
reg8,rm8 \1\x0A\110 8086,SM reg8,rm8 \1\x0A\110 8086,SM
rm16|32|64,imm8 \320\1\x83\201\15 8086 rm16|32|64,imm8 \320\1\x83\201\15 8086
reg_eax|64,imm \320\1\x0D\41 386,SD reg_eax,imm \325\1\x0D\41 386,SM
rm32|64,imm \320\1\x81\201\41 386,SD reg_rax,imm \326\1\x0D\255 X86_64,SM
rm32,imm \325\1\x81\201\41 386,SM
rm64,imm \326\1\x81\201\255 X86_64,SM
reg_ax,imm \324\1\x0D\31 8086,SW reg_ax,imm \324\1\x0D\31 8086,SW
rm16,imm \324\1\x81\201\31 8086,SW rm16,imm \324\1\x81\201\31 8086,SW
reg_al,imm \1\x0C\21 8086,SB reg_al,imm \1\x0C\21 8086,SB
@ -1393,8 +1401,12 @@ mmxreg,mem \2\x0F\x58\110 PENT,MMX,SM,CYRIX
[POP,popX] [POP,popX]
(Ch_Wop1, Ch_RWESP, Ch_None) (Ch_Wop1, Ch_RWESP, Ch_None)
reg16|32|64 \320\10\x58\335 8086 reg16 \324\10\x58 8086
rm16|32|64 \300\320\1\x8F\200\335 8086 reg32 \325\10\x58 386,NOX86_64
reg64 \335\10\x58 X86_64
rm16 \324\1\x8F\200 8086
rm32 \325\1\x8F\200 386,NOX86_64
rm64 \335\1\x8F\200 X86_64
reg_cs \1\x0F 8086,UNDOC,ND reg_cs \1\x0F 8086,UNDOC,ND
reg_dess \4 8086,NOX86_64 reg_dess \4 8086,NOX86_64
reg_fsgs \1\x0F\5\335 386 reg_fsgs \1\x0F\5\335 386
@ -1574,8 +1586,12 @@ xmmreg,xmmrm \361\2\x0F\x61\110 WILLAMETTE,SSE2,SM
[PUSH,pushX] [PUSH,pushX]
(Ch_Rop1, Ch_RWESP, Ch_None) (Ch_Rop1, Ch_RWESP, Ch_None)
reg16|32|64 \320\10\x50\335 8086 reg16 \324\10\x50 8086
rm16|32|64 \300\320\1\xFF\206\335 8086 reg32 \325\10\x50 386,NOX86_64
reg64 \335\10\x50 X86_64
rm16 \324\1\xFF\206 8086
rm32 \325\1\xFF\206 386,NOX86_64
rm64 \335\1\xFF\206 X86_64
imm32 \325\1\x68\40\335 386 imm32 \325\1\x68\40\335 386
imm16 \324\1\x68\30\335 286 imm16 \324\1\x68\30\335 286
imm8 \1\x6A\14\335 286 imm8 \1\x6A\14\335 286
@ -1748,8 +1764,10 @@ reg16|32|64,regmem \320\1\x1B\110 8086,SM
rm16|32|64,imm8 \320\1\x83\203\15 8086 rm16|32|64,imm8 \320\1\x83\203\15 8086
rm8,reg8 \1\x18\101 8086 rm8,reg8 \1\x18\101 8086
reg8,rm8 \1\x1A\110 8086,SM reg8,rm8 \1\x1A\110 8086,SM
reg_eax|64,imm \320\1\x1D\41 386,SD reg_eax,imm \325\1\x1D\41 386,SM
rm32|64,imm \320\1\x81\203\41 386,SD reg_rax,imm \326\1\x1D\255 X86_64,SM
rm32,imm \320\1\x81\203\41 386,SM
rm64,imm \326\1\x81\203\255 X86_64,SM
reg_ax,imm \324\1\x1D\31 8086,SW reg_ax,imm \324\1\x1D\31 8086,SW
rm16,imm \320\1\x81\203\31 8086,SW rm16,imm \320\1\x81\203\31 8086,SW
reg_al,imm \1\x1C\21 8086,SB reg_al,imm \1\x1C\21 8086,SB
@ -1888,8 +1906,10 @@ reg16|32|64,regmem \320\1\x2B\110 8086,SM
rm8,reg8 \1\x28\101 8086 rm8,reg8 \1\x28\101 8086
reg8,rm8 \1\x2A\110 8086,SM reg8,rm8 \1\x2A\110 8086,SM
rm16|32|64,imm8 \320\1\x83\205\15 8086 rm16|32|64,imm8 \320\1\x83\205\15 8086
reg_eax|64,imm \320\1\x2D\41 386,SD reg_eax,imm \325\1\x2D\41 386,SM
rm32|64,imm \320\1\x81\205\41 8086,SD reg_rax,imm \326\1\x2D\255 X86_64,SM
rm32,imm \320\1\x81\205\41 386,SM
rm64,imm \326\1\x81\205\255 X86_64,SM
reg_ax,imm \324\1\x2D\31 8086,SW reg_ax,imm \324\1\x2D\31 8086,SW
rm16,imm \324\1\x81\205\31 8086,SW rm16,imm \324\1\x81\205\31 8086,SW
reg_al,imm \1\x2C\21 8086,SB reg_al,imm \1\x2C\21 8086,SB
@ -1929,9 +1949,11 @@ regmem,reg16|32|64 \320\1\x85\101 8086,SM
reg16|32|64,mem \320\1\x85\110 8086,SM reg16|32|64,mem \320\1\x85\110 8086,SM
reg8,reg8 \1\x84\101 8086 reg8,reg8 \1\x84\101 8086
rm8,reg8 \1\x84\101 8086,SM rm8,reg8 \1\x84\101 8086,SM
reg_rax,imm \326\1\xA9\255 X86_64,SM
reg_eax,imm \325\1\xA9\41 386,SM reg_eax,imm \325\1\xA9\41 386,SM
reg_ax,imm \324\1\xA9\31 8086,SM reg_ax,imm \324\1\xA9\31 8086,SM
reg_al,imm \1\xA8\21 8086,SM reg_al,imm \1\xA8\21 8086,SM
rm64,imm \326\1\xF7\200\255 X86_64,SM
rm32,imm \325\1\xF7\200\41 386,SM rm32,imm \325\1\xF7\200\41 386,SM
rm16,imm \324\1\xF7\200\31 8086,SM rm16,imm \324\1\xF7\200\31 8086,SM
rm8,imm \1\xF6\200\21 8086,SM rm8,imm \1\xF6\200\21 8086,SM
@ -2022,8 +2044,10 @@ reg16|32|64,regmem \320\1\x33\110 8086,SM
rm8,reg8 \1\x30\101 8086 rm8,reg8 \1\x30\101 8086
reg8,rm8 \1\x32\110 8086 reg8,rm8 \1\x32\110 8086
rm16|32|64,imm8 \320\1\x83\206\15 8086 rm16|32|64,imm8 \320\1\x83\206\15 8086
reg_eax|64,imm \320\1\x35\41 386,SD reg_eax,imm \325\1\x35\41 386,SM
rm32|64,imm \320\1\x81\206\41 386,SD reg_rax,imm \326\1\x35\255 X86_64,SM
rm32,imm \320\1\x81\206\41 386,SM
rm64,imm \326\1\x81\206\255 X86_64,SM
reg_ax,imm \324\1\x35\31 8086,SW reg_ax,imm \324\1\x35\31 8086,SW
rm16,imm \324\1\x81\206\31 8086,SW rm16,imm \324\1\x81\206\31 8086,SW
reg_al,imm \1\x34\21 8086,SB reg_al,imm \1\x34\21 8086,SB
@ -2456,28 +2480,23 @@ mmxreg,mmxrm,imm \2\x0F\x70\110\22 KATMAI,MMX,SM2,SB,AR2
[PFNACC] [PFNACC]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
mmxreg,mem \2\x0F\x0F\110\01\x8A PENT,3DNOW,SM mmxreg,mmxrm \2\x0F\x0F\110\01\x8A PENT,3DNOW,SM
mmxreg,mmxreg \2\x0F\x0F\110\01\x8A PENT,3DNOW
[PFPNACC] [PFPNACC]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
mmxreg,mem \2\x0F\x0F\110\01\x8E PENT,3DNOW,SM mmxreg,mmxrm \2\x0F\x0F\110\01\x8E PENT,3DNOW,SM
mmxreg,mmxreg \2\x0F\x0F\110\01\x8E PENT,3DNOW
[PI2FW] [PI2FW]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
mmxreg,mem \2\x0F\x0F\110\01\x0C PENT,3DNOW,SM mmxreg,mmxrm \2\x0F\x0F\110\01\x0C PENT,3DNOW,SM
mmxreg,mmxreg \2\x0F\x0F\110\01\x0C PENT,3DNOW
[PF2IW] [PF2IW]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
mmxreg,mem \2\x0F\x0F\110\01\x1C PENT,3DNOW,SM mmxreg,mmxrm \2\x0F\x0F\110\01\x1C PENT,3DNOW,SM
mmxreg,mmxreg \2\x0F\x0F\110\01\x1C PENT,3DNOW
[PSWAPD] [PSWAPD]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
mmxreg,mem \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM mmxreg,mmxrm \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM
mmxreg,mmxreg \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM
[FFREEP] [FFREEP]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)

View File

@ -1,2 +1,2 @@
{ don't edit, this file is generated from x86ins.dat } { don't edit, this file is generated from x86ins.dat }
1188; 1203;

View File

@ -45,16 +45,30 @@
( (
opcode : A_ADC; opcode : A_ADC;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#21#33; code : #213#1#21#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADC; opcode : A_ADC;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #208#1#129#130#33; code : #214#1#21#173;
flags : if_386 or if_sd flags : if_x86_64 or if_sm
),
(
opcode : A_ADC;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #213#1#129#130#33;
flags : if_386 or if_sm
),
(
opcode : A_ADC;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#130#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_ADC; opcode : A_ADC;
@ -122,16 +136,30 @@
( (
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#5#33; code : #208#1#5#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #208#1#129#128#33; code : #214#1#5#173;
flags : if_386 or if_sd flags : if_x86_64 or if_sm
),
(
opcode : A_ADD;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #213#1#129#128#33;
flags : if_386 or if_sm
),
(
opcode : A_ADD;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#128#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_ADD; opcode : A_ADD;
@ -199,16 +227,30 @@
( (
opcode : A_AND; opcode : A_AND;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#37#33; code : #213#1#37#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_AND; opcode : A_AND;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #208#1#129#132#33; code : #214#1#37#173;
flags : if_386 or if_sd flags : if_x86_64 or if_sm
),
(
opcode : A_AND;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #213#1#129#132#33;
flags : if_386 or if_sm
),
(
opcode : A_AND;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#132#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_AND; opcode : A_AND;
@ -437,16 +479,30 @@
( (
opcode : A_CMP; opcode : A_CMP;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#61#33; code : #213#1#61#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_CMP; opcode : A_CMP;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #208#1#129#135#33; code : #214#1#61#173;
flags : if_386 or if_sd flags : if_x86_64 or if_sm
),
(
opcode : A_CMP;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #213#1#129#135#33;
flags : if_386 or if_sm
),
(
opcode : A_CMP;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#135#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_CMP; opcode : A_CMP;
@ -2194,10 +2250,17 @@
( (
opcode : A_IMUL; opcode : A_IMUL;
ops : 2; ops : 2;
optypes : (ot_reg32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg32,ot_immediate,ot_none);
code : #208#1#105#64#33; code : #213#1#105#64#33;
flags : if_286 or if_sd flags : if_286 or if_sd
), ),
(
opcode : A_IMUL;
ops : 2;
optypes : (ot_reg64,ot_immediate,ot_none);
code : #214#1#105#64#173;
flags : if_x86_64
),
( (
opcode : A_IMUL; opcode : A_IMUL;
ops : 3; ops : 3;
@ -2719,9 +2782,16 @@
( (
opcode : A_MOV; opcode : A_MOV;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#199#128#33; code : #213#1#199#128#33;
flags : if_386 or if_sd flags : if_386 or if_sm
),
(
opcode : A_MOV;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#199#128#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_MOV; opcode : A_MOV;
@ -2915,59 +2985,31 @@
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#111#72; code : #2#15#111#72;
flags : if_pent or if_mmx or if_sm flags : if_pent or if_mmx or if_sm
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxrm,ot_mmxreg,ot_none);
code : #2#15#111#72;
flags : if_pent or if_mmx
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_memory,ot_mmxreg,ot_none);
code : #2#15#127#65; code : #2#15#127#65;
flags : if_pent or if_mmx or if_sm flags : if_pent or if_mmx or if_sm
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_xmmreg,ot_xmmrm,ot_none);
code : #2#15#127#65;
flags : if_pent or if_mmx
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_xmmreg,ot_xmmreg,ot_none);
code : #219#2#15#126#72; code : #219#2#15#126#72;
flags : if_willamette or if_sse2 flags : if_willamette or if_sse2
), ),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
optypes : (ot_xmmreg,ot_xmmreg,ot_none); optypes : (ot_xmmrm,ot_xmmreg,ot_none);
code : #241#2#15#214#72; code : #241#2#15#214#72;
flags : if_willamette or if_sse2 flags : if_willamette or if_sse2
), ),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_memory,ot_xmmreg,ot_none);
code : #241#2#15#214#65;
flags : if_willamette or if_sse2
),
(
opcode : A_MOVQ;
ops : 2;
optypes : (ot_xmmreg,ot_memory,ot_none);
code : #219#2#15#126#72;
flags : if_willamette or if_sse2
),
( (
opcode : A_MOVQ; opcode : A_MOVQ;
ops : 2; ops : 2;
@ -3167,16 +3209,30 @@
( (
opcode : A_OR; opcode : A_OR;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#13#33; code : #213#1#13#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_OR; opcode : A_OR;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #208#1#129#129#33; code : #214#1#13#173;
flags : if_386 or if_sd flags : if_x86_64 or if_sm
),
(
opcode : A_OR;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #213#1#129#129#33;
flags : if_386 or if_sm
),
(
opcode : A_OR;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#129#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_OR; opcode : A_OR;
@ -3776,17 +3832,31 @@
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #208#8#88#221; code : #212#8#88;
flags : if_8086 flags : if_8086
), ),
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg64,ot_none,ot_none);
code : #192#208#1#143#128#221; code : #221#8#88;
flags : if_x86_64
),
(
opcode : A_POP;
ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #212#1#143#128;
flags : if_8086 flags : if_8086
), ),
(
opcode : A_POP;
ops : 1;
optypes : (ot_regmem or ot_bits64,ot_none,ot_none);
code : #221#1#143#128;
flags : if_x86_64
),
( (
opcode : A_POP; opcode : A_POP;
ops : 1; ops : 1;
@ -4280,17 +4350,31 @@
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #208#8#80#221; code : #212#8#80;
flags : if_8086 flags : if_8086
), ),
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg64,ot_none,ot_none);
code : #192#208#1#255#134#221; code : #221#8#80;
flags : if_x86_64
),
(
opcode : A_PUSH;
ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #212#1#255#134;
flags : if_8086 flags : if_8086
), ),
(
opcode : A_PUSH;
ops : 1;
optypes : (ot_regmem or ot_bits64,ot_none,ot_none);
code : #221#1#255#134;
flags : if_x86_64
),
( (
opcode : A_PUSH; opcode : A_PUSH;
ops : 1; ops : 1;
@ -4770,16 +4854,30 @@
( (
opcode : A_SBB; opcode : A_SBB;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#29#33; code : #213#1#29#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SBB; opcode : A_SBB;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #214#1#29#173;
flags : if_x86_64 or if_sm
),
(
opcode : A_SBB;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#131#33; code : #208#1#129#131#33;
flags : if_386 or if_sd flags : if_386 or if_sm
),
(
opcode : A_SBB;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#131#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_SBB; opcode : A_SBB;
@ -5141,16 +5239,30 @@
( (
opcode : A_SUB; opcode : A_SUB;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#45#33; code : #213#1#45#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_SUB; opcode : A_SUB;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #214#1#45#173;
flags : if_x86_64 or if_sm
),
(
opcode : A_SUB;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#133#33; code : #208#1#129#133#33;
flags : if_8086 or if_sd flags : if_386 or if_sm
),
(
opcode : A_SUB;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#133#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_SUB; opcode : A_SUB;
@ -5257,6 +5369,13 @@
code : #1#132#65; code : #1#132#65;
flags : if_8086 or if_sm flags : if_8086 or if_sm
), ),
(
opcode : A_TEST;
ops : 2;
optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #214#1#169#173;
flags : if_x86_64 or if_sm
),
( (
opcode : A_TEST; opcode : A_TEST;
ops : 2; ops : 2;
@ -5278,6 +5397,13 @@
code : #1#168#17; code : #1#168#17;
flags : if_8086 or if_sm flags : if_8086 or if_sm
), ),
(
opcode : A_TEST;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#247#128#173;
flags : if_x86_64 or if_sm
),
( (
opcode : A_TEST; opcode : A_TEST;
ops : 2; ops : 2;
@ -5596,16 +5722,30 @@
( (
opcode : A_XOR; opcode : A_XOR;
ops : 2; ops : 2;
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_eax,ot_immediate,ot_none);
code : #208#1#53#33; code : #213#1#53#33;
flags : if_386 or if_sd flags : if_386 or if_sm
), ),
( (
opcode : A_XOR; opcode : A_XOR;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none); optypes : (ot_reg_rax,ot_immediate,ot_none);
code : #214#1#53#173;
flags : if_x86_64 or if_sm
),
(
opcode : A_XOR;
ops : 2;
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
code : #208#1#129#134#33; code : #208#1#129#134#33;
flags : if_386 or if_sd flags : if_386 or if_sm
),
(
opcode : A_XOR;
ops : 2;
optypes : (ot_regmem or ot_bits64,ot_immediate,ot_none);
code : #214#1#129#134#173;
flags : if_x86_64 or if_sm
), ),
( (
opcode : A_XOR; opcode : A_XOR;
@ -6499,70 +6639,35 @@
( (
opcode : A_PFNACC; opcode : A_PFNACC;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#138; code : #2#15#15#72#1#138;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
(
opcode : A_PFNACC;
ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
code : #2#15#15#72#1#138;
flags : if_pent or if_3dnow
),
(
opcode : A_PFPNACC;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#142;
flags : if_pent or if_3dnow or if_sm
),
( (
opcode : A_PFPNACC; opcode : A_PFPNACC;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#142; code : #2#15#15#72#1#142;
flags : if_pent or if_3dnow
),
(
opcode : A_PI2FW;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#12;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PI2FW; opcode : A_PI2FW;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#12; code : #2#15#15#72#1#12;
flags : if_pent or if_3dnow
),
(
opcode : A_PF2IW;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#28;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PF2IW; opcode : A_PF2IW;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#28; code : #2#15#15#72#1#28;
flags : if_pent or if_3dnow
),
(
opcode : A_PSWAPD;
ops : 2;
optypes : (ot_mmxreg,ot_memory,ot_none);
code : #2#15#15#72#1#187;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PSWAPD; opcode : A_PSWAPD;
ops : 2; ops : 2;
optypes : (ot_mmxreg,ot_mmxreg,ot_none); optypes : (ot_mmxreg,ot_mmxrm,ot_none);
code : #2#15#15#72#1#187; code : #2#15#15#72#1#187;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),

14
tests/test/tasm5.pp Normal file
View File

@ -0,0 +1,14 @@
{ %CPU=x86_64 }
{ %fail }
{$asmmode att}
// Immediates must fit into 32 bits (except in 'mov' instruction)
procedure test; assembler; nostackframe;
asm
andq $0x0000000105060708, %rax
orq $0xffffffff00000000, %rax
end;
begin
end.

15
tests/test/tasm6.pp Normal file
View File

@ -0,0 +1,15 @@
{ %CPU=x86_64 }
{ %fail }
// push and pop with 32-bit operands aren't encodable in x86_64
{$asmmode att}
procedure test; assembler; nostackframe;
asm
push %eax
pop %r8d
pushl (%rax)
popl (%r8)
end;
begin
end.