* mkx86ins.pp: ot_signed flag must not be set by literal opcodes. Ignore 2- and 3-byte literal sequences, not just 1-byte ones.

* x86ins.dat: replaced codes \17 with literal zeros. They aren't necessary for FPC, and they were removed from NASM quite a while ago.

git-svn-id: trunk@17430 -
This commit is contained in:
sergei 2011-05-11 12:31:18 +00:00
parent 3167cd628b
commit 9bb0dc6cfe
4 changed files with 72 additions and 67 deletions

View File

@ -144,7 +144,7 @@
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none); optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none);
code : #192#211#15#65; code : #192#211#1#0#65;
flags : if_8086 flags : if_8086
), ),
( (
@ -1333,7 +1333,7 @@
( (
opcode : A_FEMMS; opcode : A_FEMMS;
ops : 0; ops : 0;
optypes : (ot_none,ot_none,ot_none or ot_signed); optypes : (ot_none,ot_none,ot_none);
code : #2#15#14; code : #2#15#14;
flags : if_pent or if_3dnow flags : if_pent or if_3dnow
), ),
@ -2727,7 +2727,7 @@
opcode : A_LLDT; opcode : A_LLDT;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none); optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#130; code : #192#2#15#0#130;
flags : if_286 or if_prot or if_priv flags : if_286 or if_prot or if_priv
), ),
( (
@ -2902,7 +2902,7 @@
opcode : A_LTR; opcode : A_LTR;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none); optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#131; code : #192#2#15#0#131;
flags : if_286 or if_prot or if_priv flags : if_286 or if_prot or if_priv
), ),
( (
@ -4595,14 +4595,14 @@
( (
opcode : A_PREFETCH; opcode : A_PREFETCH;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#128; code : #2#15#13#128;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PREFETCHW; opcode : A_PREFETCHW;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#129; code : #2#15#13#129;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
@ -6108,14 +6108,14 @@
opcode : A_SLDT; opcode : A_SLDT;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#128; code : #192#2#15#0#128;
flags : if_286 flags : if_286
), ),
( (
opcode : A_SLDT; opcode : A_SLDT;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
code : #208#1#15#15#128; code : #208#2#15#0#128;
flags : if_286 flags : if_286
), ),
( (
@ -6192,14 +6192,14 @@
opcode : A_STR; opcode : A_STR;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#129; code : #192#2#15#0#129;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_STR; opcode : A_STR;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
code : #208#1#15#15#129; code : #208#2#15#0#129;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
@ -6465,42 +6465,42 @@
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_memory or ot_bits16,ot_none,ot_none); optypes : (ot_memory or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_reg16,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_memory or ot_bits16,ot_none,ot_none); optypes : (ot_memory or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_reg16,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
@ -10104,14 +10104,14 @@
( (
opcode : A_BLENDPS; opcode : A_BLENDPS;
ops : 3; ops : 3;
optypes : (ot_xmmreg or ot_signed,ot_xmmreg,ot_immediate); optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
code : #1#102#217#3#15#58#12#72#22; code : #1#102#217#3#15#58#12#72#22;
flags : if_sse4 flags : if_sse4
), ),
( (
opcode : A_BLENDPS; opcode : A_BLENDPS;
ops : 3; ops : 3;
optypes : (ot_xmmreg or ot_signed,ot_memory,ot_immediate); optypes : (ot_xmmreg,ot_memory,ot_immediate);
code : #1#102#193#217#3#15#58#12#72#22; code : #1#102#193#217#3#15#58#12#72#22;
flags : if_sse4 flags : if_sse4
), ),
@ -10265,14 +10265,14 @@
( (
opcode : A_PBLENDW; opcode : A_PBLENDW;
ops : 3; ops : 3;
optypes : (ot_xmmreg,ot_xmmreg,ot_immediate or ot_signed); optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
code : #1#102#217#3#15#58#14#72#22; code : #1#102#217#3#15#58#14#72#22;
flags : if_sse4 flags : if_sse4
), ),
( (
opcode : A_PBLENDW; opcode : A_PBLENDW;
ops : 3; ops : 3;
optypes : (ot_xmmreg,ot_memory,ot_immediate or ot_signed); optypes : (ot_xmmreg,ot_memory,ot_immediate);
code : #1#102#193#217#3#15#58#14#72#22; code : #1#102#193#217#3#15#58#14#72#22;
flags : if_sse4 flags : if_sse4
), ),

View File

@ -198,7 +198,7 @@ var
infile,insfile : text; infile,insfile : text;
{ instruction fields } { instruction fields }
skip : boolean; skip : boolean;
last, literalcount,
ops : longint; ops : longint;
intopcode, intopcode,
attopcode, attopcode,
@ -360,24 +360,29 @@ begin
{ codes } { codes }
skipspace; skipspace;
j:=0; j:=0;
last:=0; literalcount:=0;
if s[i] in ['\','0'..'9'] then if s[i] in ['\','0'..'9'] then
begin begin
while not(s[i] in [' ',#9]) do while not(s[i] in [' ',#9]) do
begin begin
code:=readnumber; code:=readnumber;
{ for some codes we want also to change the optypes, but not { for some codes we want also to change the optypes, but not
if the last byte was a 1 then this byte belongs to a direct if the code belongs to a literal sequence }
copy } if (literalcount=0) and (code>=1) and (code<=3) then
if last<>1 then literalcount:=code
begin else
case code of begin
12,13,14 : if literalcount>0 then
optypes[code-11]:=optypes[code-11]+' or ot_signed'; dec(literalcount)
end; else
end; begin
case code of
12,13,14 :
optypes[code-11]:=optypes[code-11]+' or ot_signed';
end;
end;
end;
codes:=codes+'#'+tostr(code); codes:=codes+'#'+tostr(code);
last:=code;
inc(j); inc(j);
end; end;
end end

View File

@ -50,7 +50,7 @@ rm8,imm \300\323\1\x80\202\21 8086,SB
(Ch_Mop2, Ch_Rop1, Ch_WFlags) (Ch_Mop2, Ch_Rop1, Ch_WFlags)
regmem,reg16|32|64 \300\320\1\x01\101 8086,SM regmem,reg16|32|64 \300\320\1\x01\101 8086,SM
reg16|32|64,regmem \301\320\1\x03\110 8086,SM reg16|32|64,regmem \301\320\1\x03\110 8086,SM
rm8,reg8 \300\323\17\101 8086 rm8,reg8 \300\323\1\x00\101 8086
reg8,rm8 \301\323\1\x02\110 8086,SM reg8,rm8 \301\323\1\x02\110 8086,SM
rm16|32|64,imm8 \300\320\1\x83\200\15 8086 rm16|32|64,imm8 \300\320\1\x83\200\15 8086
reg_eax|64,imm \320\1\x05\41 386,SD reg_eax|64,imm \320\1\x05\41 386,SD
@ -936,7 +936,7 @@ mem|near \300\320\1\xFF\204 8086
[LLDT,lldtX] [LLDT,lldtX]
(Ch_None, Ch_None, Ch_None) (Ch_None, Ch_None, Ch_None)
rm16 \300\1\x0F\17\202 286,PROT,PRIV rm16 \300\2\x0F\x00\202 286,PROT,PRIV
[LMSW,lmswX] [LMSW,lmswX]
(Ch_None, Ch_None, Ch_None) (Ch_None, Ch_None, Ch_None)
@ -1006,7 +1006,7 @@ reg16|32|64,mem \301\320\2\x0F\xB2\110 386
[LTR,ltrX] [LTR,ltrX]
(Ch_None, Ch_None, Ch_None) (Ch_None, Ch_None, Ch_None)
rm16 \300\1\x0F\17\203 286,PROT,PRIV rm16 \300\2\x0F\x00\203 286,PROT,PRIV
[MONITOR] [MONITOR]
(Ch_None, Ch_None, Ch_None) (Ch_None, Ch_None, Ch_None)
@ -1941,8 +1941,8 @@ mem \300\2\x0F\x01\201 286
[SLDT,sldtX] [SLDT,sldtX]
(Ch_Wop1, Ch_None, Ch_None) (Ch_Wop1, Ch_None, Ch_None)
mem \300\1\x0F\17\200 286 mem \300\2\x0F\x00\200 286
reg16|32|64 \320\1\x0F\17\200 286 reg16|32|64 \320\2\x0F\x00\200 286
[SMI] [SMI]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
@ -1986,8 +1986,8 @@ void \324\1\xAB 8086
[STR,strX] [STR,strX]
(Ch_Wop1, Ch_None, Ch_None) (Ch_Wop1, Ch_None, Ch_None)
mem \300\1\x0F\17\201 286,PROT mem \300\2\x0F\x00\201 286,PROT
reg16|32|64 \320\1\x0F\17\201 286,PROT reg16|32|64 \320\2\x0F\x00\201 286,PROT
[SUB,subX] [SUB,subX]
(Ch_Mop2, Ch_Rop1, Ch_WFlags) (Ch_Mop2, Ch_Rop1, Ch_WFlags)
@ -2064,15 +2064,15 @@ reg8,rm8 \301\323\2\x0F\x12\110 386,UNDOC
[VERR,verrX] [VERR,verrX]
(Ch_WFlags, Ch_None, Ch_None) (Ch_WFlags, Ch_None, Ch_None)
mem \300\1\x0F\17\204 286,PROT mem \300\2\x0F\x00\204 286,PROT
mem16 \300\1\x0F\17\204 286,PROT mem16 \300\2\x0F\x00\204 286,PROT
reg16 \300\1\x0F\17\204 286,PROT reg16 \300\2\x0F\x00\204 286,PROT
[VERW] [VERW]
(Ch_WFlags, Ch_None, Ch_None) (Ch_WFlags, Ch_None, Ch_None)
mem \300\1\x0F\17\205 286,PROT mem \300\2\x0F\x00\205 286,PROT
mem16 \300\1\x0F\17\205 286,PROT mem16 \300\2\x0F\x00\205 286,PROT
reg16 \300\1\x0F\17\205 286,PROT reg16 \300\2\x0F\x00\205 286,PROT
[WAIT] [WAIT]
(Ch_None, Ch_None, Ch_None) (Ch_None, Ch_None, Ch_None)
@ -3407,12 +3407,12 @@ xmmreg,mem \1\x66\301\331\3\x0F\x38\x0A\110 SSE4
;******************************************************************************* ;*******************************************************************************
;**********SSE4.1*************************************************************** ;**********SSE4.1***************************************************************
;******************************************************************************* ;*******************************************************************************
[BLENDPS] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc [BLENDPS]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0C\110\26 SSE4 xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0C\110\26 SSE4
xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0C\110\26 SSE4 xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0C\110\26 SSE4
[BLENDPD] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc [BLENDPD]
(Ch_All, Ch_None, Ch_None) (Ch_All, Ch_None, Ch_None)
xmmreg,xmmreg,imm \1\x66\331\2\x0F\x3A\375\1\x0D\110\26 SSE4 xmmreg,xmmreg,imm \1\x66\331\2\x0F\x3A\375\1\x0D\110\26 SSE4
xmmreg,mem,imm \1\x66\301\331\2\x0F\x3A\375\1\x0D\110\26 SSE4 xmmreg,mem,imm \1\x66\301\331\2\x0F\x3A\375\1\x0D\110\26 SSE4

View File

@ -144,7 +144,7 @@
opcode : A_ADD; opcode : A_ADD;
ops : 2; ops : 2;
optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none); optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none);
code : #192#211#15#65; code : #192#211#1#0#65;
flags : if_8086 flags : if_8086
), ),
( (
@ -1326,7 +1326,7 @@
( (
opcode : A_FEMMS; opcode : A_FEMMS;
ops : 0; ops : 0;
optypes : (ot_none,ot_none,ot_none or ot_signed); optypes : (ot_none,ot_none,ot_none);
code : #2#15#14; code : #2#15#14;
flags : if_pent or if_3dnow flags : if_pent or if_3dnow
), ),
@ -2713,7 +2713,7 @@
opcode : A_LLDT; opcode : A_LLDT;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none); optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#130; code : #192#2#15#0#130;
flags : if_286 or if_prot or if_priv flags : if_286 or if_prot or if_priv
), ),
( (
@ -2888,7 +2888,7 @@
opcode : A_LTR; opcode : A_LTR;
ops : 1; ops : 1;
optypes : (ot_regmem or ot_bits16,ot_none,ot_none); optypes : (ot_regmem or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#131; code : #192#2#15#0#131;
flags : if_286 or if_prot or if_priv flags : if_286 or if_prot or if_priv
), ),
( (
@ -4532,14 +4532,14 @@
( (
opcode : A_PREFETCH; opcode : A_PREFETCH;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#128; code : #2#15#13#128;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
( (
opcode : A_PREFETCHW; opcode : A_PREFETCHW;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#129; code : #2#15#13#129;
flags : if_pent or if_3dnow or if_sm flags : if_pent or if_3dnow or if_sm
), ),
@ -6003,14 +6003,14 @@
opcode : A_SLDT; opcode : A_SLDT;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#128; code : #192#2#15#0#128;
flags : if_286 flags : if_286
), ),
( (
opcode : A_SLDT; opcode : A_SLDT;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
code : #208#1#15#15#128; code : #208#2#15#0#128;
flags : if_286 flags : if_286
), ),
( (
@ -6087,14 +6087,14 @@
opcode : A_STR; opcode : A_STR;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#129; code : #192#2#15#0#129;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_STR; opcode : A_STR;
ops : 1; ops : 1;
optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none); optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
code : #208#1#15#15#129; code : #208#2#15#0#129;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
@ -6360,42 +6360,42 @@
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_memory or ot_bits16,ot_none,ot_none); optypes : (ot_memory or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERR; opcode : A_VERR;
ops : 1; ops : 1;
optypes : (ot_reg16,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #192#1#15#15#132; code : #192#2#15#0#132;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_memory,ot_none,ot_none); optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_memory or ot_bits16,ot_none,ot_none); optypes : (ot_memory or ot_bits16,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
opcode : A_VERW; opcode : A_VERW;
ops : 1; ops : 1;
optypes : (ot_reg16,ot_none,ot_none); optypes : (ot_reg16,ot_none,ot_none);
code : #192#1#15#15#133; code : #192#2#15#0#133;
flags : if_286 or if_prot flags : if_286 or if_prot
), ),
( (
@ -10048,14 +10048,14 @@
( (
opcode : A_BLENDPS; opcode : A_BLENDPS;
ops : 3; ops : 3;
optypes : (ot_xmmreg or ot_signed,ot_xmmreg,ot_immediate); optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
code : #1#102#217#3#15#58#12#72#22; code : #1#102#217#3#15#58#12#72#22;
flags : if_sse4 flags : if_sse4
), ),
( (
opcode : A_BLENDPS; opcode : A_BLENDPS;
ops : 3; ops : 3;
optypes : (ot_xmmreg or ot_signed,ot_memory,ot_immediate); optypes : (ot_xmmreg,ot_memory,ot_immediate);
code : #1#102#193#217#3#15#58#12#72#22; code : #1#102#193#217#3#15#58#12#72#22;
flags : if_sse4 flags : if_sse4
), ),
@ -10209,14 +10209,14 @@
( (
opcode : A_PBLENDW; opcode : A_PBLENDW;
ops : 3; ops : 3;
optypes : (ot_xmmreg,ot_xmmreg,ot_immediate or ot_signed); optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
code : #1#102#217#3#15#58#14#72#22; code : #1#102#217#3#15#58#14#72#22;
flags : if_sse4 flags : if_sse4
), ),
( (
opcode : A_PBLENDW; opcode : A_PBLENDW;
ops : 3; ops : 3;
optypes : (ot_xmmreg,ot_memory,ot_immediate or ot_signed); optypes : (ot_xmmreg,ot_memory,ot_immediate);
code : #1#102#193#217#3#15#58#14#72#22; code : #1#102#193#217#3#15#58#14#72#22;
flags : if_sse4 flags : if_sse4
), ),