/[pearpc]/src/cpu/cpu_jitc_x86/ppc_vec.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /src/cpu/cpu_jitc_x86/ppc_vec.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 11393 byte(s)
import upstream CVS
1 dpavlin 1 /*
2     * PearPC
3     * ppc_vec.h
4     *
5     * Copyright (C) 2004 Daniel Foesch (dfoesch@cs.nmsu.edu)
6     *
7     * This program is free software; you can redistribute it and/or modify
8     * it under the terms of the GNU General Public License version 2 as
9     * published by the Free Software Foundation.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19     */
20    
21     #ifndef __PPC_VEC_H__
22     #define __PPC_VEC_H__
23    
24     #define PPC_OPC_VRc (1<<10)
25    
26     /* Rather than write each function to be endianless, we're writing these
27     * defines to do an endianless access to elements of the vector.
28     *
29     * These are for ADDRESSED vector elements. Usually, most vector operations
30     * can be performed in either direction without care, so most of the
31     * for-loops should not use these, as it will introduce unneeded code
32     * for little-endian systems.
33     */
34     #if HOST_ENDIANESS == HOST_ENDIANESS_LE
35    
36     #define VECT_B(reg, index) ((reg).b[15 - (index)])
37     #define VECT_SB(reg, index) ((reg).sb[15 - (index)])
38     #define VECT_H(reg, index) ((reg).h[7 - (index)])
39     #define VECT_SH(reg, index) ((reg).sh[7 - (index)])
40     #define VECT_W(reg, index) ((reg).w[3 - (index)])
41     #define VECT_SW(reg, index) ((reg).sw[3 - (index)])
42     #define VECT_D(reg, index) ((reg).d[1 - (index)])
43     #define VECT_SD(reg, index) ((reg).sd[1 - (index)])
44    
45     #define VECT_EVEN(index) (((index) << 1) + 1)
46     #define VECT_ODD(index) (((index) << 1) + 0)
47    
48     #define VECT_BUILD(x,y,z,w) w, z, y, x
49    
50     #elif HOST_ENDIANESS == HOST_ENDIANESS_BE
51    
52     #define VECT_B(reg, index) ((reg).b[(index)])
53     #define VECT_SB(reg, index) ((reg).sb[(index)])
54     #define VECT_H(reg, index) ((reg).h[(index)])
55     #define VECT_SH(reg, index) ((reg).sh[(index)])
56     #define VECT_W(reg, index) ((reg).w[(index)])
57     #define VECT_SW(reg, index) ((reg).sw[(index)])
58     #define VECT_D(reg, index) ((reg).d[(index)])
59     #define VECT_SD(reg, index) ((reg).sd[(index)])
60    
61     #define VECT_EVEN(index) (((index) << 1) + 0)
62     #define VECT_ODD(index) (((index) << 1) + 1)
63    
64     #define VECT_BUILD(x,y,z,w) x, y, z, w
65     #else
66     #error Endianess not supported!
67     #endif
68    
69     //#define VECTOR_DEBUG fprintf(stderr, "[PPC/VEC] %s\n", __FUNCTION__)
70     //#define VECTOR_DEBUG jitcAssertFlushedVectorRegisters()
71     #define VECTOR_DEBUG
72    
73     #define VECTOR_DEBUG_COMMON VECTOR_DEBUG
74     //#define VECTOR_DEBUG_COMMON
75    
76     /* Undefine this to turn of the MSR_VEC check for vector instructions. */
77     //#define __VEC_EXC_OFF__
78    
79     #include "system/types.h"
80    
81     #include "tools/snprintf.h"
82    
83     #include "jitc.h"
84     #include "jitc_asm.h"
85     #include "x86asm.h"
86     #include "ppc_exc.h"
87    
88     static UNUSED void ppc_opc_gen_check_vec()
89     {
90     #ifndef __VEC_EXC_OFF__
91     if (!gJITC.checkedVector) {
92     jitcFloatRegisterClobberAll();
93     jitcFlushVectorRegister();
94     jitcClobberCarryAndFlags();
95    
96     NativeReg r1 = jitcGetClientRegister(PPC_MSR);
97     asmALU(X86_TEST, r1, MSR_VEC);
98     NativeAddress fixup = asmJxxFixup(X86_NZ);
99    
100     jitcFlushRegisterDirty();
101     asmALU(X86_MOV, ESI, gJITC.pc);
102     asmJMP((NativeAddress)ppc_no_vec_exception_asm);
103    
104     asmResolveFixup(fixup);
105     gJITC.checkedVector = true;
106     }
107     #endif
108     }
109    
110     void ppc_opc_vperm();
111     void ppc_opc_vsel();
112     void ppc_opc_vsrb();
113     void ppc_opc_vsrh();
114     void ppc_opc_vsrw();
115     void ppc_opc_vsrab();
116     void ppc_opc_vsrah();
117     void ppc_opc_vsraw();
118     void ppc_opc_vsr();
119     void ppc_opc_vsro();
120     void ppc_opc_vslb();
121     void ppc_opc_vslh();
122     void ppc_opc_vslw();
123     void ppc_opc_vsl();
124     void ppc_opc_vslo();
125     void ppc_opc_vsldoi();
126     void ppc_opc_vrlb();
127     void ppc_opc_vrlh();
128     void ppc_opc_vrlw();
129     void ppc_opc_vmrghb();
130     void ppc_opc_vmrghh();
131     void ppc_opc_vmrghw();
132     void ppc_opc_vmrglb();
133     void ppc_opc_vmrglh();
134     void ppc_opc_vmrglw();
135     void ppc_opc_vspltb();
136     void ppc_opc_vsplth();
137     void ppc_opc_vspltw();
138     void ppc_opc_vspltisb();
139     void ppc_opc_vspltish();
140     void ppc_opc_vspltisw();
141     void ppc_opc_mfvscr();
142     void ppc_opc_mtvscr();
143     void ppc_opc_vpkuhum();
144     void ppc_opc_vpkuwum();
145     void ppc_opc_vpkpx();
146     void ppc_opc_vpkuhus();
147     void ppc_opc_vpkshss();
148     void ppc_opc_vpkuwus();
149     void ppc_opc_vpkswss();
150     void ppc_opc_vpkuhus();
151     void ppc_opc_vpkshus();
152     void ppc_opc_vpkuwus();
153     void ppc_opc_vpkswus();
154     void ppc_opc_vupkhsb();
155     void ppc_opc_vupkhpx();
156     void ppc_opc_vupkhsh();
157     void ppc_opc_vupklsb();
158     void ppc_opc_vupklpx();
159     void ppc_opc_vupklsh();
160     void ppc_opc_vaddubm();
161     void ppc_opc_vadduhm();
162     void ppc_opc_vadduwm();
163     void ppc_opc_vaddfp();
164     void ppc_opc_vaddcuw();
165     void ppc_opc_vaddubs();
166     void ppc_opc_vaddsbs();
167     void ppc_opc_vadduhs();
168     void ppc_opc_vaddshs();
169     void ppc_opc_vadduws();
170     void ppc_opc_vaddsws();
171     void ppc_opc_vsububm();
172     void ppc_opc_vsubuhm();
173     void ppc_opc_vsubuwm();
174     void ppc_opc_vsubfp();
175     void ppc_opc_vsubcuw();
176     void ppc_opc_vsububs();
177     void ppc_opc_vsubsbs();
178     void ppc_opc_vsubuhs();
179     void ppc_opc_vsubshs();
180     void ppc_opc_vsubuws();
181     void ppc_opc_vsubsws();
182     void ppc_opc_vmuleub();
183     void ppc_opc_vmulesb();
184     void ppc_opc_vmuleuh();
185     void ppc_opc_vmulesh();
186     void ppc_opc_vmuloub();
187     void ppc_opc_vmulosb();
188     void ppc_opc_vmulouh();
189     void ppc_opc_vmulosh();
190     void ppc_opc_vmaddfp();
191     void ppc_opc_vmhaddshs();
192     void ppc_opc_vmladduhm();
193     void ppc_opc_vmhraddshs();
194     void ppc_opc_vmsumubm();
195     void ppc_opc_vmsumuhm();
196     void ppc_opc_vmsummbm();
197     void ppc_opc_vmsumshm();
198     void ppc_opc_vmsumuhs();
199     void ppc_opc_vmsumshs();
200     void ppc_opc_vsum4ubs();
201     void ppc_opc_vsum4sbs();
202     void ppc_opc_vsum4shs();
203     void ppc_opc_vsum2sws();
204     void ppc_opc_vsumsws();
205     void ppc_opc_vnmsubfp();
206     void ppc_opc_vavgub();
207     void ppc_opc_vavgsb();
208     void ppc_opc_vavguh();
209     void ppc_opc_vavgsh();
210     void ppc_opc_vavguw();
211     void ppc_opc_vavgsw();
212     void ppc_opc_vmaxub();
213     void ppc_opc_vmaxsb();
214     void ppc_opc_vmaxuh();
215     void ppc_opc_vmaxsh();
216     void ppc_opc_vmaxuw();
217     void ppc_opc_vmaxsw();
218     void ppc_opc_vmaxfp();
219     void ppc_opc_vminub();
220     void ppc_opc_vminsb();
221     void ppc_opc_vminuh();
222     void ppc_opc_vminsh();
223     void ppc_opc_vminuw();
224     void ppc_opc_vminsw();
225     void ppc_opc_vminfp();
226     void ppc_opc_vrfin();
227     void ppc_opc_vrfip();
228     void ppc_opc_vrfim();
229     void ppc_opc_vrfiz();
230     void ppc_opc_vrefp();
231     void ppc_opc_vrsqrtefp();
232     void ppc_opc_vlogefp();
233     void ppc_opc_vexptefp();
234     void ppc_opc_vcfux();
235     void ppc_opc_vcfsx();
236     void ppc_opc_vctsxs();
237     void ppc_opc_vctuxs();
238     void ppc_opc_vand();
239     void ppc_opc_vandc();
240     void ppc_opc_vor();
241     void ppc_opc_vnor();
242     void ppc_opc_vxor();
243     void ppc_opc_vcmpequbx();
244     void ppc_opc_vcmpequhx();
245     void ppc_opc_vcmpequwx();
246     void ppc_opc_vcmpeqfpx();
247     void ppc_opc_vcmpgtubx();
248     void ppc_opc_vcmpgtsbx();
249     void ppc_opc_vcmpgtuhx();
250     void ppc_opc_vcmpgtshx();
251     void ppc_opc_vcmpgtuwx();
252     void ppc_opc_vcmpgtswx();
253     void ppc_opc_vcmpgtfpx();
254     void ppc_opc_vcmpgefpx();
255     void ppc_opc_vcmpbfpx();
256    
257     JITCFlow ppc_opc_gen_vperm();
258     JITCFlow ppc_opc_gen_vsel();
259     JITCFlow ppc_opc_gen_vsrb();
260     JITCFlow ppc_opc_gen_vsrh();
261     JITCFlow ppc_opc_gen_vsrw();
262     JITCFlow ppc_opc_gen_vsrab();
263     JITCFlow ppc_opc_gen_vsrah();
264     JITCFlow ppc_opc_gen_vsraw();
265     JITCFlow ppc_opc_gen_vsr();
266     JITCFlow ppc_opc_gen_vsro();
267     JITCFlow ppc_opc_gen_vslb();
268     JITCFlow ppc_opc_gen_vslh();
269     JITCFlow ppc_opc_gen_vslw();
270     JITCFlow ppc_opc_gen_vsl();
271     JITCFlow ppc_opc_gen_vslo();
272     JITCFlow ppc_opc_gen_vsldoi();
273     JITCFlow ppc_opc_gen_vrlb();
274     JITCFlow ppc_opc_gen_vrlh();
275     JITCFlow ppc_opc_gen_vrlw();
276     JITCFlow ppc_opc_gen_vmrghb();
277     JITCFlow ppc_opc_gen_vmrghh();
278     JITCFlow ppc_opc_gen_vmrghw();
279     JITCFlow ppc_opc_gen_vmrglb();
280     JITCFlow ppc_opc_gen_vmrglh();
281     JITCFlow ppc_opc_gen_vmrglw();
282     JITCFlow ppc_opc_gen_vspltb();
283     JITCFlow ppc_opc_gen_vsplth();
284     JITCFlow ppc_opc_gen_vspltw();
285     JITCFlow ppc_opc_gen_vspltisb();
286     JITCFlow ppc_opc_gen_vspltish();
287     JITCFlow ppc_opc_gen_vspltisw();
288     JITCFlow ppc_opc_gen_mfvscr();
289     JITCFlow ppc_opc_gen_mtvscr();
290     JITCFlow ppc_opc_gen_vpkuhum();
291     JITCFlow ppc_opc_gen_vpkuwum();
292     JITCFlow ppc_opc_gen_vpkpx();
293     JITCFlow ppc_opc_gen_vpkuhus();
294     JITCFlow ppc_opc_gen_vpkshss();
295     JITCFlow ppc_opc_gen_vpkuwus();
296     JITCFlow ppc_opc_gen_vpkswss();
297     JITCFlow ppc_opc_gen_vpkuhus();
298     JITCFlow ppc_opc_gen_vpkshus();
299     JITCFlow ppc_opc_gen_vpkuwus();
300     JITCFlow ppc_opc_gen_vpkswus();
301     JITCFlow ppc_opc_gen_vupkhsb();
302     JITCFlow ppc_opc_gen_vupkhpx();
303     JITCFlow ppc_opc_gen_vupkhsh();
304     JITCFlow ppc_opc_gen_vupklsb();
305     JITCFlow ppc_opc_gen_vupklpx();
306     JITCFlow ppc_opc_gen_vupklsh();
307     JITCFlow ppc_opc_gen_vaddubm();
308     JITCFlow ppc_opc_gen_vadduhm();
309     JITCFlow ppc_opc_gen_vadduwm();
310     JITCFlow ppc_opc_gen_vaddfp();
311     JITCFlow ppc_opc_gen_vaddcuw();
312     JITCFlow ppc_opc_gen_vaddubs();
313     JITCFlow ppc_opc_gen_vaddsbs();
314     JITCFlow ppc_opc_gen_vadduhs();
315     JITCFlow ppc_opc_gen_vaddshs();
316     JITCFlow ppc_opc_gen_vadduws();
317     JITCFlow ppc_opc_gen_vaddsws();
318     JITCFlow ppc_opc_gen_vsububm();
319     JITCFlow ppc_opc_gen_vsubuhm();
320     JITCFlow ppc_opc_gen_vsubuwm();
321     JITCFlow ppc_opc_gen_vsubfp();
322     JITCFlow ppc_opc_gen_vsubcuw();
323     JITCFlow ppc_opc_gen_vsububs();
324     JITCFlow ppc_opc_gen_vsubsbs();
325     JITCFlow ppc_opc_gen_vsubuhs();
326     JITCFlow ppc_opc_gen_vsubshs();
327     JITCFlow ppc_opc_gen_vsubuws();
328     JITCFlow ppc_opc_gen_vsubsws();
329     JITCFlow ppc_opc_gen_vmuleub();
330     JITCFlow ppc_opc_gen_vmulesb();
331     JITCFlow ppc_opc_gen_vmuleuh();
332     JITCFlow ppc_opc_gen_vmulesh();
333     JITCFlow ppc_opc_gen_vmuloub();
334     JITCFlow ppc_opc_gen_vmulosb();
335     JITCFlow ppc_opc_gen_vmulouh();
336     JITCFlow ppc_opc_gen_vmulosh();
337     JITCFlow ppc_opc_gen_vmaddfp();
338     JITCFlow ppc_opc_gen_vmhaddshs();
339     JITCFlow ppc_opc_gen_vmladduhm();
340     JITCFlow ppc_opc_gen_vmhraddshs();
341     JITCFlow ppc_opc_gen_vmsumubm();
342     JITCFlow ppc_opc_gen_vmsumuhm();
343     JITCFlow ppc_opc_gen_vmsummbm();
344     JITCFlow ppc_opc_gen_vmsumshm();
345     JITCFlow ppc_opc_gen_vmsumuhs();
346     JITCFlow ppc_opc_gen_vmsumshs();
347     JITCFlow ppc_opc_gen_vsum4ubs();
348     JITCFlow ppc_opc_gen_vsum4sbs();
349     JITCFlow ppc_opc_gen_vsum4shs();
350     JITCFlow ppc_opc_gen_vsum2sws();
351     JITCFlow ppc_opc_gen_vsumsws();
352     JITCFlow ppc_opc_gen_vnmsubfp();
353     JITCFlow ppc_opc_gen_vavgub();
354     JITCFlow ppc_opc_gen_vavgsb();
355     JITCFlow ppc_opc_gen_vavguh();
356     JITCFlow ppc_opc_gen_vavgsh();
357     JITCFlow ppc_opc_gen_vavguw();
358     JITCFlow ppc_opc_gen_vavgsw();
359     JITCFlow ppc_opc_gen_vmaxub();
360     JITCFlow ppc_opc_gen_vmaxsb();
361     JITCFlow ppc_opc_gen_vmaxuh();
362     JITCFlow ppc_opc_gen_vmaxsh();
363     JITCFlow ppc_opc_gen_vmaxuw();
364     JITCFlow ppc_opc_gen_vmaxsw();
365     JITCFlow ppc_opc_gen_vmaxfp();
366     JITCFlow ppc_opc_gen_vminub();
367     JITCFlow ppc_opc_gen_vminsb();
368     JITCFlow ppc_opc_gen_vminuh();
369     JITCFlow ppc_opc_gen_vminsh();
370     JITCFlow ppc_opc_gen_vminuw();
371     JITCFlow ppc_opc_gen_vminsw();
372     JITCFlow ppc_opc_gen_vminfp();
373     JITCFlow ppc_opc_gen_vrfin();
374     JITCFlow ppc_opc_gen_vrfip();
375     JITCFlow ppc_opc_gen_vrfim();
376     JITCFlow ppc_opc_gen_vrfiz();
377     JITCFlow ppc_opc_gen_vrefp();
378     JITCFlow ppc_opc_gen_vrsqrtefp();
379     JITCFlow ppc_opc_gen_vlogefp();
380     JITCFlow ppc_opc_gen_vexptefp();
381     JITCFlow ppc_opc_gen_vcfux();
382     JITCFlow ppc_opc_gen_vcfsx();
383     JITCFlow ppc_opc_gen_vctsxs();
384     JITCFlow ppc_opc_gen_vctuxs();
385     JITCFlow ppc_opc_gen_vand();
386     JITCFlow ppc_opc_gen_vandc();
387     JITCFlow ppc_opc_gen_vor();
388     JITCFlow ppc_opc_gen_vnor();
389     JITCFlow ppc_opc_gen_vxor();
390     JITCFlow ppc_opc_gen_vcmpequbx();
391     JITCFlow ppc_opc_gen_vcmpequhx();
392     JITCFlow ppc_opc_gen_vcmpequwx();
393     JITCFlow ppc_opc_gen_vcmpeqfpx();
394     JITCFlow ppc_opc_gen_vcmpgtubx();
395     JITCFlow ppc_opc_gen_vcmpgtsbx();
396     JITCFlow ppc_opc_gen_vcmpgtuhx();
397     JITCFlow ppc_opc_gen_vcmpgtshx();
398     JITCFlow ppc_opc_gen_vcmpgtuwx();
399     JITCFlow ppc_opc_gen_vcmpgtswx();
400     JITCFlow ppc_opc_gen_vcmpgtfpx();
401     JITCFlow ppc_opc_gen_vcmpgefpx();
402     JITCFlow ppc_opc_gen_vcmpbfpx();
403    
404     #endif

  ViewVC Help
Powered by ViewVC 1.1.26