/[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 62 - (hide annotations) (download)
Tue Sep 7 11:08:22 2010 UTC (9 years, 11 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 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 william 62 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 william 31
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 william 62 extern void xPOP( const xIndirectVoid& from );
140     extern void xPUSH( const xIndirectVoid& from );
141 william 31
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 william 62 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 william 31
193 william 62 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 william 31
200 william 62 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 william 31
203 william 62 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 william 31
208 william 62 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 william 31
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 william 62 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 william 31
313     extern void xMOVDZX( const xRegisterSSE& to, const xRegister32& from );
314 william 62 extern void xMOVDZX( const xRegisterSSE& to, const xIndirectVoid& src );
315 william 31
316     extern void xMOVDZX( const xRegisterMMX& to, const xRegister32& from );
317 william 62 extern void xMOVDZX( const xRegisterMMX& to, const xIndirectVoid& src );
318 william 31
319     extern void xMOVD( const xRegister32& to, const xRegisterSSE& from );
320 william 62 extern void xMOVD( const xIndirectVoid& dest, const xRegisterSSE& from );
321 william 31
322     extern void xMOVD( const xRegister32& to, const xRegisterMMX& from );
323 william 62 extern void xMOVD( const xIndirectVoid& dest, const xRegisterMMX& from );
324 william 31
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 william 62 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 william 31
333 william 62 extern void xMOVQZX( const xRegisterSSE& to, const xIndirectVoid& src );
334 william 31 extern void xMOVQZX( const xRegisterSSE& to, const xRegisterSSE& from );
335    
336     extern void xMOVSS( const xRegisterSSE& to, const xRegisterSSE& from );
337 william 62 extern void xMOVSS( const xIndirectVoid& to, const xRegisterSSE& from );
338 william 31 extern void xMOVSD( const xRegisterSSE& to, const xRegisterSSE& from );
339 william 62 extern void xMOVSD( const xIndirectVoid& to, const xRegisterSSE& from );
340 william 31
341 william 62 extern void xMOVSSZX( const xRegisterSSE& to, const xIndirectVoid& from );
342     extern void xMOVSDZX( const xRegisterSSE& to, const xIndirectVoid& from );
343 william 31
344 william 62 extern void xMOVNTDQA( const xRegisterSSE& to, const xIndirectVoid& from );
345     extern void xMOVNTDQA( const xIndirectVoid& to, const xRegisterSSE& from );
346 william 31
347 william 62 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 william 31
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 william 62 extern void xINSERTPS( const xRegisterSSE& to, const xIndirect32& from, u8 imm8 );
390 william 31
391     extern void xEXTRACTPS( const xRegister32& to, const xRegisterSSE& from, u8 imm8 );
392 william 62 extern void xEXTRACTPS( const xIndirect32& dest, const xRegisterSSE& from, u8 imm8 );
393 william 31
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 william 62 extern void xCVTDQ2PD( const xRegisterSSE& to, const xIndirect64& from );
427 william 31 extern void xCVTDQ2PS( const xRegisterSSE& to, const xRegisterSSE& from );
428 william 62 extern void xCVTDQ2PS( const xRegisterSSE& to, const xIndirect128& from );
429 william 31
430     extern void xCVTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
431 william 62 extern void xCVTPD2DQ( const xRegisterSSE& to, const xIndirect128& from );
432 william 31 extern void xCVTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
433 william 62 extern void xCVTPD2PI( const xRegisterMMX& to, const xIndirect128& from );
434 william 31 extern void xCVTPD2PS( const xRegisterSSE& to, const xRegisterSSE& from );
435 william 62 extern void xCVTPD2PS( const xRegisterSSE& to, const xIndirect128& from );
436 william 31
437     extern void xCVTPI2PD( const xRegisterSSE& to, const xRegisterMMX& from );
438 william 62 extern void xCVTPI2PD( const xRegisterSSE& to, const xIndirect64& from );
439 william 31 extern void xCVTPI2PS( const xRegisterSSE& to, const xRegisterMMX& from );
440 william 62 extern void xCVTPI2PS( const xRegisterSSE& to, const xIndirect64& from );
441 william 31
442     extern void xCVTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
443 william 62 extern void xCVTPS2DQ( const xRegisterSSE& to, const xIndirect128& from );
444 william 31 extern void xCVTPS2PD( const xRegisterSSE& to, const xRegisterSSE& from );
445 william 62 extern void xCVTPS2PD( const xRegisterSSE& to, const xIndirect64& from );
446 william 31 extern void xCVTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
447 william 62 extern void xCVTPS2PI( const xRegisterMMX& to, const xIndirect64& from );
448 william 31
449     extern void xCVTSD2SI( const xRegister32& to, const xRegisterSSE& from );
450 william 62 extern void xCVTSD2SI( const xRegister32& to, const xIndirect64& from );
451 william 31 extern void xCVTSD2SS( const xRegisterSSE& to, const xRegisterSSE& from );
452 william 62 extern void xCVTSD2SS( const xRegisterSSE& to, const xIndirect64& from );
453 william 31 extern void xCVTSI2SD( const xRegisterMMX& to, const xRegister32& from );
454 william 62 extern void xCVTSI2SD( const xRegisterMMX& to, const xIndirect32& from );
455 william 31 extern void xCVTSI2SS( const xRegisterSSE& to, const xRegister32& from );
456 william 62 extern void xCVTSI2SS( const xRegisterSSE& to, const xIndirect32& from );
457 william 31
458     extern void xCVTSS2SD( const xRegisterSSE& to, const xRegisterSSE& from );
459 william 62 extern void xCVTSS2SD( const xRegisterSSE& to, const xIndirect32& from );
460 william 31 extern void xCVTSS2SI( const xRegister32& to, const xRegisterSSE& from );
461 william 62 extern void xCVTSS2SI( const xRegister32& to, const xIndirect32& from );
462 william 31
463     extern void xCVTTPD2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
464 william 62 extern void xCVTTPD2DQ( const xRegisterSSE& to, const xIndirect128& from );
465 william 31 extern void xCVTTPD2PI( const xRegisterMMX& to, const xRegisterSSE& from );
466 william 62 extern void xCVTTPD2PI( const xRegisterMMX& to, const xIndirect128& from );
467 william 31 extern void xCVTTPS2DQ( const xRegisterSSE& to, const xRegisterSSE& from );
468 william 62 extern void xCVTTPS2DQ( const xRegisterSSE& to, const xIndirect128& from );
469 william 31 extern void xCVTTPS2PI( const xRegisterMMX& to, const xRegisterSSE& from );
470 william 62 extern void xCVTTPS2PI( const xRegisterMMX& to, const xIndirect64& from );
471 william 31
472     extern void xCVTTSD2SI( const xRegister32& to, const xRegisterSSE& from );
473 william 62 extern void xCVTTSD2SI( const xRegister32& to, const xIndirect64& from );
474 william 31 extern void xCVTTSS2SI( const xRegister32& to, const xRegisterSSE& from );
475 william 62 extern void xCVTTSS2SI( const xRegister32& to, const xIndirect32& from );
476 william 31
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