Statistics
| Branch: | Revision:

root / target-ppc / op_template.h @ f9fdea6b

History | View | Annotate | Download (4.5 kB)

1 28b6751f bellard
/*
2 3fc6c082 bellard
 *  PowerPC emulation micro-operations for qemu.
3 5fafdf24 ths
 *
4 76a66253 j_mayer
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5 28b6751f bellard
 *
6 28b6751f bellard
 * This library is free software; you can redistribute it and/or
7 28b6751f bellard
 * modify it under the terms of the GNU Lesser General Public
8 28b6751f bellard
 * License as published by the Free Software Foundation; either
9 28b6751f bellard
 * version 2 of the License, or (at your option) any later version.
10 28b6751f bellard
 *
11 28b6751f bellard
 * This library is distributed in the hope that it will be useful,
12 28b6751f bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 28b6751f bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 28b6751f bellard
 * Lesser General Public License for more details.
15 28b6751f bellard
 *
16 28b6751f bellard
 * You should have received a copy of the GNU Lesser General Public
17 28b6751f bellard
 * License along with this library; if not, write to the Free Software
18 28b6751f bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 28b6751f bellard
 */
20 28b6751f bellard
21 9a64fbe4 bellard
/* General purpose registers moves */
22 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T0_gpr, REG) (void)
23 28b6751f bellard
{
24 36081602 j_mayer
    T0 = env->gpr[REG];
25 9a64fbe4 bellard
    RETURN();
26 28b6751f bellard
}
27 28b6751f bellard
28 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T1_gpr, REG) (void)
29 28b6751f bellard
{
30 36081602 j_mayer
    T1 = env->gpr[REG];
31 9a64fbe4 bellard
    RETURN();
32 28b6751f bellard
}
33 28b6751f bellard
34 76a66253 j_mayer
void OPPROTO glue(op_load_gpr_T2_gpr, REG) (void)
35 28b6751f bellard
{
36 36081602 j_mayer
    T2 = env->gpr[REG];
37 9a64fbe4 bellard
    RETURN();
38 28b6751f bellard
}
39 28b6751f bellard
40 76a66253 j_mayer
void OPPROTO glue(op_store_T0_gpr_gpr, REG) (void)
41 28b6751f bellard
{
42 36081602 j_mayer
    env->gpr[REG] = T0;
43 9a64fbe4 bellard
    RETURN();
44 28b6751f bellard
}
45 28b6751f bellard
46 76a66253 j_mayer
void OPPROTO glue(op_store_T1_gpr_gpr, REG) (void)
47 28b6751f bellard
{
48 36081602 j_mayer
    env->gpr[REG] = T1;
49 9a64fbe4 bellard
    RETURN();
50 28b6751f bellard
}
51 28b6751f bellard
52 76a66253 j_mayer
#if 0 // unused
53 76a66253 j_mayer
void OPPROTO glue(op_store_T2_gpr_gpr, REG) (void)
54 28b6751f bellard
{
55 36081602 j_mayer
    env->gpr[REG] = T2;
56 9a64fbe4 bellard
    RETURN();
57 28b6751f bellard
}
58 76a66253 j_mayer
#endif
59 28b6751f bellard
60 a9d9eb8f j_mayer
/* General purpose registers containing vector operands moves */
61 35cdaad6 j_mayer
#if defined(TARGET_PPCEMB)
62 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T0_gpr, REG) (void)
63 0487d6a8 j_mayer
{
64 36081602 j_mayer
    T0_64 = env->gpr[REG];
65 0487d6a8 j_mayer
    RETURN();
66 0487d6a8 j_mayer
}
67 0487d6a8 j_mayer
68 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T1_gpr, REG) (void)
69 0487d6a8 j_mayer
{
70 36081602 j_mayer
    T1_64 = env->gpr[REG];
71 0487d6a8 j_mayer
    RETURN();
72 0487d6a8 j_mayer
}
73 0487d6a8 j_mayer
74 0487d6a8 j_mayer
#if 0 // unused
75 0487d6a8 j_mayer
void OPPROTO glue(op_load_gpr64_T2_gpr, REG) (void)
76 0487d6a8 j_mayer
{
77 36081602 j_mayer
    T2_64 = env->gpr[REG];
78 0487d6a8 j_mayer
    RETURN();
79 0487d6a8 j_mayer
}
80 0487d6a8 j_mayer
#endif
81 0487d6a8 j_mayer
82 0487d6a8 j_mayer
void OPPROTO glue(op_store_T0_gpr64_gpr, REG) (void)
83 0487d6a8 j_mayer
{
84 36081602 j_mayer
    env->gpr[REG] = T0_64;
85 0487d6a8 j_mayer
    RETURN();
86 0487d6a8 j_mayer
}
87 0487d6a8 j_mayer
88 0487d6a8 j_mayer
void OPPROTO glue(op_store_T1_gpr64_gpr, REG) (void)
89 0487d6a8 j_mayer
{
90 36081602 j_mayer
    env->gpr[REG] = T1_64;
91 0487d6a8 j_mayer
    RETURN();
92 0487d6a8 j_mayer
}
93 0487d6a8 j_mayer
94 0487d6a8 j_mayer
#if 0 // unused
95 0487d6a8 j_mayer
void OPPROTO glue(op_store_T2_gpr64_gpr, REG) (void)
96 0487d6a8 j_mayer
{
97 36081602 j_mayer
    env->gpr[REG] = T2_64;
98 0487d6a8 j_mayer
    RETURN();
99 0487d6a8 j_mayer
}
100 0487d6a8 j_mayer
#endif
101 35cdaad6 j_mayer
#endif /* defined(TARGET_PPCEMB) */
102 0487d6a8 j_mayer
103 a9d9eb8f j_mayer
/* Altivec registers moves */
104 a9d9eb8f j_mayer
void OPPROTO glue(op_load_avr_A0_avr, REG) (void)
105 a9d9eb8f j_mayer
{
106 a9d9eb8f j_mayer
    AVR0 = env->avr[REG];
107 a9d9eb8f j_mayer
    RETURN();
108 a9d9eb8f j_mayer
}
109 a9d9eb8f j_mayer
110 a9d9eb8f j_mayer
void OPPROTO glue(op_load_avr_A1_avr, REG) (void)
111 a9d9eb8f j_mayer
{
112 a9d9eb8f j_mayer
    AVR1 = env->avr[REG];
113 a9d9eb8f j_mayer
    RETURN();
114 a9d9eb8f j_mayer
}
115 a9d9eb8f j_mayer
116 a9d9eb8f j_mayer
void OPPROTO glue(op_load_avr_A2_avr, REG) (void)
117 a9d9eb8f j_mayer
{
118 a9d9eb8f j_mayer
    AVR2 = env->avr[REG];
119 a9d9eb8f j_mayer
    RETURN();
120 a9d9eb8f j_mayer
}
121 a9d9eb8f j_mayer
122 a9d9eb8f j_mayer
void OPPROTO glue(op_store_A0_avr_avr, REG) (void)
123 a9d9eb8f j_mayer
{
124 a9d9eb8f j_mayer
    env->avr[REG] = AVR0;
125 a9d9eb8f j_mayer
    RETURN();
126 a9d9eb8f j_mayer
}
127 a9d9eb8f j_mayer
128 a9d9eb8f j_mayer
void OPPROTO glue(op_store_A1_avr_avr, REG) (void)
129 a9d9eb8f j_mayer
{
130 a9d9eb8f j_mayer
    env->avr[REG] = AVR1;
131 a9d9eb8f j_mayer
    RETURN();
132 a9d9eb8f j_mayer
}
133 a9d9eb8f j_mayer
134 a9d9eb8f j_mayer
#if 0 // unused
135 a9d9eb8f j_mayer
void OPPROTO glue(op_store_A2_avr_avr, REG) (void)
136 a9d9eb8f j_mayer
{
137 a9d9eb8f j_mayer
    env->avr[REG] = AVR2;
138 a9d9eb8f j_mayer
    RETURN();
139 a9d9eb8f j_mayer
}
140 a9d9eb8f j_mayer
#endif
141 a9d9eb8f j_mayer
142 28b6751f bellard
#if REG <= 7
143 9a64fbe4 bellard
/* Condition register moves */
144 76a66253 j_mayer
void OPPROTO glue(op_load_crf_T0_crf, REG) (void)
145 28b6751f bellard
{
146 36081602 j_mayer
    T0 = env->crf[REG];
147 9a64fbe4 bellard
    RETURN();
148 28b6751f bellard
}
149 28b6751f bellard
150 76a66253 j_mayer
void OPPROTO glue(op_load_crf_T1_crf, REG) (void)
151 28b6751f bellard
{
152 36081602 j_mayer
    T1 = env->crf[REG];
153 9a64fbe4 bellard
    RETURN();
154 28b6751f bellard
}
155 28b6751f bellard
156 76a66253 j_mayer
void OPPROTO glue(op_store_T0_crf_crf, REG) (void)
157 28b6751f bellard
{
158 36081602 j_mayer
    env->crf[REG] = T0;
159 9a64fbe4 bellard
    RETURN();
160 28b6751f bellard
}
161 28b6751f bellard
162 76a66253 j_mayer
void OPPROTO glue(op_store_T1_crf_crf, REG) (void)
163 28b6751f bellard
{
164 36081602 j_mayer
    env->crf[REG] = T1;
165 9a64fbe4 bellard
    RETURN();
166 28b6751f bellard
}
167 28b6751f bellard
168 fb0eaffc bellard
/* Floating point condition and status register moves */
169 76a66253 j_mayer
void OPPROTO glue(op_load_fpscr_T0_fpscr, REG) (void)
170 fb0eaffc bellard
{
171 36081602 j_mayer
    T0 = env->fpscr[REG];
172 fb0eaffc bellard
    RETURN();
173 fb0eaffc bellard
}
174 fb0eaffc bellard
175 fb0eaffc bellard
#if REG == 0
176 76a66253 j_mayer
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
177 fb0eaffc bellard
{
178 36081602 j_mayer
    env->fpscr[REG] = (env->fpscr[REG] & 0x9) | (T0 & ~0x9);
179 fb0eaffc bellard
    RETURN();
180 fb0eaffc bellard
}
181 fb0eaffc bellard
182 76a66253 j_mayer
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void)
183 fb0eaffc bellard
{
184 36081602 j_mayer
    env->fpscr[REG] = (env->fpscr[REG] & 0x9);
185 fb0eaffc bellard
    RETURN();
186 fb0eaffc bellard
}
187 fb0eaffc bellard
#else
188 76a66253 j_mayer
void OPPROTO glue(op_store_T0_fpscr_fpscr, REG) (void)
189 fb0eaffc bellard
{
190 36081602 j_mayer
    env->fpscr[REG] = T0;
191 fb0eaffc bellard
    RETURN();
192 fb0eaffc bellard
}
193 fb0eaffc bellard
194 76a66253 j_mayer
void OPPROTO glue(op_clear_fpscr_fpscr, REG) (void)
195 fb0eaffc bellard
{
196 36081602 j_mayer
    env->fpscr[REG] = 0x0;
197 fb0eaffc bellard
    RETURN();
198 fb0eaffc bellard
}
199 fb0eaffc bellard
#endif
200 fb0eaffc bellard
201 28b6751f bellard
#endif /* REG <= 7 */
202 28b6751f bellard
203 fb0eaffc bellard
/* floating point registers moves */
204 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT0_fpr, REG) (void)
205 28b6751f bellard
{
206 28b6751f bellard
    FT0 = env->fpr[REG];
207 fb0eaffc bellard
    RETURN();
208 28b6751f bellard
}
209 28b6751f bellard
210 76a66253 j_mayer
void OPPROTO glue(op_store_FT0_fpr_fpr, REG) (void)
211 28b6751f bellard
{
212 28b6751f bellard
    env->fpr[REG] = FT0;
213 fb0eaffc bellard
    RETURN();
214 fb0eaffc bellard
}
215 fb0eaffc bellard
216 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT1_fpr, REG) (void)
217 fb0eaffc bellard
{
218 fb0eaffc bellard
    FT1 = env->fpr[REG];
219 fb0eaffc bellard
    RETURN();
220 fb0eaffc bellard
}
221 fb0eaffc bellard
222 76a66253 j_mayer
void OPPROTO glue(op_store_FT1_fpr_fpr, REG) (void)
223 fb0eaffc bellard
{
224 fb0eaffc bellard
    env->fpr[REG] = FT1;
225 fb0eaffc bellard
    RETURN();
226 fb0eaffc bellard
}
227 fb0eaffc bellard
228 76a66253 j_mayer
void OPPROTO glue(op_load_fpr_FT2_fpr, REG) (void)
229 fb0eaffc bellard
{
230 fb0eaffc bellard
    FT2 = env->fpr[REG];
231 fb0eaffc bellard
    RETURN();
232 fb0eaffc bellard
}
233 fb0eaffc bellard
234 76a66253 j_mayer
#if 0 // unused
235 76a66253 j_mayer
void OPPROTO glue(op_store_FT2_fpr_fpr, REG) (void)
236 fb0eaffc bellard
{
237 fb0eaffc bellard
    env->fpr[REG] = FT2;
238 fb0eaffc bellard
    RETURN();
239 28b6751f bellard
}
240 9a64fbe4 bellard
#endif
241 9a64fbe4 bellard
242 28b6751f bellard
#undef REG