OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | |
3 * Use of this source code is governed by a BSD-style license that be | |
4 * found in the LICENSE file. | |
5 */ | |
6 | |
7 /* | |
8 * Defines SSE instructions. Taken from: | |
9 * (1) Tables A-3 and A-4 of appendix "A2 - Opcode Encodings", in AMD | |
10 * document 24594-Rev.3.14-September 2007: "AMD64 Architecture | |
11 * Programmer's manual Volume 3: General-Purpose and System Instructions". | |
12 * (2) Table A-4 and A-5 of "appendix A.3", in Intel Document 253667-030US | |
13 * (March 2009): "Intel 64 and IA-32 Architectures Software Developer's | |
14 * Manual, Volume 2g: Instruction Set Reference, N-Z." | |
15 * | |
16 * Note: Invalid etries with f2 (REPNE) and f3 (REP) can be ommitted in | |
17 * the tables, because the corresponding entry without that prefix will | |
18 * be explicitly rejected (unless it is one of the special instructions | |
19 * that allow such prefixes). | |
20 */ | |
21 | |
22 #ifndef NACL_TRUSTED_BUT_NOT_TCB | |
23 #error("This file is not meant for use in the TCB") | |
24 #endif | |
25 | |
26 #include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_for
ms.h" | |
27 #include "native_client/src/trusted/validator/x86/decoder/generator/ncdecode_tab
legen.h" | |
28 | |
29 static void NaClDefBinarySseInsts(struct NaClSymbolTable* st) { | |
30 NaClDefPrefixInstChoices(Prefix0F, 0x12, 2); | |
31 NaClDefPrefixInstChoices(Prefix0F, 0x16, 2); | |
32 NaClDefPrefixInstChoices_32_64(Prefix660F, 0x6e, 1, 2); | |
33 NaClDefPrefixInstChoices_32_64(Prefix660F, 0x7e, 1, 2); | |
34 NaClDefine(" 0f3800: Pshufb $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
35 NaClDefine(" 0f3801: Phaddw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
36 NaClDefine(" 0f3802: Phaddd $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
37 NaClDefine(" 0f3803: Phaddsw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
38 NaClDefine(" 0f3804: Pmaddubsw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
39 NaClDefine(" 0f3805: Phsubw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
40 NaClDefine(" 0f3806: Phsubd $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
41 NaClDefine(" 0f3807: Phsubsw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
42 NaClDefine(" 0f3808: Psignb $Pq $Qq", NACLi_SSSE3, st, Binary); | |
43 NaClDefine(" 0f3809: Psignw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
44 NaClDefine(" 0f380a: Psignd $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
45 NaClDefine(" 0f380b: Pmulhrsw $Pq, $Qq", NACLi_SSSE3, st, Binary); | |
46 NaClDefIter(" 0f380c+@i: Invalid", 0, 15, NACLi_INVALID, st, Other); | |
47 NaClDefine(" 0f381c: Pabsb $Pq, $Qq", NACLi_SSSE3, st, Move); | |
48 NaClDefine(" 0f381d: Pabsw $Pq, $Qq", NACLi_SSSE3, st, Move); | |
49 NaClDefine(" 0f381e: Pabsd $Pq, $Qq", NACLi_SSSE3, st, Move); | |
50 NaClDefIter(" 0f381f+@i: Invalid", 0, 208, NACLi_INVALID, st, Other); | |
51 NaClDefine(" 0f38f0: Movbe $Gv, $Mv", NACLi_MOVBE, st, Move); | |
52 NaClDefine(" 0f38f1: Movbe $Mv, $Gv", NACLi_MOVBE, st, Move); | |
53 NaClDefIter(" 0f38f2+@i: Invalid", 0, 13, NACLi_INVALID, st, Other); | |
54 NaClDefine(" 660f3800: Pshufb $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
55 NaClDefine(" 660f3801: Phaddw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
56 NaClDefine(" 660f3802: Phaddd $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
57 NaClDefine(" 660f3803: Phaddsw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
58 NaClDefine(" 660f3804: Pmaddubsw $Vdq, $Wdq",NACLi_SSSE3, st, Binary); | |
59 NaClDefine(" 660f3805: Phsubw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
60 NaClDefine(" 660f3806: Phsubd $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
61 NaClDefine(" 660f3807: Phsubsw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
62 NaClDefine(" 660f3808: Psignb $Vdq $Wdq", NACLi_SSSE3, st, Binary); | |
63 NaClDefine(" 660f3809: Psignw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
64 NaClDefine(" 660f380a: Psignd $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
65 NaClDefine(" 660f380b: Pmulhrsw $Vdq, $Wdq", NACLi_SSSE3, st, Binary); | |
66 NaClDefIter("660f380C+@i: Invalid", 0, 3, NACLi_INVALID, st, Other); | |
67 NaClDefine(" 660f3810: Pblendvb $Vdq, $Wdq, %xmm0", | |
68 NACLi_SSE41, st, Binary); | |
69 NaClDefIter("660f3811+@i: Invalid", 0, 2, NACLi_INVALID, st, Other); | |
70 NaClDefine(" 660f3814: Blendvps $Vdq, $Wdq, %xmm0", | |
71 NACLi_SSE41, st, Binary); | |
72 NaClDefine(" 660f3815: Blendvpd $Vdq, $Wdq, %xmm0", | |
73 NACLi_SSE41, st, Binary); | |
74 NaClDefine(" 660f3816: Invalid", NACLi_INVALID, st, Other); | |
75 NaClDefine(" 660f3817: Ptest $Vdq, $Wdq", NACLi_SSE41, st, Compare); | |
76 NaClDefIter("660f3818+@i: Invalid", 0, 3, NACLi_INVALID, st, Other); | |
77 NaClDefine(" 660f381c: Pabsb $Vdq, $Wdq", NACLi_SSSE3, st, Move); | |
78 NaClDefine(" 660f381d: Pabsw $Vdq, $Wdq", NACLi_SSSE3, st, Move); | |
79 NaClDefine(" 660f381e: Pabsd $Vdq, $Wdq", NACLi_SSSE3, st, Move); | |
80 NaClDefine(" 660f381f: Invalid", NACLi_INVALID, st, Other); | |
81 NaClDefine(" 660f3820: Pmovsxbw $Vdq, $Udq/Mq", | |
82 NACLi_SSE41, st, Move); | |
83 NaClDefine(" 660f3821: Pmovsxbd $Vdq, $Udq/Md", | |
84 NACLi_SSE41, st, Move); | |
85 NaClDefine(" 660f3822: Pmovsxbq $Vdq, $Udq/Mw", | |
86 NACLi_SSE41, st, Move); | |
87 NaClDefine(" 660f3823: Pmovsxwd $Vdq, $Udq/Mq", | |
88 NACLi_SSE41, st, Move); | |
89 NaClDefine(" 660f3824: Pmovsxwq $Vdq, $Udq/Md", | |
90 NACLi_SSE41, st, Move); | |
91 NaClDefine(" 660f3825: Pmovsxdq $Vdq, $Udq/Mq", | |
92 NACLi_SSE41, st, Move); | |
93 NaClDefIter("660f3826+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
94 NaClDefine(" 660f3828: Pmuldq $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
95 NaClDefine(" 660f3829: Pcmpeqq $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
96 NaClDefine(" 660f382a: Movntdqa $Vdq, $Mdq", NACLi_SSE41, st, Move); | |
97 NaClDefine(" 660f382b: Packusdw $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
98 NaClDefIter("660f382c+@i: Invalid", 0, 3, NACLi_INVALID, st, Other); | |
99 NaClDefine(" 660f3830: Pmovzxbw $Vdq, $Udq/Mq", | |
100 NACLi_SSE41, st, Move); | |
101 NaClDefine(" 660f3831: Pmovzxbd $Vdq, $Udq/Md", | |
102 NACLi_SSE41, st, Move); | |
103 NaClDefine(" 660f3832: Pmovzxbq $Vdq, $Udq/Mw", | |
104 NACLi_SSE41, st, Move); | |
105 NaClDefine(" 660f3833: Pmovzxwd $Vdq, $Udq/Mq", | |
106 NACLi_SSE41, st, Move); | |
107 NaClDefine(" 660f3834: Pmovzxwq $Vdq, $Udq/Md", | |
108 NACLi_SSE41, st, Move); | |
109 NaClDefine(" 660f3835: Pmovzxdq $Vdq, $Udq/Mq", | |
110 NACLi_SSE41, st, Move); | |
111 NaClDefine(" 660f3836: Invalid", NACLi_INVALID, st, Other); | |
112 NaClDefine(" 660f3837: Pcmpgtq $Vdq, $Wdq", NACLi_SSE42, st, Binary); | |
113 NaClDefine(" 660f3838: Pminsb $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
114 NaClDefine(" 660f3839: Pminsd $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
115 NaClDefine(" 660f383a: Pminuw $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
116 NaClDefine(" 660f383b: Pminud $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
117 NaClDefine(" 660f383c: Pmaxsb $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
118 NaClDefine(" 660f383d: Pmaxsd $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
119 NaClDefine(" 660f383e: Pmaxuw $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
120 NaClDefine(" 660f383f: Pmaxud $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
121 NaClDefine(" 660f3840: Pmulld $Vdq, $Wdq", NACLi_SSE41, st, Binary); | |
122 NaClDefine(" 660f3841: Phminposuw $Vdq, $Wdq", | |
123 NACLi_SSE41, st, Binary); | |
124 NaClDefIter("660f3842+@i: Invalid", 0, 61, NACLi_INVALID, st, Other); | |
125 NaClDef_32(" 660f3880: Invept $Gd, $Mdq", NACLi_VMX, st, Uses); | |
126 NaClDef_64(" 660f3880: Invept $Gq, $Mdq", NACLi_VMX, st, Uses); | |
127 NaClDef_32(" 660f3881: Invvpid $Gd, $Mdq", NACLi_VMX, st, Uses); | |
128 NaClDef_64(" 660f3881: Invvpid $Gq, $Mdq", NACLi_VMX, st, Uses); | |
129 NaClDefIter("660f3882+@i: Invalid", 0, 109, NACLi_INVALID, st, Other); | |
130 NaClDefIter("660f38f2+@i: Invalid", 0, 13, NACLi_INVALID, st, Other); | |
131 NaClDefine(" f20f38f0: Crc32 $Gd, $Eb", NACLi_SSE42, st, Binary); | |
132 NaClDefine(" f20f38f1: Crc32 $Gd, $Ev", NACLi_SSE42, st, Binary); | |
133 NaClDefine(" 0f10: Movups $Vps, $Wps", NACLi_SSE, st, Move); | |
134 NaClDefine(" 0f11: Movups $Wps, $Vps", NACLi_SSE, st, Move); | |
135 NaClDefine(" 0f12: Movlps $Vps, $Mq", NACLi_SSE, st, Move); | |
136 NaClDefine(" 0f12: Movhlps $Vps, $VRq", NACLi_SSE, st, Move); | |
137 NaClDefine(" 0f13: Movlps $Mq, $Vps", NACLi_SSE, st, Move); | |
138 NaClDefine(" 0f14: Unpcklps $Vps, $Wq", NACLi_SSE, st, Binary); | |
139 NaClDefine(" 0f15: Unpckhps $Vps, $Wq", NACLi_SSE, st, Binary); | |
140 NaClDefine(" 0f16: Movhps $Vps, $Mq", NACLi_SSE, st, Move); | |
141 NaClDefine(" 0f16: Movlhps $Vps, $VRq", NACLi_SSE, st, Move); | |
142 NaClDefine(" 0f17: Movhps $Mq, $Vps", NACLi_SSE, st, Move); | |
143 NaClDefine(" f30f10: Movss $Vss, $Wss", NACLi_SSE, st, Move); | |
144 NaClDefine(" f30f11: Movss $Wss, $Vss", NACLi_SSE, st, Move); | |
145 NaClDefine(" f30f12: Movsldup $Vps, $Wps", NACLi_SSE3, st, Move); | |
146 NaClDefIter(" f30f13+@i: Invalid", 0, 2, NACLi_INVALID, st, Other); | |
147 NaClDefine(" f30f16: Movshdup $Vps, $Wps", NACLi_SSE3, st, Move); | |
148 NaClDefine(" f30f17: Invalid", NACLi_INVALID, st, Other); | |
149 NaClDefine(" 660f10: Movupd $Vpd, $Wpd", NACLi_SSE2, st, Move); | |
150 NaClDefine(" 660f11: Movupd $Wpd, $Vpd", NACLi_SSE2, st, Move); | |
151 NaClDefine(" 660f12: Movlpd $Vsd, $Mq", NACLi_SSE2, st, Move); | |
152 NaClDefine(" 660f13: Movlpd $Mq, $Vsd", NACLi_SSE2, st, Move); | |
153 NaClDefine(" 660f14: Unpcklpd $Vpd, $Wq", NACLi_SSE2, st, Binary); | |
154 NaClDefine(" 660f15: Unpckhpd $Vpd, $Wq", NACLi_SSE2, st, Binary); | |
155 NaClDefine(" 660f16: Movhpd $Vsd, $Mq", NACLi_SSE2, st, Move); | |
156 NaClDefine(" 660f17: Movhpd $Mq, $Vsd", NACLi_SSE2, st, Move); | |
157 NaClDefine(" f20f10: Movsd $Vsd, $Wsd", NACLi_SSE2, st, Move); | |
158 NaClDefine( "f20f11: Movsd $Wsd, $Vsd", NACLi_SSE2, st, Move); | |
159 NaClDefine(" f20f12: Movddup $Vpd, $Wsd", NACLi_SSE3, st, Move); | |
160 NaClDefine(" 0f28: Movaps $Vps, $Wps", NACLi_SSE, st, Move); | |
161 NaClDefine(" 0f29: Movaps $Wps, $Vps", NACLi_SSE, st, Move); | |
162 NaClDefine(" 0f2a: Cvtpi2ps $Vps, $Qq", NACLi_SSE, st, Move); | |
163 NaClDefine(" 0f2b: Movntps $Mdq, $Vps", NACLi_SSE, st, Move); | |
164 NaClDefine(" 0f2c: Cvttps2pi $Pq, $Wps", NACLi_SSE, st, Move); | |
165 NaClDefine(" 0f2d: Cvtps2pi $Pq, $Wps", NACLi_SSE, st, Move); | |
166 NaClDefine(" 0f2e: Ucomiss $Vss, $Wss", NACLi_SSE, st, Compare); | |
167 NaClDefine(" 0f2f: Comiss $Vps, $Wps", NACLi_SSE, st, Compare); | |
168 NaClDefIter(" f30f28+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
169 NaClDefine(" f30f2a: Cvtsi2ss $Vss, $Ed/q",NACLi_SSE, st, Move); | |
170 NaClDefine(" f30f2b: Movntss $Md, $Vss", NACLi_SSE4A, st, Move); | |
171 NaClDefine(" f30f2c: Cvttss2si $Gd/q, $Wss", | |
172 NACLi_SSE, st, Move); | |
173 NaClDefine(" f30f2d: Cvtss2si $Gd/q, $Wss", | |
174 NACLi_SSE, st, Move); | |
175 NaClDefIter(" f30f2e+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
176 NaClDefine(" 660f28: Movapd $Vpd, $Wpd", NACLi_SSE2, st, Move); | |
177 NaClDefine(" 660f29: Movapd $Wpd, $Vpd", NACLi_SSE2, st, Move); | |
178 NaClDefine(" 660f2a: Cvtpi2pd $Vpd, $Qq", NACLi_SSE2, st, Move); | |
179 NaClDefine(" 660f2b: Movntpd $Mdq, $Vpd", NACLi_SSE2, st, Move); | |
180 NaClDefine(" 660f2c: Cvttpd2pi $Pq, $Wpd", | |
181 NACLi_SSE2, st, Move); | |
182 NaClDefine(" 660f2d: Cvtpd2pi $Pq, $Wpd", | |
183 NACLi_SSE2, st, Move); | |
184 NaClDefine(" 660f2e: Ucomisd $Vsd, $Wsd", NACLi_SSE2, st, Compare); | |
185 NaClDefine(" 660f2f: Comisd $Vpd, $Wsd", NACLi_SSE2, st, Compare); | |
186 NaClDefIter(" f20f28+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
187 NaClDefine(" f20f2a: Cvtsi2sd $Vsd, $Ed/q", | |
188 NACLi_SSE2, st, Move); | |
189 NaClDefine(" f20f2b: Movntsd $Mq, $Vsd", NACLi_SSE4A, st, Move); | |
190 NaClDefine(" f20f2c: Cvttsd2si $Gd/q, $Wsd", | |
191 NACLi_SSE2, st, Move); | |
192 NaClDefine(" f20f2d: Cvtsd2si $Gd/q, $Wsd", | |
193 NACLi_SSE2, st, Move); | |
194 NaClDefIter(" f20f2e+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
195 NaClDefine(" 0f50: Movmskps $Gd, $VRps", NACLi_SSE, st, Move); | |
196 NaClDefine(" 0f51: Sqrtps $Vps, $Wps", NACLi_SSE, st, Move); | |
197 NaClDefine(" 0f52: Rsqrtps $Vps, $Wps", NACLi_SSE, st, Move); | |
198 NaClDefine(" 0f53: Rcpps $Vps, $Wps", NACLi_SSE, st, Move); | |
199 NaClDefine(" 0f54: Andps $Vps, $Wps", NACLi_SSE, st, Binary); | |
200 NaClDefine(" 0f55: Andnps $Vps, $Wps", NACLi_SSE, st, Binary); | |
201 NaClDefine(" 0f56: Orps $Vps, $Wps", NACLi_SSE, st, Binary); | |
202 NaClDefine(" 0f57: Xorps $Vps, $Wps", NACLi_SSE, st, Binary); | |
203 NaClDefine(" f30f50: Invalid", NACLi_INVALID, st, Other); | |
204 NaClDefine(" f30f51: Sqrtss $Vps, $Wps", NACLi_SSE, st, Move); | |
205 NaClDefine(" f30f52: Rsqrtss $Vss, $Wss", NACLi_SSE, st, Move); | |
206 NaClDefine(" f30f53: Rcpss $Vss, $Wss", NACLi_SSE, st, Move); | |
207 NaClDefIter(" f30f54+@i: Invalid", 0, 3, NACLi_INVALID, st, Other); | |
208 NaClDefine(" 660f50: Movmskpd $Gd, $VRpd", NACLi_SSE2, st, Move); | |
209 NaClDefine(" 660f51: Sqrtpd $Vps, $Wpd", NACLi_SSE2, st, Move); | |
210 NaClDefIter(" 660f52+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
211 NaClDefine(" 660f54: Andpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
212 NaClDefine(" 660f55: Andnpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
213 NaClDefine(" 660f56: Orpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
214 NaClDefine(" 660f57: Xorpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
215 NaClDefine(" f20f50: Invalid", NACLi_INVALID, st, Other); | |
216 NaClDefine(" f20f51: Sqrtsd $Vsd, $Wsd", NACLi_SSE2, st, Move); | |
217 NaClDefIter(" f20f52+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
218 NaClDefine(" 0f58: Addps $Vps, $Wps", NACLi_SSE, st, Binary); | |
219 NaClDefine(" 0f59: Mulps $Vps, $Wps", NACLi_SSE, st, Binary); | |
220 NaClDefine(" 0f5a: Cvtps2pd $Vpd, $Wps", NACLi_SSE2, st, Move); | |
221 NaClDefine(" 0f5b: Cvtdq2ps $Vps, $Wdq", NACLi_SSE2, st, Move); | |
222 NaClDefine(" 0f5c: Subps $Vps, $Wps", NACLi_SSE, st, Binary); | |
223 NaClDefine(" 0f5d: Minps $Vps, $Wps", NACLi_SSE, st, Binary); | |
224 NaClDefine(" 0f5e: Divps $Vps, $Wps", NACLi_SSE, st, Binary); | |
225 NaClDefine(" 0f5f: Maxps $Vps, $Wps", NACLi_SSE, st, Binary); | |
226 NaClDefine(" f30f58: Addss $Vss, $Wss", NACLi_SSE, st, Binary); | |
227 NaClDefine(" f30f59: Mulss $Vss, $Wss", NACLi_SSE, st, Binary); | |
228 NaClDefine(" f30f5a: Cvtss2sd $Vsd, $Wss", NACLi_SSE2, st, Move); | |
229 NaClDefine(" f30f5b: Cvttps2dq $Vdq, $Wps", | |
230 NACLi_SSE2, st, Move); | |
231 NaClDefine(" f30f5c: Subss $Vss, $Wss", NACLi_SSE, st, Binary); | |
232 NaClDefine(" f30f5d: Minss $Vss, $Wss", NACLi_SSE, st, Binary); | |
233 NaClDefine(" f30f5e: Divss $Vss, $Wss", NACLi_SSE, st, Binary); | |
234 NaClDefine(" f30f5f: Maxss $Vss, $Wss", NACLi_SSE, st, Binary); | |
235 NaClDefine(" 660f58: Addpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
236 NaClDefine(" 660f59: Mulpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
237 NaClDefine(" 660f5a: Cvtpd2ps $Vps, $Wpd", NACLi_SSE2, st, Move); | |
238 NaClDefine(" 660f5b: Cvtps2dq $Vdq, $Wps", NACLi_SSE2, st, Move); | |
239 NaClDefine(" 660f5c: Subpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
240 NaClDefine(" 660f5d: Minpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
241 NaClDefine(" 660f5e: Divpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
242 NaClDefine(" 660f5f: Maxpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
243 NaClDefine(" f20f58: Addsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
244 NaClDefine(" f20f59: Mulsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
245 NaClDefine(" f20f5a: Cvtsd2ss $Vss, $Wsd", NACLi_SSE2, st, Move); | |
246 NaClDefine(" f20f5b: Invalid", NACLi_INVALID, st, Other); | |
247 NaClDefine(" f20f5c: Subsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
248 NaClDefine(" f20f5d: Minsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
249 NaClDefine(" f20f5e: Divsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
250 NaClDefine(" f20f5f: Maxsd $Vsd, $Wsd", NACLi_SSE2, st, Binary); | |
251 NaClDefine(" 660f60: Punpcklbw $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
252 NaClDefine(" 660f61: Punpcklwd $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
253 NaClDefine(" 660f62: Punpckldq $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
254 NaClDefine(" 660f63: Packsswb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
255 NaClDefine(" 660f64: Pcmpgtb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
256 NaClDefine(" 660f65: Pcmpgtw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
257 NaClDefine(" 660f66: Pcmpgtd $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
258 NaClDefine(" 660f67: Packuswb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
259 NaClDefIter(" f20f60+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
260 NaClDefIter(" f30f60+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
261 NaClDefIter(" f30f68+@i: Invalid", 0, 6, NACLi_INVALID, st, Other); | |
262 NaClDefine(" f30f6f: Movdqu $Vdq, $Wdq", NACLi_SSE2, st, Move); | |
263 NaClDefine(" 660f68: Punpckhbw $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
264 NaClDefine(" 660f69: Punpckhwd $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
265 NaClDefine(" 660f6a: Punpckhdq $Vdq, $Wq", NACLi_SSE2, st, Binary); | |
266 NaClDefine(" 660f6b: Packssdw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
267 NaClDefine(" 660f6c: Punpcklqdq $Vdq, $Wq", | |
268 NACLi_SSE2, st, Binary); | |
269 NaClDefine(" 660f6d: Punpckhqdq $Vdq, $Wq", | |
270 NACLi_SSE2, st, Binary); | |
271 NaClDefine(" 660f6e: Movd $Vdq, $Ed/q/d", NACLi_SSE2, st, Move); | |
272 NaClDef_64(" 660f6e: Movq $Vdq, $Ed/q/q", NACLi_SSE2, st, Move); | |
273 NaClDefine(" 660f6f: Movdqa $Vdq, $Wdq", NACLi_SSE2, st, Move); | |
274 NaClDefIter(" f20f68+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
275 NaClDefine(" 660f70: Pshufd $Vdq, $Wdq, $Ib", | |
276 NACLi_SSE2, st, Binary); | |
277 NaClDefIter(" 660f71/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
278 NaClDefine(" 660f71/2: Psrlw $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
279 NaClDefine(" 660f71/3: Invalid", NACLi_INVALID, st, Other); | |
280 NaClDefine(" 660f71/4: Psraw $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
281 NaClDefine(" 660f71/5: Invalid", NACLi_INVALID, st, Other); | |
282 NaClDefine(" 660f71/6: Psllw $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
283 NaClDefine(" 660f71/7: Invalid", NACLi_INVALID, st, Other); | |
284 NaClDefIter(" 660f72/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
285 NaClDefine(" 660f72/2: Psrld $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
286 NaClDefine(" 660f72/3: Invalid", NACLi_INVALID, st, Other); | |
287 NaClDefine(" 660f72/4: Psrad $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
288 NaClDefine(" 660f72/5: Invalid", NACLi_INVALID, st, Other); | |
289 NaClDefine(" 660f72/6: Pslld $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
290 NaClDefine(" 660f72/7: Invalid", NACLi_INVALID, st, Other); | |
291 NaClDefIter(" 660f73/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
292 NaClDefine(" 660f73/2: Psrlq $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
293 NaClDefine(" 660f73/3: Psrldq $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
294 NaClDefIter(" 660f73/@i: Invalid", 4, 5, NACLi_INVALID, st, Other); | |
295 NaClDefine(" 660f73/6: Psllq $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
296 NaClDefine(" 660f73/7: Pslldq $VRdq, $Ib", NACLi_SSE2, st, Binary); | |
297 NaClDefine(" 660f74: Pcmpeqb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
298 NaClDefine(" 660f75: Pcmpeqw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
299 NaClDefine(" 660f76: Pcmpeqd $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
300 NaClDefine(" 660f77: Invalid", NACLi_INVALID, st, Other); | |
301 NaClDefine(" f20f70: Pshuflw $Vq, $Wq, $Ib", | |
302 NACLi_SSE2, st, Binary); | |
303 NaClDefIter(" f20f71+@i: Invalid", 0, 6, NACLi_INVALID, st, Other); | |
304 NaClDefine(" f30f70: Pshufhw $Vq, $Wq, $Ib", | |
305 NACLi_SSE2, st, Binary); | |
306 NaClDefIter(" f30f71+@i: Invalid", 0, 6, NACLi_INVALID, st, Other); | |
307 NaClBegDef(" 660f78/0: Extrq $Vdq, $Ib, $Ib",NACLi_SSE4A, st); | |
308 NaClAddOpFlags(0, NACL_OPFLAG(AllowGOperandWithOpcodeInModRm)); | |
309 NaClEndDef( Nary); | |
310 NaClDefine(" 660f78/r: Invalid", NACLi_INVALID, st, Other); | |
311 NaClDefine(" 660f79: Extrq $Vdq, $VRdq", NACLi_SSE4A, st, Binary); | |
312 NaClDefIter(" 660f7a+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
313 NaClDefine(" 660f7c: Haddpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
314 NaClDefine(" 660f7d: Hsubpd $Vpd, $Wpd", NACLi_SSE2, st, Binary); | |
315 NaClDefine(" 660f7e: Movd $Ed/q/d, $Vd/q/d", | |
316 NACLi_SSE2, st, Move); | |
317 NaClDef_64(" 660f7e: Movq $Ed/q/q, $Vd/q/q", | |
318 NACLi_SSE2, st, Move); | |
319 NaClDefine(" 660f7f: Movdqa $Wdq, $Vdq", NACLi_SSE2, st, Move); | |
320 NaClDefine(" f20f78: Insertq $Vdq, $VRq, $Ib, $Ib", | |
321 NACLi_SSE4A, st, Nary); | |
322 NaClDefine(" f20f79: Insertq $Vdq, $VRdq", NACLi_SSE4A, st, Binary); | |
323 NaClDefIter(" f20f7a+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
324 NaClDefine(" f20f7c: Haddps $Vps, $Wps", NACLi_SSE3, st, Binary); | |
325 NaClDefine(" f20f7d: Hsubps $Vps, $Wps", NACLi_SSE3, st, Binary); | |
326 NaClDefIter(" f20f7e+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
327 NaClDefIter(" f30f78+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
328 NaClDefine(" f30f7e: Movq $Vq, $Wq", NACLi_SSE2, st, Move); | |
329 NaClDefine(" f30f7f: Movdqu $Wdq, $Vdq", NACLi_SSE2, st, Move); | |
330 NaClDefIter(" f20fb8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
331 NaClDefine(" f30fb8: Popcnt $Gv, $Ev", NACLi_POPCNT, st, Move); | |
332 NaClDefIter(" f30fb9+@i: Invalid", 0, 2, NACLi_INVALID, st, Other); | |
333 /* tzcnt is treated as a bsf on machines that don't have tzcnt. | |
334 * Hence, even though its conditional on NACLi_LZCNT, we act | |
335 * like it can be used on all processors. | |
336 */ | |
337 NaClDefine(" f30fbc: Tzcnt $Gv, $Ev", NACLi_386, st, Move); | |
338 /* lzcnt is treated as a bsr on machines that don't have lzcnt. | |
339 * Hence, even though its conditional on NACLi_LZCNT, we act | |
340 * like it can be used on all processors. | |
341 */ | |
342 NaClDefine(" f30fbd: Lzcnt $Gv, $Ev", NACLi_386, st, Move); | |
343 NaClDefIter(" f30fbe+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
344 NaClDefine(" 0fc2: Cmpps $Vps, $Wps, $Ib", | |
345 NACLi_SSE, st, Nary); | |
346 NaClDefine(" 0fc3: Movnti $Md/q $Gd/q", NACLi_SSE2, st, Move); | |
347 /* Note: Pinsrw follows Intel's table, not ADM, which uses: | |
348 * Pinsrw $Pq, $Ew, $Ib | |
349 */ | |
350 NaClDefine(" 0fc4: Pinsrw $Pq, $Rd/q/Mw, $Ib", | |
351 NACLi_SSE, st, Nary); | |
352 NaClDefine(" 0fc5: Pextrw $Gd, $PRq, $Ib", | |
353 NACLi_SSE41, st, Move); | |
354 NaClDefine(" 0fc6: Shufps $Vps, $Wps, $Ib", | |
355 NACLi_SSE, st, Nary); | |
356 NaClDefine(" 660fc2: Cmppd $Vpd, $Wpd, $Ib", | |
357 NACLi_SSE2, st, Nary); | |
358 NaClDefine(" 660fc3: Invalid", NACLi_INVALID, st, Other); | |
359 /* Note: Pinsrw follows Intel's table, not ADM, which uses: | |
360 * Pinsrw $Vdq, $Ew, $Ib | |
361 */ | |
362 NaClDefine(" 660fc4: Pinsrw $Vdq, $Rd/q/Mw, $Ib", | |
363 NACLi_SSE, st, Binary); | |
364 NaClDefine(" 660fc5: Pextrw $Gd $VRdq, $Ib", | |
365 NACLi_SSE41, st, Binary); | |
366 NaClDefine(" 660fc6: Shufpd $Vpd, $Wpd, $Ib", | |
367 NACLi_SSE2, st, Nary); | |
368 NaClDefine(" f20fc2: Cmpsd_xmm $Vsd, $Wsd, $Ib", | |
369 NACLi_SSE2, st, Nary); | |
370 NaClDefine(" f20fc3: Invalid", NACLi_INVALID, st, Other); | |
371 NaClDefine(" f20fc4: Invalid", NACLi_INVALID, st, Other); | |
372 NaClDefine(" f20fc5: Invalid", NACLi_INVALID, st, Other); | |
373 NaClDefine(" f20fc6: Invalid", NACLi_INVALID, st, Other); | |
374 NaClDefine(" f30fc2: Cmpss $Vss, $Wss, $Ib", | |
375 NACLi_SSE, st, Nary); | |
376 NaClDefine(" f30fc3: Invalid", NACLi_INVALID, st, Other); | |
377 NaClDefine(" f30fc4: Invalid", NACLi_INVALID, st, Other); | |
378 NaClDefine(" f30fc5: Invalid", NACLi_INVALID, st, Other); | |
379 NaClDefine(" f30fc6: Invalid", NACLi_INVALID, st, Other); | |
380 NaClDefine(" f20fd0: Addsubps $Vpd, $Wpd", NACLi_SSE3, st, Binary); | |
381 NaClDefIter(" f20fd1+@i: Invalid", 0, 4, NACLi_INVALID, st, Other); | |
382 NaClDefine(" f20fd6: Movdq2q $Pq, $VRq", NACLi_SSE2, st, Move); | |
383 NaClDefine(" f20fd7: Invalid", NACLi_INVALID, st, Other); | |
384 NaClDefIter(" f30fd0+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
385 NaClDefine(" f30fd6: Movq2dq $Vdq, $PRq", NACLi_SSE2, st, Move); | |
386 NaClDefine(" f30fd7: Invalid", NACLi_INVALID, st, Other); | |
387 NaClDefine(" 660fd0: Addsubpd $Vpd, $Wpd", NACLi_SSE3, st, Binary); | |
388 NaClDefine(" 660fd1: Psrlw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
389 NaClDefine(" 660fd2: Psrld $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
390 NaClDefine(" 660fd3: Psrlq $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
391 NaClDefine(" 660fd4: Paddq $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
392 NaClDefine(" 660fd5: Pmullw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
393 NaClDefine(" 660fd6: Movq $Wq, $Vq", NACLi_SSE2, st, Move); | |
394 NaClDefine(" 660fd7: Pmovmskb $Gd, $VRdq", NACLi_SSE2, st, Move); | |
395 NaClDefine(" 660fd8: Psubusb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
396 NaClDefine(" 660fd9: Psubusw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
397 NaClDefine(" 660fda: Pminub $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
398 NaClDefine(" 660fdb: Pand $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
399 NaClDefine(" 660fdc: Paddusb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
400 NaClDefine(" 660fdd: Paddusw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
401 NaClDefine(" 660fde: Pmaxub $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
402 NaClDefine(" 660fdf: Pandn $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
403 NaClDefIter(" f20fd8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
404 NaClDefIter(" f30fd8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
405 NaClDefine(" 660fe0: Pavgb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
406 NaClDefine(" 660fe1: Psraw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
407 NaClDefine(" 660fe2: Psrad $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
408 NaClDefine(" 660fe3: Pavgw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
409 NaClDefine(" 660fe4: Pmulhuw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
410 NaClDefine(" 660fe5: Pmulhw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
411 NaClDefine(" 660fe6: Cvttpd2dq $Vq, $Wdq", NACLi_SSE2, st, Move); | |
412 NaClDefine(" 660fe7: Movntdq $Mdq, $Vdq", NACLi_SSE2, st, Move); | |
413 NaClDefIter(" f30fe0+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
414 NaClDefine(" f30fe6: Cvtdq2pd $Vpd, $Wq", NACLi_SSE2, st, Move); | |
415 NaClDefine(" f30fe7: Invalid", NACLi_INVALID, st, Other); | |
416 NaClDefIter(" f20fe0+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
417 NaClDefine(" f20fe6: Cvtpd2dq $Vq, $Wpd", NACLi_SSE2, st, Move); | |
418 NaClDefine(" f20fe7: Invalid", NACLi_INVALID, st, Other); | |
419 NaClDefine(" 660fe8: Psubsb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
420 NaClDefine(" 660fe9: Psubsw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
421 NaClDefine(" 660fea: Pminsw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
422 NaClDefine(" 660feb: Por $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
423 NaClDefine(" 660fec: Paddsb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
424 NaClDefine(" 660fed: Paddsw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
425 NaClDefine(" 660fee: Pmaxsw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
426 NaClDefine(" 660fef: Pxor $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
427 NaClDefIter(" f20fe8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
428 NaClDefIter(" f30fe8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
429 NaClDefine(" 660ff0: Invalid", NACLi_INVALID, st, Other); | |
430 NaClDefine(" 660ff1: Psllw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
431 NaClDefine(" 660ff2: Pslld $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
432 NaClDefine(" 660ff3: Psllq $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
433 NaClDefine(" 660ff4: Pmuludq $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
434 NaClDefine(" 660ff5: Pmaddwd $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
435 NaClDefine(" 660ff6: Psadbw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
436 NaClDefine(" 660ff7: Maskmovdqu {$Zvd}, $Vdq, $VRdq", | |
437 NACLi_SSE2, st, Binary); | |
438 NaClDefine(" f20ff0: Lddqu $Vdq, $Mdq", NACLi_SSE3, st, Move); | |
439 NaClDefIter(" f20ff1+@i: Invalid", 0, 6, NACLi_INVALID, st, Other); | |
440 NaClDefIter(" f30ff0+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
441 NaClDefine(" 660ff8: Psubb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
442 NaClDefine(" 660ff9: Psubw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
443 NaClDefine(" 660ffa: Psubd $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
444 NaClDefine(" 660ffb: Psubq $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
445 NaClDefine(" 660ffc: Paddb $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
446 NaClDefine(" 660ffd: Paddw $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
447 NaClDefine(" 660ffe: Paddd $Vdq, $Wdq", NACLi_SSE2, st, Binary); | |
448 NaClDefine(" 660fff: Invalid", NACLi_INVALID, st, Other); | |
449 NaClDefIter(" f20ff8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
450 NaClDefIter(" f30ff8+@i: Invalid", 0, 7, NACLi_INVALID, st, Other); | |
451 } | |
452 | |
453 static void NaClDefMmxInsts(struct NaClSymbolTable* st) { | |
454 NaClDefPrefixInstChoices_32_64(Prefix0F, 0x6e, 1, 2); | |
455 NaClDefPrefixInstChoices_32_64(Prefix0F, 0x7e, 1, 2); | |
456 NaClDefine(" 0f60: Punpcklbw $Pq, $Qq", NACLi_MMX, st, Binary); | |
457 NaClDefine(" 0f61: Punpcklwd $Pq, $Qq", NACLi_MMX, st, Binary); | |
458 NaClDefine(" 0f62: Punpckldq $Pq, $Qq", NACLi_MMX, st, Binary); | |
459 NaClDefine(" 0f63: Packsswb $Pq, $Qq", NACLi_MMX, st, Binary); | |
460 NaClDefine(" 0f64: Pcmpgtb $Pq, $Qq", NACLi_MMX, st, Binary); | |
461 NaClDefine(" 0f65: Pcmpgtw $Pq, $Qq", NACLi_MMX, st, Binary); | |
462 NaClDefine(" 0f66: Pcmpgtd $Pq, $Qq", NACLi_MMX, st, Binary); | |
463 NaClDefine(" 0f67: Packuswb $Pq, $Qq", NACLi_MMX, st, Binary); | |
464 NaClDefine(" 0f68: Punpckhbw $Pq, $Qd", NACLi_MMX, st, Binary); | |
465 NaClDefine(" 0f69: Punpckhwd $Pq, $Qd", NACLi_MMX, st, Binary); | |
466 NaClDefine(" 0f6a: Punpckhdq $Pq, $Qd", NACLi_MMX, st, Binary); | |
467 NaClDefine(" 0f6b: Packssdw $Pq, $Qq", NACLi_MMX, st, Binary); | |
468 NaClDefIter(" 0f6c+@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
469 NaClDefine(" 0f6e: Movd $Pq, $Ed/q/d", NACLi_MMX, st, Move); | |
470 NaClDef_64(" 0f6e: Movq $Pq, $Ed/q/q", NACLi_MMX, st, Move); | |
471 NaClDefine(" 0f6f: Movq $Pq, $Qq", NACLi_MMX, st, Move); | |
472 NaClDefine(" 0f70: Pshufw $Pq, $Qq, $Ib",NACLi_MMX, st, Binary); | |
473 NaClDefIter(" 0f71/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
474 NaClDefine(" 0f71/2: Psrlw $PRq, $Ib", NACLi_MMX, st, Binary); | |
475 NaClDefine(" 0f71/3: Invalid", NACLi_INVALID, st, Other); | |
476 NaClDefine(" 0f71/4: Psraw $PRq, $Ib", NACLi_MMX, st, Binary); | |
477 NaClDefine(" 0f71/5: Invalid", NACLi_INVALID, st, Other); | |
478 NaClDefine(" 0f71/6: Psllw $PRq, $Ib", NACLi_MMX, st, Binary); | |
479 NaClDefine(" 0f71/7: Invalid", NACLi_INVALID, st, Other); | |
480 NaClDefIter(" 0f72/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
481 NaClDefine(" 0f72/2: Psrld $PRq, $Ib", NACLi_MMX, st, Binary); | |
482 NaClDefine(" 0f72/3: Invalid", NACLi_INVALID, st, Other); | |
483 NaClDefine(" 0f72/4: Psrad $PRq, $Ib", NACLi_MMX, st, Binary); | |
484 NaClDefine(" 0f72/5: Invalid", NACLi_INVALID, st, Other); | |
485 NaClDefine(" 0f72/6: Pslld $PRq, $Ib", NACLi_MMX, st, Binary); | |
486 NaClDefine(" 0f72/7: Invalid", NACLi_INVALID, st, Other); | |
487 NaClDefIter(" 0f73/@i: Invalid", 0, 1, NACLi_INVALID, st, Other); | |
488 NaClDefine(" 0f73/2: Psrlq $PRq, $Ib", NACLi_MMX, st, Binary); | |
489 NaClDefIter(" 0f73/@i: Invalid", 3, 5, NACLi_INVALID, st, Other); | |
490 NaClDefine(" 0f73/6: Psllq $PRq, $Ib", NACLi_MMX, st, Binary); | |
491 NaClDefine(" 0f73/7: Invalid", NACLi_INVALID, st, Other); | |
492 NaClDefine(" 0f74: Pcmpeqb $Pq, $Qq", NACLi_MMX, st, Binary); | |
493 NaClDefine(" 0f75: Pcmpeqw $Pq, $Qq", NACLi_MMX, st, Binary); | |
494 NaClDefine(" 0f76: Pcmpeqd $Pq, $Qq", NACLi_MMX, st, Binary); | |
495 NaClDefine(" 0f77: Emms", NACLi_MMX, st, Binary); | |
496 NaClDefIter(" 0f78+@i: Invalid", 0, 5, NACLi_INVALID, st, Other); | |
497 NaClDefine(" 0f7e: Movd $Ed/q/d, $Pd/q/d", | |
498 NACLi_MMX, st, Move); | |
499 NaClDef_64(" 0f7e: Movq $Ed/q/q, $Pd/q/q", | |
500 NACLi_MMX, st, Move); | |
501 NaClDefine(" 0f7f: Movq $Qq, $Pq", NACLi_MMX, st, Move); | |
502 NaClDefine(" 0fd0: Invalid", NACLi_INVALID, st, Other); | |
503 NaClDefine(" 0fd1: Psrlw $Pq, $Qq", NACLi_MMX, st, Binary); | |
504 NaClDefine(" 0fd2: Psrld $Pq, $Qq", NACLi_MMX, st, Binary); | |
505 NaClDefine(" 0fd3: Psrlq $Pq, $Qq", NACLi_MMX, st, Binary); | |
506 NaClDefine(" 0fd4: Paddq $Pq, $Qq", NACLi_MMX, st, Binary); | |
507 NaClDefine(" 0fd5: Pmullw $Pq, $Qq", NACLi_MMX, st, Binary); | |
508 NaClDefine(" 0fd6: Invalid", NACLi_INVALID, st, Other); | |
509 NaClDefine(" 0fd7: Pmovmskb $Gd, $PRq", NACLi_MMX, st, Move); | |
510 NaClDefine(" 0fd8: Psubusb $Pq, $Qq", NACLi_MMX, st, Binary); | |
511 NaClDefine(" 0fd9: Psubusw $Pq, $Qq", NACLi_MMX, st, Binary); | |
512 NaClDefine(" 0fda: Pminub $Pq, $Qq", NACLi_MMX, st, Binary); | |
513 NaClDefine(" 0fdb: Pand $Pq, $Qq", NACLi_MMX, st, Binary); | |
514 NaClDefine(" 0fdc: Paddusb $Pq, $Qq", NACLi_MMX, st, Binary); | |
515 NaClDefine(" 0fdd: Paddusw $Pq, $Qq", NACLi_MMX, st, Binary); | |
516 NaClDefine(" 0fde: Pmaxub $Pq, $Qq", NACLi_MMX, st, Binary); | |
517 NaClDefine(" 0fdf: Pandn $Pq, $Qq", NACLi_MMX, st, Binary); | |
518 NaClDefine(" 0fe0: Pavgb $Pq, $Qq", NACLi_MMX, st, Binary); | |
519 NaClDefine(" 0fe1: Psraw $Pq, $Qq", NACLi_MMX, st, Binary); | |
520 NaClDefine(" 0fe2: Psrad $Pq, $Qq", NACLi_MMX, st, Binary); | |
521 NaClDefine(" 0fe3: Pavgw $Pq, $Qq", NACLi_MMX, st, Binary); | |
522 NaClDefine(" 0fe4: Pmulhuw $Pq, $Qq", NACLi_MMX, st, Binary); | |
523 NaClDefine(" 0fe5: Pmulhw $Pq, $Qq", NACLi_MMX, st, Binary); | |
524 NaClDefine(" 0fe6: Invalid", NACLi_INVALID, st, Other); | |
525 NaClDefine(" 0fe7: Movntq $Mq, $Pq", NACLi_MMX, st, Move); | |
526 NaClDefine(" 0fe8: Psubsb $Pq, $Qq", NACLi_MMX, st, Binary); | |
527 NaClDefine(" 0fe9: Psubsw $Pq, $Qq", NACLi_MMX, st, Binary); | |
528 NaClDefine(" 0fea: Pminsw $Pq, $Qq", NACLi_MMX, st, Binary); | |
529 NaClDefine(" 0feb: Por $Pq, $Qq", NACLi_MMX, st, Binary); | |
530 NaClDefine(" 0fec: Paddsb $Pq, $Qq", NACLi_MMX, st, Binary); | |
531 NaClDefine(" 0fed: Paddsw $Pq, $Qq", NACLi_MMX, st, Binary); | |
532 NaClDefine(" 0fee: Pmaxsw $Pq, $Qq", NACLi_MMX, st, Binary); | |
533 NaClDefine(" 0fef: Pxor $Pq, $Qq", NACLi_MMX, st, Binary); | |
534 NaClDefine(" 0ff0: Invalid", NACLi_INVALID, st, Other); | |
535 NaClDefine(" 0ff1: Psllw $Pq, $Qq", NACLi_MMX, st, Binary); | |
536 NaClDefine(" 0ff2: Pslld $Pq, $Qq", NACLi_MMX, st, Binary); | |
537 NaClDefine(" 0ff3: Psllq $Pq, $Qq", NACLi_MMX, st, Binary); | |
538 NaClDefine(" 0ff4: Pmuludq $Pq, $Qq", NACLi_MMX, st, Binary); | |
539 NaClDefine(" 0ff5: Pmaddwd $Pq, $Qq", NACLi_MMX, st, Binary); | |
540 NaClDefine(" 0ff6: Psadbw $Pq, $Qq", NACLi_MMX, st, Binary); | |
541 NaClDefine(" 0ff7: Maskmovq {$Zvd}, $Pq, $PRq", | |
542 NACLi_MMX, st, Binary); | |
543 NaClDefine(" 0ff8: Psubb $Pq, $Qq", NACLi_MMX, st, Binary); | |
544 NaClDefine(" 0ff9: Psubw $Pq, $Qq", NACLi_MMX, st, Binary); | |
545 NaClDefine(" 0ffa: Psubd $Pq, $Qq", NACLi_MMX, st, Binary); | |
546 NaClDefine(" 0ffb: Psubq $Pq, $Qq", NACLi_MMX, st, Binary); | |
547 NaClDefine(" 0ffc: Paddb $Pq, $Qq", NACLi_MMX, st, Binary); | |
548 NaClDefine(" 0ffd: Paddw $Pq, $Qq", NACLi_MMX, st, Binary); | |
549 NaClDefine(" 0ffe: Paddd $Pq, $Qq", NACLi_MMX, st, Binary); | |
550 NaClDefine(" 0fff: Invalid", NACLi_INVALID, st, Binary); | |
551 } | |
552 | |
553 static void NaClDefNarySseInsts(struct NaClSymbolTable* st) { | |
554 /* Define other forms of MMX and XMM operations, i.e. those in 660f3a. */ | |
555 NaClDefInstPrefix(Prefix660F3A); | |
556 NaClDefPrefixInstChoices_32_64(Prefix660F3A, 0x16, 1, 2); | |
557 NaClDefPrefixInstChoices_32_64(Prefix660F3A, 0x22, 1, 2); | |
558 NaClDefine(" 660f3a08: Roundps $Vdq, $Wdq, $Ib", | |
559 NACLi_SSE41, st, O1Nary); | |
560 NaClDefine(" 660f3a09: Roundpd $Vdq, $Wdq, $Ib", | |
561 NACLi_SSE41, st, O1Nary); | |
562 NaClDefine(" 660f3a0a: Roundss $Vss, $Wss, $Ib", | |
563 NACLi_SSE41, st, O1Nary); | |
564 NaClDefine(" 660f3a0b: Roundsd $Vsd, $Wsd, $Ib", | |
565 NACLi_SSE41, st, O1Nary); | |
566 NaClDefine(" 660f3a0c: Blendps $Vdq, $Wdq, $Ib", | |
567 NACLi_SSE41, st, Nary); | |
568 NaClDefine(" 660f3a0d: Blendpd $Vdq, $Wdq, $Ib", | |
569 NACLi_SSE41, st, Nary); | |
570 NaClDefine(" 660f3a0e: Pblendw $Vdq, $Wdq, $Ib", | |
571 NACLi_SSE41, st, Nary); | |
572 NaClDefine(" 0f3a0f: Palignr $Pq, $Qq, $Ib", | |
573 NACLi_SSSE3, st, Nary); | |
574 NaClDefine(" 660f3a0f: Palignr $Vdq, $Wdq, $Ib", | |
575 NACLi_SSSE3, st, Nary); | |
576 NaClDefine(" 660f3a14: Pextrb $Rd/Mb, $Vdq, $Ib", | |
577 NACLi_SSE41, st, O1Nary); | |
578 NaClDefine(" 660f3a15: Pextrw $Rd/Mw, $Vdq, $Ib", | |
579 NACLi_SSE41, st, O1Nary); | |
580 NaClDefine(" 660f3a16: Pextrd $Ed/q/d, $Vdq, $Ib", | |
581 NACLi_SSE41, st, O1Nary); | |
582 NaClDef_64(" 660f3a16: Pextrq $Ed/q/q, $Vdq, $Ib", | |
583 NACLi_SSE41, st, O1Nary); | |
584 NaClDefine(" 660f3a17: Extractps $Ed, $Vdq, $Ib", | |
585 NACLi_SSE41, st, O1Nary); | |
586 NaClDefine(" 660f3a20: Pinsrb $Vdq, $Rd/q/Mb, $Ib", | |
587 NACLi_SSE41, st, O1Nary); | |
588 NaClDefine(" 660f3a21: Insertps $Vdq, $Udq/Md, $Ib", | |
589 NACLi_SSE41, st, O1Nary); | |
590 NaClDefine(" 660f3a22: Pinsrd $Vdq, $Ed/q/d, $Ib", | |
591 NACLi_SSE41, st, O1Nary); | |
592 NaClDef_64(" 660f3a22: Pinsrq $Vdq, $Ed/q/q, $Ib", | |
593 NACLi_SSE41, st, O1Nary); | |
594 NaClDefine(" 660f3a40: Dpps $Vdq, $Wdq, $Ib", | |
595 NACLi_SSE41, st, Nary); | |
596 NaClDefine(" 660f3a41: Dppd $Vdq, $Wdq, $Ib", | |
597 NACLi_SSE41, st, Nary); | |
598 NaClDefine(" 660f3a42: Mpsadbw $Vdq, $Wdq, $Ib", | |
599 NACLi_SSE41, st, Nary); | |
600 NaClDefine(" 660f3a60: Pcmpestrm {%xmm0}, {$rAXv}, {$rDXv}, " | |
601 "$Vdq, $Wdq, $Ib", | |
602 NACLi_SSE42, st, O3Nary); | |
603 NaClDefine(" 660f3a61: Pcmpestri {$rCXv}, {$rAXv}, {$rDXv}, " | |
604 "$Vdq, $Wdq, $Ib", | |
605 NACLi_SSE42, st, O3Nary); | |
606 NaClDefine(" 660f3a62: Pcmpistrm {%xmm0}, $Vdq, $Wdq, $Ib", | |
607 NACLi_SSE42, st, O1Nary); | |
608 NaClDefine(" 660f3a63: Pcmpistri {$rCXv}, $Vdq, $Wdq, $Ib", | |
609 NACLi_SSE42, st, O1Nary); | |
610 } | |
611 | |
612 void NaClDefSseInsts(struct NaClSymbolTable* st) { | |
613 NaClDefNarySseInsts(st); | |
614 NaClDefBinarySseInsts(st); | |
615 NaClDefMmxInsts(st); | |
616 } | |
OLD | NEW |