mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-03 10:18:32 +02:00
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:
parent
6ea8eb7dc2
commit
9e8a31193b
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -9569,6 +9569,8 @@ tests/test/tasm1.pp svneol=native#text/plain
|
||||
tests/test/tasm2.pp svneol=native#text/plain
|
||||
tests/test/tasm3.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/tasout.pp svneol=native#text/plain
|
||||
tests/test/tassignmentoperator1.pp svneol=native#text/pascal
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1215;
|
||||
1210;
|
||||
|
@ -87,16 +87,16 @@
|
||||
(
|
||||
opcode : A_ADC;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#21#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#21#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_ADC;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#130#33;
|
||||
flags : if_386 or if_sd
|
||||
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;
|
||||
@ -164,16 +164,16 @@
|
||||
(
|
||||
opcode : A_ADD;
|
||||
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;
|
||||
flags : if_386 or if_sd
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_ADD;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#128#33;
|
||||
flags : if_386 or if_sd
|
||||
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;
|
||||
@ -241,16 +241,16 @@
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#37#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#37#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#132#33;
|
||||
flags : if_386 or if_sd
|
||||
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;
|
||||
@ -542,16 +542,16 @@
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#61#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#61#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#135#33;
|
||||
flags : if_386 or if_sd
|
||||
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;
|
||||
@ -2320,8 +2320,8 @@
|
||||
(
|
||||
opcode : A_IMUL;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#105#64#33;
|
||||
optypes : (ot_reg32,ot_immediate,ot_none);
|
||||
code : #213#1#105#64#33;
|
||||
flags : if_286 or if_sd
|
||||
),
|
||||
(
|
||||
@ -2957,9 +2957,9 @@
|
||||
(
|
||||
opcode : A_MOV;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#199#128#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
|
||||
code : #213#1#199#128#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_MOV;
|
||||
@ -3167,59 +3167,31 @@
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_memory,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#111#72;
|
||||
flags : if_pent or if_mmx or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,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);
|
||||
optypes : (ot_mmxrm,ot_mmxreg,ot_none);
|
||||
code : #2#15#127#65;
|
||||
flags : if_pent or if_mmx or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,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);
|
||||
optypes : (ot_xmmreg,ot_xmmrm,ot_none);
|
||||
code : #219#2#15#126#72;
|
||||
flags : if_willamette or if_sse2
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_xmmreg,ot_xmmreg,ot_none);
|
||||
optypes : (ot_xmmrm,ot_xmmreg,ot_none);
|
||||
code : #241#2#15#214#72;
|
||||
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;
|
||||
ops : 2;
|
||||
@ -3412,16 +3384,16 @@
|
||||
(
|
||||
opcode : A_OR;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#13#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#13#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_OR;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#129#33;
|
||||
flags : if_386 or if_sd
|
||||
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;
|
||||
@ -4021,17 +3993,31 @@
|
||||
(
|
||||
opcode : A_POP;
|
||||
ops : 1;
|
||||
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #208#8#88#221;
|
||||
optypes : (ot_reg16,ot_none,ot_none);
|
||||
code : #212#8#88;
|
||||
flags : if_8086
|
||||
),
|
||||
(
|
||||
opcode : A_POP;
|
||||
ops : 1;
|
||||
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #192#208#1#143#128#221;
|
||||
optypes : (ot_reg32,ot_none,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
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;
|
||||
ops : 1;
|
||||
@ -4553,17 +4539,31 @@
|
||||
(
|
||||
opcode : A_PUSH;
|
||||
ops : 1;
|
||||
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #208#8#80#221;
|
||||
optypes : (ot_reg16,ot_none,ot_none);
|
||||
code : #212#8#80;
|
||||
flags : if_8086
|
||||
),
|
||||
(
|
||||
opcode : A_PUSH;
|
||||
ops : 1;
|
||||
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #192#208#1#255#134#221;
|
||||
optypes : (ot_reg32,ot_none,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
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;
|
||||
ops : 1;
|
||||
@ -5085,16 +5085,16 @@
|
||||
(
|
||||
opcode : A_SBB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#29#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#29#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SBB;
|
||||
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;
|
||||
flags : if_386 or if_sd
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SBB;
|
||||
@ -5449,16 +5449,16 @@
|
||||
(
|
||||
opcode : A_SUB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#45#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#45#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SUB;
|
||||
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;
|
||||
flags : if_8086 or if_sd
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SUB;
|
||||
@ -5890,16 +5890,16 @@
|
||||
(
|
||||
opcode : A_XOR;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#53#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#53#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_XOR;
|
||||
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;
|
||||
flags : if_386 or if_sd
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_XOR;
|
||||
@ -6793,70 +6793,35 @@
|
||||
(
|
||||
opcode : A_PFNACC;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_memory,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#15#72#1#138;
|
||||
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;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PI2FW;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PF2IW;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PSWAPD;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#15#72#1#187;
|
||||
flags : if_pent or if_3dnow or if_sm
|
||||
),
|
||||
|
@ -1769,7 +1769,8 @@ implementation
|
||||
end;
|
||||
32,33,34,
|
||||
52,53,54,
|
||||
56,57,58 :
|
||||
56,57,58,
|
||||
172,173,174 :
|
||||
inc(len,4);
|
||||
192,193,194 :
|
||||
if NeedAddrPrefix(c-192) then
|
||||
@ -1819,7 +1820,7 @@ implementation
|
||||
omit_rexw:=true
|
||||
{$endif x86_64}
|
||||
;
|
||||
64..191 :
|
||||
64..151 :
|
||||
begin
|
||||
{$ifdef x86_64}
|
||||
if (c<127) then
|
||||
@ -1892,6 +1893,7 @@ implementation
|
||||
* field the register value of operand b.
|
||||
* \2ab - a ModRM, calculated on EA in operand a, with the spare
|
||||
* 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
|
||||
* the memory reference in operand x.
|
||||
* \310 - indicates fixed 16-bit address size, i.e. optional 0x67.
|
||||
@ -2194,6 +2196,17 @@ implementation
|
||||
else
|
||||
objdata_writereloc(currval-insend,4,nil,currabsreloc32)
|
||||
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 :
|
||||
begin
|
||||
if NeedAddrPrefix(c-192) then
|
||||
@ -2279,9 +2292,9 @@ implementation
|
||||
if (rex<>0) and not(rexwritten) then
|
||||
internalerror(200603191);
|
||||
{$endif x86_64}
|
||||
if (c>=64) and (c<=191) then
|
||||
if (c>=64) and (c<=151) then // 0100..0227
|
||||
begin
|
||||
if (c<127) then
|
||||
if (c<127) then // 0177
|
||||
begin
|
||||
if (oper[c and 7]^.typ=top_reg) then
|
||||
rfield:=regval(oper[c and 7]^.reg)
|
||||
@ -2353,7 +2366,7 @@ implementation
|
||||
Dec(currval, 1);
|
||||
24,25,26:
|
||||
Dec(currval, 2);
|
||||
32,33,34:
|
||||
32,33,34,172,173,174:
|
||||
Dec(currval, 4);
|
||||
end;
|
||||
end
|
||||
|
@ -39,8 +39,10 @@ reg16|32|64,regmem \320\1\x13\110 8086,SM
|
||||
rm8,reg8 \1\x10\101 8086
|
||||
reg8,rm8 \1\x12\110 8086
|
||||
rm16|32|64,imm8 \320\1\x83\202\15 8086
|
||||
reg_eax|64,imm \320\1\x15\41 386,SD
|
||||
rm32|64,imm \320\1\x81\202\41 386,SD
|
||||
reg_eax,imm \325\1\x15\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\202\31 8086,SW
|
||||
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
|
||||
reg8,rm8 \1\x02\110 8086,SM
|
||||
rm16|32|64,imm8 \320\1\x83\200\15 8086
|
||||
reg_eax|64,imm \320\1\x05\41 386,SD
|
||||
rm32|64,imm \320\1\x81\200\41 386,SD
|
||||
reg_eax,imm \320\1\x05\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\200\31 8086,SW
|
||||
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
|
||||
reg8,rm8 \1\x22\110 8086
|
||||
rm16|32|64,imm8 \320\1\x83\204\15 8086
|
||||
reg_eax|64,imm \320\1\x25\41 386,SD
|
||||
rm32|64,imm \320\1\x81\204\41 386,SD
|
||||
reg_eax,imm \325\1\x25\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\204\31 8086,SW
|
||||
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
|
||||
reg8,rm8 \1\x3A\110 8086
|
||||
rm16|32|64,imm8 \320\1\x83\207\15 8086
|
||||
reg_eax|64,imm \320\1\x3D\41 386,SD
|
||||
rm32|64,imm \320\1\x81\207\41 386,SD
|
||||
reg_eax,imm \325\1\x3D\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\207\31 8086,SW
|
||||
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,imm \320\1\x69\110\42 286,SM,SD,AR2
|
||||
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,imm \324\1\x69\110\32 286,SM,SW,AR2
|
||||
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
|
||||
reg16|32|64,regmem \320\1\x8B\110 8086,SM
|
||||
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
|
||||
rm16,imm \324\1\xC7\200\31 8086,SW
|
||||
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]
|
||||
(Ch_Rop1, Ch_Wop2, Ch_None)
|
||||
mmxreg,mem \2\x0F\x6F\110 PENT,MMX,SM
|
||||
mmxreg,mmxreg \2\x0F\x6F\110 PENT,MMX
|
||||
mem,mmxreg \2\x0F\x7F\101 PENT,MMX,SM
|
||||
mmxreg,mmxreg \2\x0F\x7F\101 PENT,MMX
|
||||
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
|
||||
mmxreg,mmxrm \2\x0F\x6F\110 PENT,MMX,SM
|
||||
mmxrm,mmxreg \2\x0F\x7F\101 PENT,MMX,SM
|
||||
xmmreg,xmmrm \333\2\x0F\x7E\110 WILLAMETTE,SSE2
|
||||
xmmrm,xmmreg \361\2\x0F\xD6\110 WILLAMETTE,SSE2
|
||||
xmmreg,reg64 \361\326\2\x0F\x6E\110 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
|
||||
reg8,rm8 \1\x0A\110 8086,SM
|
||||
rm16|32|64,imm8 \320\1\x83\201\15 8086
|
||||
reg_eax|64,imm \320\1\x0D\41 386,SD
|
||||
rm32|64,imm \320\1\x81\201\41 386,SD
|
||||
reg_eax,imm \325\1\x0D\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\201\31 8086,SW
|
||||
reg_al,imm \1\x0C\21 8086,SB
|
||||
@ -1393,8 +1401,12 @@ mmxreg,mem \2\x0F\x58\110 PENT,MMX,SM,CYRIX
|
||||
|
||||
[POP,popX]
|
||||
(Ch_Wop1, Ch_RWESP, Ch_None)
|
||||
reg16|32|64 \320\10\x58\335 8086
|
||||
rm16|32|64 \300\320\1\x8F\200\335 8086
|
||||
reg16 \324\10\x58 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_dess \4 8086,NOX86_64
|
||||
reg_fsgs \1\x0F\5\335 386
|
||||
@ -1574,8 +1586,12 @@ xmmreg,xmmrm \361\2\x0F\x61\110 WILLAMETTE,SSE2,SM
|
||||
|
||||
[PUSH,pushX]
|
||||
(Ch_Rop1, Ch_RWESP, Ch_None)
|
||||
reg16|32|64 \320\10\x50\335 8086
|
||||
rm16|32|64 \300\320\1\xFF\206\335 8086
|
||||
reg16 \324\10\x50 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
|
||||
imm16 \324\1\x68\30\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
|
||||
rm8,reg8 \1\x18\101 8086
|
||||
reg8,rm8 \1\x1A\110 8086,SM
|
||||
reg_eax|64,imm \320\1\x1D\41 386,SD
|
||||
rm32|64,imm \320\1\x81\203\41 386,SD
|
||||
reg_eax,imm \325\1\x1D\41 386,SM
|
||||
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
|
||||
rm16,imm \320\1\x81\203\31 8086,SW
|
||||
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
|
||||
reg8,rm8 \1\x2A\110 8086,SM
|
||||
rm16|32|64,imm8 \320\1\x83\205\15 8086
|
||||
reg_eax|64,imm \320\1\x2D\41 386,SD
|
||||
rm32|64,imm \320\1\x81\205\41 8086,SD
|
||||
reg_eax,imm \325\1\x2D\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\205\31 8086,SW
|
||||
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
|
||||
reg8,reg8 \1\x84\101 8086
|
||||
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_ax,imm \324\1\xA9\31 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
|
||||
rm16,imm \324\1\xF7\200\31 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
|
||||
reg8,rm8 \1\x32\110 8086
|
||||
rm16|32|64,imm8 \320\1\x83\206\15 8086
|
||||
reg_eax|64,imm \320\1\x35\41 386,SD
|
||||
rm32|64,imm \320\1\x81\206\41 386,SD
|
||||
reg_eax,imm \325\1\x35\41 386,SM
|
||||
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
|
||||
rm16,imm \324\1\x81\206\31 8086,SW
|
||||
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]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mem \2\x0F\x0F\110\01\x8A PENT,3DNOW,SM
|
||||
mmxreg,mmxreg \2\x0F\x0F\110\01\x8A PENT,3DNOW
|
||||
mmxreg,mmxrm \2\x0F\x0F\110\01\x8A PENT,3DNOW,SM
|
||||
|
||||
[PFPNACC]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mem \2\x0F\x0F\110\01\x8E PENT,3DNOW,SM
|
||||
mmxreg,mmxreg \2\x0F\x0F\110\01\x8E PENT,3DNOW
|
||||
mmxreg,mmxrm \2\x0F\x0F\110\01\x8E PENT,3DNOW,SM
|
||||
|
||||
[PI2FW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mem \2\x0F\x0F\110\01\x0C PENT,3DNOW,SM
|
||||
mmxreg,mmxreg \2\x0F\x0F\110\01\x0C PENT,3DNOW
|
||||
mmxreg,mmxrm \2\x0F\x0F\110\01\x0C PENT,3DNOW,SM
|
||||
|
||||
[PF2IW]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mem \2\x0F\x0F\110\01\x1C PENT,3DNOW,SM
|
||||
mmxreg,mmxreg \2\x0F\x0F\110\01\x1C PENT,3DNOW
|
||||
mmxreg,mmxrm \2\x0F\x0F\110\01\x1C PENT,3DNOW,SM
|
||||
|
||||
[PSWAPD]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
mmxreg,mem \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM
|
||||
mmxreg,mmxreg \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM
|
||||
mmxreg,mmxrm \2\x0F\x0F\110\01\xBB PENT,3DNOW,SM
|
||||
|
||||
[FFREEP]
|
||||
(Ch_All, Ch_None, Ch_None)
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1188;
|
||||
1203;
|
||||
|
@ -45,16 +45,30 @@
|
||||
(
|
||||
opcode : A_ADC;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#21#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#21#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_ADC;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#130#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_rax,ot_immediate,ot_none);
|
||||
code : #214#1#21#173;
|
||||
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;
|
||||
@ -122,16 +136,30 @@
|
||||
(
|
||||
opcode : A_ADD;
|
||||
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;
|
||||
flags : if_386 or if_sd
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_ADD;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#128#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_rax,ot_immediate,ot_none);
|
||||
code : #214#1#5#173;
|
||||
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;
|
||||
@ -199,16 +227,30 @@
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#37#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#37#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#132#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_rax,ot_immediate,ot_none);
|
||||
code : #214#1#37#173;
|
||||
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;
|
||||
@ -437,16 +479,30 @@
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#61#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#61#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#135#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_rax,ot_immediate,ot_none);
|
||||
code : #214#1#61#173;
|
||||
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;
|
||||
@ -2194,10 +2250,17 @@
|
||||
(
|
||||
opcode : A_IMUL;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#105#64#33;
|
||||
optypes : (ot_reg32,ot_immediate,ot_none);
|
||||
code : #213#1#105#64#33;
|
||||
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;
|
||||
ops : 3;
|
||||
@ -2719,9 +2782,16 @@
|
||||
(
|
||||
opcode : A_MOV;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#199#128#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_regmem or ot_bits32,ot_immediate,ot_none);
|
||||
code : #213#1#199#128#33;
|
||||
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;
|
||||
@ -2915,59 +2985,31 @@
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_memory,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#111#72;
|
||||
flags : if_pent or if_mmx or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,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);
|
||||
optypes : (ot_mmxrm,ot_mmxreg,ot_none);
|
||||
code : #2#15#127#65;
|
||||
flags : if_pent or if_mmx or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,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);
|
||||
optypes : (ot_xmmreg,ot_xmmrm,ot_none);
|
||||
code : #219#2#15#126#72;
|
||||
flags : if_willamette or if_sse2
|
||||
),
|
||||
(
|
||||
opcode : A_MOVQ;
|
||||
ops : 2;
|
||||
optypes : (ot_xmmreg,ot_xmmreg,ot_none);
|
||||
optypes : (ot_xmmrm,ot_xmmreg,ot_none);
|
||||
code : #241#2#15#214#72;
|
||||
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;
|
||||
ops : 2;
|
||||
@ -3167,16 +3209,30 @@
|
||||
(
|
||||
opcode : A_OR;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#13#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#13#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_OR;
|
||||
ops : 2;
|
||||
optypes : (ot_regmem or ot_bits32 or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#129#129#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_rax,ot_immediate,ot_none);
|
||||
code : #214#1#13#173;
|
||||
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;
|
||||
@ -3776,17 +3832,31 @@
|
||||
(
|
||||
opcode : A_POP;
|
||||
ops : 1;
|
||||
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #208#8#88#221;
|
||||
optypes : (ot_reg16,ot_none,ot_none);
|
||||
code : #212#8#88;
|
||||
flags : if_8086
|
||||
),
|
||||
(
|
||||
opcode : A_POP;
|
||||
ops : 1;
|
||||
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #192#208#1#143#128#221;
|
||||
optypes : (ot_reg64,ot_none,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
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;
|
||||
ops : 1;
|
||||
@ -4280,17 +4350,31 @@
|
||||
(
|
||||
opcode : A_PUSH;
|
||||
ops : 1;
|
||||
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #208#8#80#221;
|
||||
optypes : (ot_reg16,ot_none,ot_none);
|
||||
code : #212#8#80;
|
||||
flags : if_8086
|
||||
),
|
||||
(
|
||||
opcode : A_PUSH;
|
||||
ops : 1;
|
||||
optypes : (ot_regmem or ot_bits16 or ot_bits32 or ot_bits64,ot_none,ot_none);
|
||||
code : #192#208#1#255#134#221;
|
||||
optypes : (ot_reg64,ot_none,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
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;
|
||||
ops : 1;
|
||||
@ -4770,16 +4854,30 @@
|
||||
(
|
||||
opcode : A_SBB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#29#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#29#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SBB;
|
||||
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;
|
||||
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;
|
||||
@ -5141,16 +5239,30 @@
|
||||
(
|
||||
opcode : A_SUB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#45#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#45#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_SUB;
|
||||
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;
|
||||
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;
|
||||
@ -5257,6 +5369,13 @@
|
||||
code : #1#132#65;
|
||||
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;
|
||||
ops : 2;
|
||||
@ -5278,6 +5397,13 @@
|
||||
code : #1#168#17;
|
||||
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;
|
||||
ops : 2;
|
||||
@ -5596,16 +5722,30 @@
|
||||
(
|
||||
opcode : A_XOR;
|
||||
ops : 2;
|
||||
optypes : (ot_reg_eax or ot_bits64,ot_immediate,ot_none);
|
||||
code : #208#1#53#33;
|
||||
flags : if_386 or if_sd
|
||||
optypes : (ot_reg_eax,ot_immediate,ot_none);
|
||||
code : #213#1#53#33;
|
||||
flags : if_386 or if_sm
|
||||
),
|
||||
(
|
||||
opcode : A_XOR;
|
||||
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;
|
||||
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;
|
||||
@ -6499,70 +6639,35 @@
|
||||
(
|
||||
opcode : A_PFNACC;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_memory,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#15#72#1#138;
|
||||
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;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PI2FW;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PF2IW;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
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
|
||||
),
|
||||
(
|
||||
opcode : A_PSWAPD;
|
||||
ops : 2;
|
||||
optypes : (ot_mmxreg,ot_mmxreg,ot_none);
|
||||
optypes : (ot_mmxreg,ot_mmxrm,ot_none);
|
||||
code : #2#15#15#72#1#187;
|
||||
flags : if_pent or if_3dnow or if_sm
|
||||
),
|
||||
|
14
tests/test/tasm5.pp
Normal file
14
tests/test/tasm5.pp
Normal 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
15
tests/test/tasm6.pp
Normal 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.
|
Loading…
Reference in New Issue
Block a user