A big update of x86 instruction table, part 1 (mostly SIMD instructions):

* Using ot_mmxrm and ot_xmmrm operand types to match arguments, reduces number of required entries by half.
* Replaced all literal $66, $F2 and $F3 prefixes with control codes (\361, \334 and \333, respectively).
* Prefix control codes imply writing REX, so code \323 after them is no longer necessary, removed.
* Fixed technology flags (SSSE3, SSE4.1, SSE4.2)
- Removed codes \300 and \301 (intended to generate address size prefix). FPC does not support this feature (the prefix itself is generated, but process_ea rejects operands needing non-default address size). Probably we don't even need to support it. But if we do, a much simpler solution is check all operands, like today's NASM does.
* Fixed/added some instructions along the way, namely CRC32, UNPCKHPD, CMPNEQSD.

git-svn-id: trunk@17437 -
This commit is contained in:
sergei 2011-05-12 19:49:19 +00:00
parent de8ae0f873
commit 1d81a1244b
15 changed files with 2394 additions and 7477 deletions

View File

@ -512,6 +512,7 @@
'cmpltpd',
'cmpltsd',
'cmpneqpd',
'cmpneqsd',
'cmpnlepd',
'cmpnlesd',
'cmpnltpd',
@ -666,6 +667,7 @@
'roundpd',
'roundss',
'roundsd',
'crc32',
'pcmpestri',
'pcmpestrm',
'pcmpistri',

View File

@ -530,6 +530,7 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufINT,
attsufNONE,
attsufINT,
@ -666,6 +667,7 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufINT,
attsufNONE,
attsufNONE,
attsufNONE,

View File

@ -512,6 +512,7 @@
'cmpltpd',
'cmpltsd',
'cmpneqpd',
'cmpneqsd',
'cmpnlepd',
'cmpnlesd',
'cmpnltpd',
@ -666,6 +667,7 @@
'roundpd',
'roundss',
'roundsd',
'crc32',
'pcmpestri',
'pcmpestrm',
'pcmpistri',

View File

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

View File

@ -512,6 +512,7 @@ A_CMPLESD,
A_CMPLTPD,
A_CMPLTSD,
A_CMPNEQPD,
A_CMPNEQSD,
A_CMPNLEPD,
A_CMPNLESD,
A_CMPNLTPD,
@ -666,6 +667,7 @@ A_ROUNDPS,
A_ROUNDPD,
A_ROUNDSS,
A_ROUNDSD,
A_CRC32,
A_PCMPESTRI,
A_PCMPESTRM,
A_PCMPISTRI,

View File

@ -522,6 +522,7 @@
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
@ -666,6 +667,7 @@
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_Mop1, Ch_Rop2, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -530,6 +530,7 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufINT,
attsufNONE,
attsufINT,
@ -666,6 +667,7 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
attsufINT,
attsufNONE,
attsufNONE,
attsufNONE,

View File

@ -512,6 +512,7 @@
'cmpltpd',
'cmpltsd',
'cmpneqpd',
'cmpneqsd',
'cmpnlepd',
'cmpnlesd',
'cmpnltpd',
@ -666,6 +667,7 @@
'roundpd',
'roundss',
'roundsd',
'crc32',
'pcmpestri',
'pcmpestrm',
'pcmpistri',

View File

@ -512,6 +512,7 @@
'cmpltpd',
'cmpltsd',
'cmpneqpd',
'cmpneqsd',
'cmpnlepd',
'cmpnlesd',
'cmpnltpd',
@ -666,6 +667,7 @@
'roundpd',
'roundss',
'roundsd',
'crc32',
'pcmpestri',
'pcmpestrm',
'pcmpistri',

View File

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

View File

@ -512,6 +512,7 @@ A_CMPLESD,
A_CMPLTPD,
A_CMPLTSD,
A_CMPNEQPD,
A_CMPNEQSD,
A_CMPNLEPD,
A_CMPNLESD,
A_CMPNLTPD,
@ -666,6 +667,7 @@ A_ROUNDPS,
A_ROUNDPD,
A_ROUNDSS,
A_ROUNDSD,
A_CRC32,
A_PCMPESTRI,
A_PCMPESTRM,
A_PCMPISTRI,

View File

@ -522,6 +522,7 @@
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
(Ch: (Ch_Wop2, Ch_Rop1, Ch_None)),
@ -666,6 +667,7 @@
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_Mop1, Ch_Rop2, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),
(Ch: (Ch_All, Ch_None, Ch_None)),

File diff suppressed because it is too large Load Diff