* 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;
ops : 2;
optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none);
code : #192#211#15#65;
code : #192#211#1#0#65;
flags : if_8086
),
(
@ -1333,7 +1333,7 @@
(
opcode : A_FEMMS;
ops : 0;
optypes : (ot_none,ot_none,ot_none or ot_signed);
optypes : (ot_none,ot_none,ot_none);
code : #2#15#14;
flags : if_pent or if_3dnow
),
@ -2727,7 +2727,7 @@
opcode : A_LLDT;
ops : 1;
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
),
(
@ -2902,7 +2902,7 @@
opcode : A_LTR;
ops : 1;
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
),
(
@ -4595,14 +4595,14 @@
(
opcode : A_PREFETCH;
ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none);
optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#128;
flags : if_pent or if_3dnow or if_sm
),
(
opcode : A_PREFETCHW;
ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none);
optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#129;
flags : if_pent or if_3dnow or if_sm
),
@ -6108,14 +6108,14 @@
opcode : A_SLDT;
ops : 1;
optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#128;
code : #192#2#15#0#128;
flags : if_286
),
(
opcode : A_SLDT;
ops : 1;
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
),
(
@ -6192,14 +6192,14 @@
opcode : A_STR;
ops : 1;
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
),
(
opcode : A_STR;
ops : 1;
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
),
(
@ -6465,42 +6465,42 @@
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
@ -10104,14 +10104,14 @@
(
opcode : A_BLENDPS;
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;
flags : if_sse4
),
(
opcode : A_BLENDPS;
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;
flags : if_sse4
),
@ -10265,14 +10265,14 @@
(
opcode : A_PBLENDW;
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;
flags : if_sse4
),
(
opcode : A_PBLENDW;
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;
flags : if_sse4
),

View File

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

View File

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

View File

@ -144,7 +144,7 @@
opcode : A_ADD;
ops : 2;
optypes : (ot_regmem or ot_bits8,ot_reg8,ot_none);
code : #192#211#15#65;
code : #192#211#1#0#65;
flags : if_8086
),
(
@ -1326,7 +1326,7 @@
(
opcode : A_FEMMS;
ops : 0;
optypes : (ot_none,ot_none,ot_none or ot_signed);
optypes : (ot_none,ot_none,ot_none);
code : #2#15#14;
flags : if_pent or if_3dnow
),
@ -2713,7 +2713,7 @@
opcode : A_LLDT;
ops : 1;
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
),
(
@ -2888,7 +2888,7 @@
opcode : A_LTR;
ops : 1;
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
),
(
@ -4532,14 +4532,14 @@
(
opcode : A_PREFETCH;
ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none);
optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#128;
flags : if_pent or if_3dnow or if_sm
),
(
opcode : A_PREFETCHW;
ops : 1;
optypes : (ot_memory,ot_none or ot_signed,ot_none);
optypes : (ot_memory,ot_none,ot_none);
code : #2#15#13#129;
flags : if_pent or if_3dnow or if_sm
),
@ -6003,14 +6003,14 @@
opcode : A_SLDT;
ops : 1;
optypes : (ot_memory,ot_none,ot_none);
code : #192#1#15#15#128;
code : #192#2#15#0#128;
flags : if_286
),
(
opcode : A_SLDT;
ops : 1;
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
),
(
@ -6087,14 +6087,14 @@
opcode : A_STR;
ops : 1;
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
),
(
opcode : A_STR;
ops : 1;
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
),
(
@ -6360,42 +6360,42 @@
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERR;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
opcode : A_VERW;
ops : 1;
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
),
(
@ -10048,14 +10048,14 @@
(
opcode : A_BLENDPS;
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;
flags : if_sse4
),
(
opcode : A_BLENDPS;
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;
flags : if_sse4
),
@ -10209,14 +10209,14 @@
(
opcode : A_PBLENDW;
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;
flags : if_sse4
),
(
opcode : A_PBLENDW;
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;
flags : if_sse4
),