/[pcsx2_0.9.7]/trunk/common/include/x86emitter/instructions.h
ViewVC logotype

Contents of /trunk/common/include/x86emitter/instructions.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (show annotations) (download)
Tue Sep 7 11:08:22 2010 UTC (9 years, 4 months ago) by william
File MIME type: text/plain
File size: 19890 byte(s)
Auto Commited Import of: pcsx2-0.9.7-r3738-debug in ./trunk
1 /* PCSX2 - PS2 Emulator for PCs
2 * Copyright (C) 2002-2010 PCSX2 Dev Team
3 *
4 * PCSX2 is free software: you can redistribute it and/or modify it under the terms
5 * of the GNU Lesser General Public License as published by the Free Software Found-
6 * ation, either version 3 of the License, or (at your option) any later version.
7 *
8 * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
9 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 * PURPOSE. See the GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License along with PCSX2.
13 * If not, see <http://www.gnu.org/licenses/>.
14 */
15
16 /*
17 * ix86 definitions v0.9.1
18 *
19 * Original Authors (v0.6.2 and prior):
20 * linuzappz <linuzappz@pcsx.net>
21 * alexey silinov
22 * goldfinger
23 * zerofrog(@gmail.com)
24 *
25 * Authors of v0.9.1:
26 * Jake.Stine(@gmail.com)
27 * cottonvibes(@gmail.com)
28 * sudonim(1@gmail.com)
29 */
30
31 #pragma once
32
33 namespace x86Emitter
34 {
35 extern void xStoreReg( const xRegisterSSE& src );
36 extern void xRestoreReg( const xRegisterSSE& dest );
37
38 // ------------------------------------------------------------------------
39 // Group 1 Instruction Class
40
41 extern const xImpl_Group1 xADC;
42 extern const xImpl_Group1 xSBB;
43
44 extern const xImpl_G1Logic xAND;
45 extern const xImpl_G1Logic xOR;
46 extern const xImpl_G1Logic xXOR;
47
48 extern const xImpl_G1Arith xADD;
49 extern const xImpl_G1Arith xSUB;
50 extern const xImpl_G1Compare xCMP;
51
52 // ------------------------------------------------------------------------
53 // Group 2 Instruction Class
54 //
55 // Optimization Note: For Imm forms, we ignore the instruction if the shift count is
56 // zero. This is a safe optimization since any zero-value shift does not affect any
57 // flags.
58
59 extern const xImpl_Mov xMOV;
60 extern const xImpl_Test xTEST;
61
62 extern const xImpl_Group2 xROL, xROR,
63 xRCL, xRCR,
64 xSHL, xSHR,
65 xSAR;
66
67 // ------------------------------------------------------------------------
68 // Group 3 Instruction Class
69
70 extern const xImpl_Group3 xNOT, xNEG;
71 extern const xImpl_Group3 xUMUL, xUDIV;
72 extern const xImpl_iDiv xDIV;
73 extern const xImpl_iMul xMUL;
74
75 extern const xImpl_IncDec xINC, xDEC;
76
77 extern const xImpl_MovExtend xMOVZX, xMOVSX;
78
79 extern const xImpl_DwordShift xSHLD, xSHRD;
80
81 extern const xImpl_Group8 xBT;
82 extern const xImpl_Group8 xBTR;
83 extern const xImpl_Group8 xBTS;
84 extern const xImpl_Group8 xBTC;
85
86 extern const xImpl_BitScan xBSF, xBSR;
87
88 extern const xImpl_JmpCall xJMP, xCALL;
89
90 // ------------------------------------------------------------------------
91 extern const xImpl_CMov
92 xCMOVA, xCMOVAE,
93 xCMOVB, xCMOVBE,
94 xCMOVG, xCMOVGE,
95 xCMOVL, xCMOVLE,
96
97 xCMOVZ, xCMOVE,
98 xCMOVNZ, xCMOVNE,
99 xCMOVO, xCMOVNO,
100 xCMOVC, xCMOVNC,
101
102 xCMOVS, xCMOVNS,
103 xCMOVPE, xCMOVPO;
104
105 // ------------------------------------------------------------------------
106 extern const xImpl_Set
107 xSETA, xSETAE,
108 xSETB, xSETBE,
109 xSETG, xSETGE,
110 xSETL, xSETLE,
111
112 xSETZ, xSETE,
113 xSETNZ, xSETNE,
114 xSETO, xSETNO,
115 xSETC, xSETNC,
116
117 xSETS, xSETNS,
118 xSETPE, xSETPO;
119
120 //////////////////////////////////////////////////////////////////////////////////////////
121 // Miscellaneous Instructions
122 // These are all defined inline or in ix86.cpp.
123 //
124
125 extern void xBSWAP( const xRegister32& to );
126
127 // ----- Lea Instructions (Load Effective Address) -----
128 // Note: alternate (void*) forms of these instructions are not provided since those
129 // forms are functionally equivalent to Mov reg,imm, and thus better written as MOVs
130 // instead.
131
132 extern void xLEA( xRegister32 to, const xIndirectVoid& src, bool preserve_flags=false );
133 extern void xLEA( xRegister16 to, const xIndirectVoid& src, bool preserve_flags=false );
134
135 // ----- Push / Pop Instructions -----
136 // Note: pushad/popad implementations are intentionally left out. The instructions are
137 // invalid in x64, and are super slow on x32. Use multiple Push/Pop instructions instead.
138
139 extern void xPOP( const xIndirectVoid& from );
140 extern void xPUSH( const xIndirectVoid& from );
141
142 extern void xPOP( xRegister32 from );
143
144 extern void xPUSH( u32 imm );
145 extern void xPUSH( xRegister32 from );
146
147 // pushes the EFLAGS register onto the stack
148 extern void xPUSHFD();
149 // pops the EFLAGS register from the stack
150 extern void xPOPFD();
151
152 // ----- Miscellaneous Instructions -----
153 // Various Instructions with no parameter and no special encoding logic.
154
155 extern void xLEAVE();
156 extern void xRET();
157 extern void xCBW();
158 extern void xCWD();
159 extern void xCDQ();
160 extern void xCWDE();
161
162 extern void xLAHF();
163 extern void xSAHF();
164
165 extern void xSTC();
166 extern void xCLC();
167
168 // NOP 1-byte
169 extern void xNOP();
170
171 extern void xINT( u8 imm );
172 extern void xINTO();
173
174 //////////////////////////////////////////////////////////////////////////////////////////
175 // JMP / Jcc Instructions!
176
177 extern void xJcc( JccComparisonType comparison, const void* target );
178 extern s8* xJcc8( JccComparisonType comparison=Jcc_Unconditional, s8 displacement=0 );
179 extern s32* xJcc32( JccComparisonType comparison=Jcc_Unconditional, s32 displacement=0 );
180
181 // ------------------------------------------------------------------------
182 // Conditional jumps to fixed targets.
183 // Jumps accept any pointer as a valid target (function or data), and will generate either
184 // 8 or 32 bit displacement versions of the jump, depending on relative displacement of
185 // the target (efficient!)
186 //
187
188 template< typename T > __fi void xJE( T* func ) { xJcc( Jcc_Equal, (void*)(uptr)func ); }
189 template< typename T > __fi void xJZ( T* func ) { xJcc( Jcc_Zero, (void*)(uptr)func ); }
190 template< typename T > __fi void xJNE( T* func ) { xJcc( Jcc_NotEqual, (void*)(uptr)func ); }
191 template< typename T > __fi void xJNZ( T* func ) { xJcc( Jcc_NotZero, (void*)(uptr)func ); }
192
193 template< typename T > __fi void xJO( T* func ) { xJcc( Jcc_Overflow, (void*)(uptr)func ); }
194 template< typename T > __fi void xJNO( T* func ) { xJcc( Jcc_NotOverflow, (void*)(uptr)func ); }
195 template< typename T > __fi void xJC( T* func ) { xJcc( Jcc_Carry, (void*)(uptr)func ); }
196 template< typename T > __fi void xJNC( T* func ) { xJcc( Jcc_NotCarry, (void*)(uptr)func ); }
197 template< typename T > __fi void xJS( T* func ) { xJcc( Jcc_Signed, (void*)(uptr)func ); }
198 template< typename T > __fi void xJNS( T* func ) { xJcc( Jcc_Unsigned, (void*)(uptr)func ); }
199
200 template< typename T > __fi void xJPE( T* func ) { xJcc( Jcc_ParityEven, (void*)(uptr)func ); }
201 template< typename T > __fi void xJPO( T* func ) { xJcc( Jcc_ParityOdd, (void*)(uptr)func ); }
202
203 template< typename T > __fi void xJL( T* func ) { xJcc( Jcc_Less, (void*)(uptr)func ); }
204 template< typename T > __fi void xJLE( T* func ) { xJcc( Jcc_LessOrEqual, (void*)(uptr)func ); }
205 template< typename T > __fi void xJG( T* func ) { xJcc( Jcc_Greater, (void*)(uptr)func ); }
206 template< typename T > __fi void xJGE( T* func ) { xJcc( Jcc_GreaterOrEqual, (void*)(uptr)func ); }
207
208 template< typename T > __fi void xJB( T* func ) { xJcc( Jcc_Below, (void*)(uptr)func ); }
209 template< typename T > __fi void xJBE( T* func ) { xJcc( Jcc_BelowOrEqual, (void*)(uptr)func ); }
210 template< typename T > __fi void xJA( T* func ) { xJcc( Jcc_Above, (void*)(uptr)func ); }
211 template< typename T > __fi void xJAE( T* func ) { xJcc( Jcc_AboveOrEqual, (void*)(uptr)func ); }
212
213 // ------------------------------------------------------------------------
214 // Forward Jump Helpers (act as labels!)
215
216 #define DEFINE_FORWARD_JUMP( label, cond ) \
217 template< typename OperandType > \
218 class xForward##label : public xForwardJump<OperandType> \
219 { \
220 public: \
221 xForward##label() : xForwardJump<OperandType>( cond ) {} \
222 };
223
224 // ------------------------------------------------------------------------
225 // Note: typedefs below are defined individually in order to appease Intellisense
226 // resolution. Including them into the class definition macro above breaks it.
227
228 typedef xForwardJump<s8> xForwardJump8;
229 typedef xForwardJump<s32> xForwardJump32;
230
231 DEFINE_FORWARD_JUMP( JA, Jcc_Above );
232 DEFINE_FORWARD_JUMP( JB, Jcc_Below );
233 DEFINE_FORWARD_JUMP( JAE, Jcc_AboveOrEqual );
234 DEFINE_FORWARD_JUMP( JBE, Jcc_BelowOrEqual );
235
236 typedef xForwardJA<s8> xForwardJA8;
237 typedef xForwardJA<s32> xForwardJA32;
238 typedef xForwardJB<s8> xForwardJB8;
239 typedef xForwardJB<s32> xForwardJB32;
240 typedef xForwardJAE<s8> xForwardJAE8;
241 typedef xForwardJAE<s32> xForwardJAE32;
242 typedef xForwardJBE<s8> xForwardJBE8;
243 typedef xForwardJBE<s32> xForwardJBE32;
244
245 DEFINE_FORWARD_JUMP( JG, Jcc_Greater );
246 DEFINE_FORWARD_JUMP( JL, Jcc_Less );
247 DEFINE_FORWARD_JUMP( JGE, Jcc_GreaterOrEqual );
248 DEFINE_FORWARD_JUMP( JLE, Jcc_LessOrEqual );
249
250 typedef xForwardJG<s8> xForwardJG8;
251 typedef xForwardJG<s32> xForwardJG32;
252 typedef xForwardJL<s8> xForwardJL8;
253 typedef xForwardJL<s32> xForwardJL32;
254 typedef xForwardJGE<s8> xForwardJGE8;
255 typedef xForwardJGE<s32> xForwardJGE32;
256 typedef xForwardJLE<s8> xForwardJLE8;
257 typedef xForwardJLE<s32> xForwardJLE32;
258
259 DEFINE_FORWARD_JUMP( JZ, Jcc_Zero );
260 DEFINE_FORWARD_JUMP( JE, Jcc_Equal );
261 DEFINE_FORWARD_JUMP( JNZ, Jcc_NotZero );
262 DEFINE_FORWARD_JUMP( JNE, Jcc_NotEqual );
263
264 typedef xForwardJZ<s8> xForwardJZ8;
265 typedef xForwardJZ<s32> xForwardJZ32;
266 typedef xForwardJE<s8> xForwardJE8;
267 typedef xForwardJE<s32> xForwardJE32;
268 typedef xForwardJNZ<s8> xForwardJNZ8;
269 typedef xForwardJNZ<s32> xForwardJNZ32;
270 typedef xForwardJNE<s8> xForwardJNE8;
271 typedef xForwardJNE<s32> xForwardJNE32;
272
273 DEFINE_FORWARD_JUMP( JS, Jcc_Signed );
274 DEFINE_FORWARD_JUMP( JNS, Jcc_Unsigned );
275
276 typedef xForwardJS<s8> xForwardJS8;
277 typedef xForwardJS<s32> xForwardJS32;
278 typedef xForwardJNS<s8> xForwardJNS8;
279 typedef xForwardJNS<s32> xForwardJNS32;
280
281 DEFINE_FORWARD_JUMP( JO, Jcc_Overflow );
282 DEFINE_FORWARD_JUMP( JNO, Jcc_NotOverflow );
283
284 typedef xForwardJO<s8> xForwardJO8;
285 typedef xForwardJO<s32> xForwardJO32;
286 typedef xForwardJNO<s8> xForwardJNO8;
287 typedef xForwardJNO<s32> xForwardJNO32;
288
289 DEFINE_FORWARD_JUMP( JC, Jcc_Carry );
290 DEFINE_FORWARD_JUMP( JNC, Jcc_NotCarry );
291
292 typedef xForwardJC<s8> xForwardJC8;
293 typedef xForwardJC<s32> xForwardJC32;
294 typedef xForwardJNC<s8> xForwardJNC8;
295 typedef xForwardJNC<s32> xForwardJNC32;
296
297 DEFINE_FORWARD_JUMP( JPE, Jcc_ParityEven );
298 DEFINE_FORWARD_JUMP( JPO, Jcc_ParityOdd );
299
300 typedef xForwardJPE<s8> xForwardJPE8;
301 typedef xForwardJPE<s32> xForwardJPE32;
302 typedef xForwardJPO<s8> xForwardJPO8;
303 typedef xForwardJPO<s32> xForwardJPO32;
304
305 // ------------------------------------------------------------------------
306
307 extern void xEMMS();
308 extern void xSTMXCSR( const xIndirect32& dest );
309 extern void xLDMXCSR( const xIndirect32& src );
310 extern void xFXSAVE( const xIndirectVoid& dest );
311 extern void xFXRSTOR( const xIndirectVoid& src );
312
313 extern void xMOVDZX( const xRegisterSSE& to, const xRegister32& from );
314 extern void xMOVDZX( const xRegisterSSE& to, const xIndirectVoid& src );
315
316 extern void xMOVDZX( const xRegisterMMX& to, const xRegister32& from );
317 extern void xMOVDZX( const xRegisterMMX& to, const xIndirectVoid& src );
318
319 extern void xMOVD( const xRegister32& to, const xRegisterSSE& from );
320 extern void xMOVD( const xIndirectVoid& dest, const xRegisterSSE& from );
321
322 extern void xMOVD( const xRegister32& to, const xRegisterMMX& from );
323 extern void xMOVD( const xIndirectVoid& dest, const xRegisterMMX& from );
324
325 extern void xMOVQ( const xRegisterMMX& to, const xRegisterMMX& from );
326 extern void xMOVQ( const xRegisterMMX& to, const xRegisterSSE& from );
327 extern void xMOVQ( const xRegisterSSE& to, const xRegisterMMX& from );
328
329 extern void xMOVQ( const xIndirectVoid& dest, const xRegisterSSE& from );
330 extern void xMOVQ( const xIndirectVoid& dest, const xRegisterMMX& from );
331 extern void xMOVQ( const xRegisterMMX& to, const xIndirectVoid& src );
332
333 extern void xMOVQZX( const xRegisterSSE& to, const xIndirectVoid& src );
334 extern void xMOVQZX( const xRegisterSSE& to, const xRegisterSSE& from );
335
336 extern void xMOVSS( const xRegisterSSE& to, const xRegisterSSE& from );
337 extern void xMOVSS( const xIndirectVoid& to, const xRegisterSSE& from );
338 extern void xMOVSD( const xRegisterSSE& to, const xRegisterSSE& from );
339 extern void xMOVSD( const xIndirectVoid& to, const xRegisterSSE& from );
340
341 extern void xMOVSSZX( const xRegisterSSE& to, const xIndirectVoid& from );
342 extern void xMOVSDZX( const xRegisterSSE& to, const xIndirectVoid& from );
343
344 extern void xMOVNTDQA( const xRegisterSSE& to, const xIndirectVoid& from );
345 extern void xMOVNTDQA( const xIndirectVoid& to, const xRegisterSSE& from );
346
347 extern void xMOVNTPD( const xIndirectVoid& to, const xRegisterSSE& from );
348 extern void xMOVNTPS( const xIndirectVoid& to, const xRegisterSSE& from );
349 extern void xMOVNTQ( const xIndirectVoid& to, const xRegisterMMX& from );
350
351 extern void xMOVMSKPS( const xRegister32& to, const xRegisterSSE& from );
352 extern void xMOVMSKPD( const xRegister32& to, const xRegisterSSE& from );
353
354 extern void xMASKMOV( const xRegisterSSE& to, const xRegisterSSE& from );
355 extern void xMASKMOV( const xRegisterMMX& to, const xRegisterMMX& from );
356 extern void xPMOVMSKB( const xRegister32& to, const xRegisterSSE& from );
357 extern void xPMOVMSKB( const xRegister32& to, const xRegisterMMX& from );
358 extern void xPALIGNR( const xRegisterSSE& to, const xRegisterSSE& from, u8 imm8 );
359 extern void xPALIGNR( const xRegisterMMX& to, const xRegisterMMX& from, u8 imm8 );
360
361 // ------------------------------------------------------------------------
362
363 extern const xImplSimd_MoveSSE xMOVAPS;
364 extern const xImplSimd_MoveSSE xMOVUPS;
365 extern const xImplSimd_MoveSSE xMOVAPD;
366 extern const xImplSimd_MoveSSE xMOVUPD;
367
368 #ifdef ALWAYS_USE_MOVAPS
369 extern const xImplSimd_MoveSSE xMOVDQA;
370 extern const xImplSimd_MoveSSE xMOVDQU;
371 #else
372 extern const xImplSimd_MoveDQ xMOVDQA;
373 extern const xImplSimd_MoveDQ xMOVDQU;
374 #endif
375
376 extern const xImplSimd_MovHL xMOVH;
377 extern const xImplSimd_MovHL xMOVL;
378 extern const xImplSimd_MovHL_RtoR xMOVLH;
379 extern const xImplSimd_MovHL_RtoR xMOVHL;
380
381 extern const xImplSimd_Blend xBLEND;
382 extern const xImplSimd_PMove xPMOVSX;
383 extern const xImplSimd_PMove xPMOVZX;
384
385 extern const xImplSimd_DestRegSSE xMOVSLDUP;
386 extern const xImplSimd_DestRegSSE xMOVSHDUP;
387
388 extern void xINSERTPS( const xRegisterSSE& to, const xRegisterSSE& from, u8 imm8 );
389 extern void xINSERTPS( const xRegisterSSE& to, const xIndirect32& from, u8 imm8 );
390
391 extern void xEXTRACTPS( const xRegister32& to, const xRegisterSSE& from, u8 imm8 );
392 extern void xEXTRACTPS( const xIndirect32& dest, const xRegisterSSE& from, u8 imm8 );
393
394 // ------------------------------------------------------------------------
395
396 extern const xImplSimd_DestRegEither xPAND;
397 extern const xImplSimd_DestRegEither xPANDN;
398 extern const xImplSimd_DestRegEither xPOR;
399 extern const xImplSimd_DestRegEither xPXOR;
400
401 extern const xImplSimd_Shuffle xSHUF;
402
403 // ------------------------------------------------------------------------
404
405 extern const xImplSimd_DestRegSSE xPTEST;
406
407 extern const xImplSimd_MinMax xMIN;
408 extern const xImplSimd_MinMax xMAX;
409
410 extern const xImplSimd_Compare xCMPEQ, xCMPLT,
411 xCMPLE, xCMPUNORD,
412 xCMPNE, xCMPNLT,
413 xCMPNLE,xCMPORD;
414
415 extern const xImplSimd_COMI xCOMI;
416 extern const xImplSimd_COMI xUCOMI;
417
418 extern const xImplSimd_PCompare xPCMP;
419 extern const xImplSimd_PMinMax xPMIN;
420 extern const xImplSimd_PMinMax xPMAX;
421
422 // ------------------------------------------------------------------------
423 //
424 //
425 extern void xCVTDQ2PD( const xRegisterSSE& to, const xRegisterSSE& from );
426 extern void xCVTDQ2PD( const xRegisterSSE& to, const xIndirect64& from );
427 extern void xCVTDQ2PS( const xRegisterSSE& to, const xRegisterSSE& from );
428 extern void xCVTDQ2PS( const xRegisterSSE& to, const xIndirect128& from );
429
430 extern void xCVTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
431 extern void xCVTPD2DQ( const xRegisterSSE& to, const xIndirect128& from );
432 extern void xCVTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
433 extern void xCVTPD2PI( const xRegisterMMX& to, const xIndirect128& from );
434 extern void xCVTPD2PS( const xRegisterSSE& to, const xRegisterSSE& from );
435 extern void xCVTPD2PS( const xRegisterSSE& to, const xIndirect128& from );
436
437 extern void xCVTPI2PD( const xRegisterSSE& to, const xRegisterMMX& from );
438 extern void xCVTPI2PD( const xRegisterSSE& to, const xIndirect64& from );
439 extern void xCVTPI2PS( const xRegisterSSE& to, const xRegisterMMX& from );
440 extern void xCVTPI2PS( const xRegisterSSE& to, const xIndirect64& from );
441
442 extern void xCVTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
443 extern void xCVTPS2DQ( const xRegisterSSE& to, const xIndirect128& from );
444 extern void xCVTPS2PD( const xRegisterSSE& to, const xRegisterSSE& from );
445 extern void xCVTPS2PD( const xRegisterSSE& to, const xIndirect64& from );
446 extern void xCVTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
447 extern void xCVTPS2PI( const xRegisterMMX& to, const xIndirect64& from );
448
449 extern void xCVTSD2SI( const xRegister32& to, const xRegisterSSE& from );
450 extern void xCVTSD2SI( const xRegister32& to, const xIndirect64& from );
451 extern void xCVTSD2SS( const xRegisterSSE& to, const xRegisterSSE& from );
452 extern void xCVTSD2SS( const xRegisterSSE& to, const xIndirect64& from );
453 extern void xCVTSI2SD( const xRegisterMMX& to, const xRegister32& from );
454 extern void xCVTSI2SD( const xRegisterMMX& to, const xIndirect32& from );
455 extern void xCVTSI2SS( const xRegisterSSE& to, const xRegister32& from );
456 extern void xCVTSI2SS( const xRegisterSSE& to, const xIndirect32& from );
457
458 extern void xCVTSS2SD( const xRegisterSSE& to, const xRegisterSSE& from );
459 extern void xCVTSS2SD( const xRegisterSSE& to, const xIndirect32& from );
460 extern void xCVTSS2SI( const xRegister32& to, const xRegisterSSE& from );
461 extern void xCVTSS2SI( const xRegister32& to, const xIndirect32& from );
462
463 extern void xCVTTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
464 extern void xCVTTPD2DQ( const xRegisterSSE& to, const xIndirect128& from );
465 extern void xCVTTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
466 extern void xCVTTPD2PI( const xRegisterMMX& to, const xIndirect128& from );
467 extern void xCVTTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
468 extern void xCVTTPS2DQ( const xRegisterSSE& to, const xIndirect128& from );
469 extern void xCVTTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
470 extern void xCVTTPS2PI( const xRegisterMMX& to, const xIndirect64& from );
471
472 extern void xCVTTSD2SI( const xRegister32& to, const xRegisterSSE& from );
473 extern void xCVTTSD2SI( const xRegister32& to, const xIndirect64& from );
474 extern void xCVTTSS2SI( const xRegister32& to, const xRegisterSSE& from );
475 extern void xCVTTSS2SI( const xRegister32& to, const xIndirect32& from );
476
477 // ------------------------------------------------------------------------
478
479 extern const xImplSimd_AndNot xANDN;
480 extern const xImplSimd_rSqrt xRCP;
481 extern const xImplSimd_rSqrt xRSQRT;
482 extern const xImplSimd_Sqrt xSQRT;
483
484 extern const xImplSimd_Shift xPSLL;
485 extern const xImplSimd_Shift xPSRL;
486 extern const xImplSimd_ShiftWithoutQ xPSRA;
487 extern const xImplSimd_AddSub xPADD;
488 extern const xImplSimd_AddSub xPSUB;
489 extern const xImplSimd_PMul xPMUL;
490 extern const xImplSimd_PAbsolute xPABS;
491 extern const xImplSimd_PSign xPSIGN;
492 extern const xImplSimd_PMultAdd xPMADD;
493 extern const xImplSimd_HorizAdd xHADD;
494 extern const xImplSimd_DotProduct xDP;
495 extern const xImplSimd_Round xROUND;
496
497 extern const xImplSimd_PShuffle xPSHUF;
498 extern const SimdImpl_PUnpack xPUNPCK;
499 extern const xImplSimd_Unpack xUNPCK;
500 extern const SimdImpl_Pack xPACK;
501 extern const xImplSimd_PInsert xPINSR;
502 extern const SimdImpl_PExtract xPEXTR;
503
504 }
505

  ViewVC Help
Powered by ViewVC 1.1.22