/[pearpc]/src/cpu/cpu_generic/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_generic/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: 6104 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     #elif HOST_ENDIANESS == HOST_ENDIANESS_BE
49    
50     #define VECT_B(reg, index) ((reg).b[(index)])
51     #define VECT_SB(reg, index) ((reg).sb[(index)])
52     #define VECT_H(reg, index) ((reg).h[(index)])
53     #define VECT_SH(reg, index) ((reg).sh[(index)])
54     #define VECT_W(reg, index) ((reg).w[(index)])
55     #define VECT_SW(reg, index) ((reg).sw[(index)])
56     #define VECT_D(reg, index) ((reg).d[(index)])
57     #define VECT_SD(reg, index) ((reg).sd[(index)])
58    
59     #define VECT_EVEN(index) (((index) << 1) + 0)
60     #define VECT_ODD(index) (((index) << 1) + 1)
61    
62     #else
63     #error Endianess not supported!
64     #endif
65    
66     //#define VECTOR_DEBUG fprintf(stderr, "[PPC/VEC] %s\n", __FUNCTION__)
67     #define VECTOR_DEBUG
68    
69     //#define VECTOR_DEBUG_COMMON fprintf(stderr, "[PPC/VEC] %s\n", __FUNCTION__)
70     #define VECTOR_DEBUG_COMMON
71    
72     /* Undefine this to turn of the MSR_VEC check for vector instructions. */
73     //#define __VEC_EXC_OFF__
74    
75     #include "system/types.h"
76    
77     #include "tools/snprintf.h"
78    
79     void ppc_opc_vperm();
80     void ppc_opc_vsel();
81     void ppc_opc_vsrb();
82     void ppc_opc_vsrh();
83     void ppc_opc_vsrw();
84     void ppc_opc_vsrab();
85     void ppc_opc_vsrah();
86     void ppc_opc_vsraw();
87     void ppc_opc_vsr();
88     void ppc_opc_vsro();
89     void ppc_opc_vslb();
90     void ppc_opc_vslh();
91     void ppc_opc_vslw();
92     void ppc_opc_vsl();
93     void ppc_opc_vslo();
94     void ppc_opc_vsldoi();
95     void ppc_opc_vrlb();
96     void ppc_opc_vrlh();
97     void ppc_opc_vrlw();
98     void ppc_opc_vmrghb();
99     void ppc_opc_vmrghh();
100     void ppc_opc_vmrghw();
101     void ppc_opc_vmrglb();
102     void ppc_opc_vmrglh();
103     void ppc_opc_vmrglw();
104     void ppc_opc_vspltb();
105     void ppc_opc_vsplth();
106     void ppc_opc_vspltw();
107     void ppc_opc_vspltisb();
108     void ppc_opc_vspltish();
109     void ppc_opc_vspltisw();
110     void ppc_opc_mfvscr();
111     void ppc_opc_mtvscr();
112     void ppc_opc_vpkuhum();
113     void ppc_opc_vpkuwum();
114     void ppc_opc_vpkpx();
115     void ppc_opc_vpkuhus();
116     void ppc_opc_vpkshss();
117     void ppc_opc_vpkuwus();
118     void ppc_opc_vpkswss();
119     void ppc_opc_vpkuhus();
120     void ppc_opc_vpkshus();
121     void ppc_opc_vpkuwus();
122     void ppc_opc_vpkswus();
123     void ppc_opc_vupkhsb();
124     void ppc_opc_vupkhpx();
125     void ppc_opc_vupkhsh();
126     void ppc_opc_vupklsb();
127     void ppc_opc_vupklpx();
128     void ppc_opc_vupklsh();
129     void ppc_opc_vaddubm();
130     void ppc_opc_vadduhm();
131     void ppc_opc_vadduwm();
132     void ppc_opc_vaddfp();
133     void ppc_opc_vaddcuw();
134     void ppc_opc_vaddubs();
135     void ppc_opc_vaddsbs();
136     void ppc_opc_vadduhs();
137     void ppc_opc_vaddshs();
138     void ppc_opc_vadduws();
139     void ppc_opc_vaddsws();
140     void ppc_opc_vsububm();
141     void ppc_opc_vsubuhm();
142     void ppc_opc_vsubuwm();
143     void ppc_opc_vsubfp();
144     void ppc_opc_vsubcuw();
145     void ppc_opc_vsububs();
146     void ppc_opc_vsubsbs();
147     void ppc_opc_vsubuhs();
148     void ppc_opc_vsubshs();
149     void ppc_opc_vsubuws();
150     void ppc_opc_vsubsws();
151     void ppc_opc_vmuleub();
152     void ppc_opc_vmulesb();
153     void ppc_opc_vmuleuh();
154     void ppc_opc_vmulesh();
155     void ppc_opc_vmuloub();
156     void ppc_opc_vmulosb();
157     void ppc_opc_vmulouh();
158     void ppc_opc_vmulosh();
159     void ppc_opc_vmaddfp();
160     void ppc_opc_vmhaddshs();
161     void ppc_opc_vmladduhm();
162     void ppc_opc_vmhraddshs();
163     void ppc_opc_vmsumubm();
164     void ppc_opc_vmsumuhm();
165     void ppc_opc_vmsummbm();
166     void ppc_opc_vmsumshm();
167     void ppc_opc_vmsumuhs();
168     void ppc_opc_vmsumshs();
169     void ppc_opc_vsum4ubs();
170     void ppc_opc_vsum4sbs();
171     void ppc_opc_vsum4shs();
172     void ppc_opc_vsum2sws();
173     void ppc_opc_vsumsws();
174     void ppc_opc_vnmsubfp();
175     void ppc_opc_vavgub();
176     void ppc_opc_vavgsb();
177     void ppc_opc_vavguh();
178     void ppc_opc_vavgsh();
179     void ppc_opc_vavguw();
180     void ppc_opc_vavgsw();
181     void ppc_opc_vmaxub();
182     void ppc_opc_vmaxsb();
183     void ppc_opc_vmaxuh();
184     void ppc_opc_vmaxsh();
185     void ppc_opc_vmaxuw();
186     void ppc_opc_vmaxsw();
187     void ppc_opc_vmaxfp();
188     void ppc_opc_vminub();
189     void ppc_opc_vminsb();
190     void ppc_opc_vminuh();
191     void ppc_opc_vminsh();
192     void ppc_opc_vminuw();
193     void ppc_opc_vminsw();
194     void ppc_opc_vminfp();
195     void ppc_opc_vrfin();
196     void ppc_opc_vrfip();
197     void ppc_opc_vrfim();
198     void ppc_opc_vrfiz();
199     void ppc_opc_vrefp();
200     void ppc_opc_vrsqrtefp();
201     void ppc_opc_vlogefp();
202     void ppc_opc_vexptefp();
203     void ppc_opc_vcfux();
204     void ppc_opc_vcfsx();
205     void ppc_opc_vctsxs();
206     void ppc_opc_vctuxs();
207     void ppc_opc_vand();
208     void ppc_opc_vandc();
209     void ppc_opc_vor();
210     void ppc_opc_vnor();
211     void ppc_opc_vxor();
212     void ppc_opc_vcmpequbx();
213     void ppc_opc_vcmpequhx();
214     void ppc_opc_vcmpequwx();
215     void ppc_opc_vcmpeqfpx();
216     void ppc_opc_vcmpgtubx();
217     void ppc_opc_vcmpgtsbx();
218     void ppc_opc_vcmpgtuhx();
219     void ppc_opc_vcmpgtshx();
220     void ppc_opc_vcmpgtuwx();
221     void ppc_opc_vcmpgtswx();
222     void ppc_opc_vcmpgtfpx();
223     void ppc_opc_vcmpgefpx();
224     void ppc_opc_vcmpbfpx();
225    
226     #endif

  ViewVC Help
Powered by ViewVC 1.1.26