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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (hide annotations) (download)
Tue Sep 7 03:24:11 2010 UTC (9 years, 11 months ago) by william
File MIME type: text/plain
File size: 19923 byte(s)
committing r3113 initial commit again...
1 william 31 /* 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 ModSibBase& src, bool preserve_flags=false );
133     extern void xLEA( xRegister16 to, const ModSibBase& 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 ModSibBase& from );
140     extern void xPUSH( const ModSibBase& 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 > __forceinline void xJE( T* func ) { xJcc( Jcc_Equal, (void*)(uptr)func ); }
189     template< typename T > __forceinline void xJZ( T* func ) { xJcc( Jcc_Zero, (void*)(uptr)func ); }
190     template< typename T > __forceinline void xJNE( T* func ) { xJcc( Jcc_NotEqual, (void*)(uptr)func ); }
191     template< typename T > __forceinline void xJNZ( T* func ) { xJcc( Jcc_NotZero, (void*)(uptr)func ); }
192    
193     template< typename T > __forceinline void xJO( T* func ) { xJcc( Jcc_Overflow, (void*)(uptr)func ); }
194     template< typename T > __forceinline void xJNO( T* func ) { xJcc( Jcc_NotOverflow, (void*)(uptr)func ); }
195     template< typename T > __forceinline void xJC( T* func ) { xJcc( Jcc_Carry, (void*)(uptr)func ); }
196     template< typename T > __forceinline void xJNC( T* func ) { xJcc( Jcc_NotCarry, (void*)(uptr)func ); }
197     template< typename T > __forceinline void xJS( T* func ) { xJcc( Jcc_Signed, (void*)(uptr)func ); }
198     template< typename T > __forceinline void xJNS( T* func ) { xJcc( Jcc_Unsigned, (void*)(uptr)func ); }
199    
200     template< typename T > __forceinline void xJPE( T* func ) { xJcc( Jcc_ParityEven, (void*)(uptr)func ); }
201     template< typename T > __forceinline void xJPO( T* func ) { xJcc( Jcc_ParityOdd, (void*)(uptr)func ); }
202    
203     template< typename T > __forceinline void xJL( T* func ) { xJcc( Jcc_Less, (void*)(uptr)func ); }
204     template< typename T > __forceinline void xJLE( T* func ) { xJcc( Jcc_LessOrEqual, (void*)(uptr)func ); }
205     template< typename T > __forceinline void xJG( T* func ) { xJcc( Jcc_Greater, (void*)(uptr)func ); }
206     template< typename T > __forceinline void xJGE( T* func ) { xJcc( Jcc_GreaterOrEqual, (void*)(uptr)func ); }
207    
208     template< typename T > __forceinline void xJB( T* func ) { xJcc( Jcc_Below, (void*)(uptr)func ); }
209     template< typename T > __forceinline void xJBE( T* func ) { xJcc( Jcc_BelowOrEqual, (void*)(uptr)func ); }
210     template< typename T > __forceinline void xJA( T* func ) { xJcc( Jcc_Above, (void*)(uptr)func ); }
211     template< typename T > __forceinline 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 ModSib32& dest );
309     extern void xLDMXCSR( const ModSib32& src );
310     extern void xFXSAVE( const ModSibBase& dest );
311     extern void xFXRSTOR( const ModSibBase& src );
312    
313     extern void xMOVDZX( const xRegisterSSE& to, const xRegister32& from );
314     extern void xMOVDZX( const xRegisterSSE& to, const ModSibBase& src );
315    
316     extern void xMOVDZX( const xRegisterMMX& to, const xRegister32& from );
317     extern void xMOVDZX( const xRegisterMMX& to, const ModSibBase& src );
318    
319     extern void xMOVD( const xRegister32& to, const xRegisterSSE& from );
320     extern void xMOVD( const ModSibBase& dest, const xRegisterSSE& from );
321    
322     extern void xMOVD( const xRegister32& to, const xRegisterMMX& from );
323     extern void xMOVD( const ModSibBase& 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 ModSibBase& dest, const xRegisterSSE& from );
330     extern void xMOVQ( const ModSibBase& dest, const xRegisterMMX& from );
331     extern void xMOVQ( const xRegisterMMX& to, const ModSibBase& src );
332    
333     extern void xMOVQZX( const xRegisterSSE& to, const ModSibBase& 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 ModSibBase& to, const xRegisterSSE& from );
338     extern void xMOVSD( const xRegisterSSE& to, const xRegisterSSE& from );
339     extern void xMOVSD( const ModSibBase& to, const xRegisterSSE& from );
340    
341     extern void xMOVSSZX( const xRegisterSSE& to, const ModSibBase& from );
342     extern void xMOVSDZX( const xRegisterSSE& to, const ModSibBase& from );
343    
344     extern void xMOVNTDQA( const xRegisterSSE& to, const ModSibBase& from );
345     extern void xMOVNTDQA( const ModSibBase& to, const xRegisterSSE& from );
346    
347     extern void xMOVNTPD( const ModSibBase& to, const xRegisterSSE& from );
348     extern void xMOVNTPS( const ModSibBase& to, const xRegisterSSE& from );
349     extern void xMOVNTQ( const ModSibBase& 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 ModSib32& from, u8 imm8 );
390    
391     extern void xEXTRACTPS( const xRegister32& to, const xRegisterSSE& from, u8 imm8 );
392     extern void xEXTRACTPS( const ModSib32& 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 ModSib64& from );
427     extern void xCVTDQ2PS( const xRegisterSSE& to, const xRegisterSSE& from );
428     extern void xCVTDQ2PS( const xRegisterSSE& to, const ModSib128& from );
429    
430     extern void xCVTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
431     extern void xCVTPD2DQ( const xRegisterSSE& to, const ModSib128& from );
432     extern void xCVTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
433     extern void xCVTPD2PI( const xRegisterMMX& to, const ModSib128& from );
434     extern void xCVTPD2PS( const xRegisterSSE& to, const xRegisterSSE& from );
435     extern void xCVTPD2PS( const xRegisterSSE& to, const ModSib128& from );
436    
437     extern void xCVTPI2PD( const xRegisterSSE& to, const xRegisterMMX& from );
438     extern void xCVTPI2PD( const xRegisterSSE& to, const ModSib64& from );
439     extern void xCVTPI2PS( const xRegisterSSE& to, const xRegisterMMX& from );
440     extern void xCVTPI2PS( const xRegisterSSE& to, const ModSib64& from );
441    
442     extern void xCVTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
443     extern void xCVTPS2DQ( const xRegisterSSE& to, const ModSib128& from );
444     extern void xCVTPS2PD( const xRegisterSSE& to, const xRegisterSSE& from );
445     extern void xCVTPS2PD( const xRegisterSSE& to, const ModSib64& from );
446     extern void xCVTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
447     extern void xCVTPS2PI( const xRegisterMMX& to, const ModSib64& from );
448    
449     extern void xCVTSD2SI( const xRegister32& to, const xRegisterSSE& from );
450     extern void xCVTSD2SI( const xRegister32& to, const ModSib64& from );
451     extern void xCVTSD2SS( const xRegisterSSE& to, const xRegisterSSE& from );
452     extern void xCVTSD2SS( const xRegisterSSE& to, const ModSib64& from );
453     extern void xCVTSI2SD( const xRegisterMMX& to, const xRegister32& from );
454     extern void xCVTSI2SD( const xRegisterMMX& to, const ModSib32& from );
455     extern void xCVTSI2SS( const xRegisterSSE& to, const xRegister32& from );
456     extern void xCVTSI2SS( const xRegisterSSE& to, const ModSib32& from );
457    
458     extern void xCVTSS2SD( const xRegisterSSE& to, const xRegisterSSE& from );
459     extern void xCVTSS2SD( const xRegisterSSE& to, const ModSib32& from );
460     extern void xCVTSS2SI( const xRegister32& to, const xRegisterSSE& from );
461     extern void xCVTSS2SI( const xRegister32& to, const ModSib32& from );
462    
463     extern void xCVTTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
464     extern void xCVTTPD2DQ( const xRegisterSSE& to, const ModSib128& from );
465     extern void xCVTTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
466     extern void xCVTTPD2PI( const xRegisterMMX& to, const ModSib128& from );
467     extern void xCVTTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
468     extern void xCVTTPS2DQ( const xRegisterSSE& to, const ModSib128& from );
469     extern void xCVTTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
470     extern void xCVTTPS2PI( const xRegisterMMX& to, const ModSib64& from );
471    
472     extern void xCVTTSD2SI( const xRegister32& to, const xRegisterSSE& from );
473     extern void xCVTTSD2SI( const xRegister32& to, const ModSib64& from );
474     extern void xCVTTSS2SI( const xRegister32& to, const xRegisterSSE& from );
475     extern void xCVTTSS2SI( const xRegister32& to, const ModSib32& 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