root / target-alpha / op.c @ 615e2dba
History | View | Annotate | Download (14.5 kB)
1 | 4c9649a9 | j_mayer | /*
|
---|---|---|---|
2 | 4c9649a9 | j_mayer | * Alpha emulation cpu micro-operations for qemu.
|
3 | 5fafdf24 | ths | *
|
4 | 4c9649a9 | j_mayer | * Copyright (c) 2007 Jocelyn Mayer
|
5 | 4c9649a9 | j_mayer | *
|
6 | 4c9649a9 | j_mayer | * This library is free software; you can redistribute it and/or
|
7 | 4c9649a9 | j_mayer | * modify it under the terms of the GNU Lesser General Public
|
8 | 4c9649a9 | j_mayer | * License as published by the Free Software Foundation; either
|
9 | 4c9649a9 | j_mayer | * version 2 of the License, or (at your option) any later version.
|
10 | 4c9649a9 | j_mayer | *
|
11 | 4c9649a9 | j_mayer | * This library is distributed in the hope that it will be useful,
|
12 | 4c9649a9 | j_mayer | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 4c9649a9 | j_mayer | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | 4c9649a9 | j_mayer | * Lesser General Public License for more details.
|
15 | 4c9649a9 | j_mayer | *
|
16 | 4c9649a9 | j_mayer | * You should have received a copy of the GNU Lesser General Public
|
17 | 4c9649a9 | j_mayer | * License along with this library; if not, write to the Free Software
|
18 | 4c9649a9 | j_mayer | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19 | 4c9649a9 | j_mayer | */
|
20 | 4c9649a9 | j_mayer | |
21 | 4c9649a9 | j_mayer | #define DEBUG_OP
|
22 | 4c9649a9 | j_mayer | |
23 | 4c9649a9 | j_mayer | #include "config.h" |
24 | 4c9649a9 | j_mayer | #include "exec.h" |
25 | 4c9649a9 | j_mayer | |
26 | 4c9649a9 | j_mayer | #include "op_helper.h" |
27 | 4c9649a9 | j_mayer | |
28 | 4c9649a9 | j_mayer | #define REG 0 |
29 | 4c9649a9 | j_mayer | #include "op_template.h" |
30 | 4c9649a9 | j_mayer | |
31 | 4c9649a9 | j_mayer | #define REG 1 |
32 | 4c9649a9 | j_mayer | #include "op_template.h" |
33 | 4c9649a9 | j_mayer | |
34 | 4c9649a9 | j_mayer | #define REG 2 |
35 | 4c9649a9 | j_mayer | #include "op_template.h" |
36 | 4c9649a9 | j_mayer | |
37 | 4c9649a9 | j_mayer | #define REG 3 |
38 | 4c9649a9 | j_mayer | #include "op_template.h" |
39 | 4c9649a9 | j_mayer | |
40 | 4c9649a9 | j_mayer | #define REG 4 |
41 | 4c9649a9 | j_mayer | #include "op_template.h" |
42 | 4c9649a9 | j_mayer | |
43 | 4c9649a9 | j_mayer | #define REG 5 |
44 | 4c9649a9 | j_mayer | #include "op_template.h" |
45 | 4c9649a9 | j_mayer | |
46 | 4c9649a9 | j_mayer | #define REG 6 |
47 | 4c9649a9 | j_mayer | #include "op_template.h" |
48 | 4c9649a9 | j_mayer | |
49 | 4c9649a9 | j_mayer | #define REG 7 |
50 | 4c9649a9 | j_mayer | #include "op_template.h" |
51 | 4c9649a9 | j_mayer | |
52 | 4c9649a9 | j_mayer | #define REG 8 |
53 | 4c9649a9 | j_mayer | #include "op_template.h" |
54 | 4c9649a9 | j_mayer | |
55 | 4c9649a9 | j_mayer | #define REG 9 |
56 | 4c9649a9 | j_mayer | #include "op_template.h" |
57 | 4c9649a9 | j_mayer | |
58 | 4c9649a9 | j_mayer | #define REG 10 |
59 | 4c9649a9 | j_mayer | #include "op_template.h" |
60 | 4c9649a9 | j_mayer | |
61 | 4c9649a9 | j_mayer | #define REG 11 |
62 | 4c9649a9 | j_mayer | #include "op_template.h" |
63 | 4c9649a9 | j_mayer | |
64 | 4c9649a9 | j_mayer | #define REG 12 |
65 | 4c9649a9 | j_mayer | #include "op_template.h" |
66 | 4c9649a9 | j_mayer | |
67 | 4c9649a9 | j_mayer | #define REG 13 |
68 | 4c9649a9 | j_mayer | #include "op_template.h" |
69 | 4c9649a9 | j_mayer | |
70 | 4c9649a9 | j_mayer | #define REG 14 |
71 | 4c9649a9 | j_mayer | #include "op_template.h" |
72 | 4c9649a9 | j_mayer | |
73 | 4c9649a9 | j_mayer | #define REG 15 |
74 | 4c9649a9 | j_mayer | #include "op_template.h" |
75 | 4c9649a9 | j_mayer | |
76 | 4c9649a9 | j_mayer | #define REG 16 |
77 | 4c9649a9 | j_mayer | #include "op_template.h" |
78 | 4c9649a9 | j_mayer | |
79 | 4c9649a9 | j_mayer | #define REG 17 |
80 | 4c9649a9 | j_mayer | #include "op_template.h" |
81 | 4c9649a9 | j_mayer | |
82 | 4c9649a9 | j_mayer | #define REG 18 |
83 | 4c9649a9 | j_mayer | #include "op_template.h" |
84 | 4c9649a9 | j_mayer | |
85 | 4c9649a9 | j_mayer | #define REG 19 |
86 | 4c9649a9 | j_mayer | #include "op_template.h" |
87 | 4c9649a9 | j_mayer | |
88 | 4c9649a9 | j_mayer | #define REG 20 |
89 | 4c9649a9 | j_mayer | #include "op_template.h" |
90 | 4c9649a9 | j_mayer | |
91 | 4c9649a9 | j_mayer | #define REG 21 |
92 | 4c9649a9 | j_mayer | #include "op_template.h" |
93 | 4c9649a9 | j_mayer | |
94 | 4c9649a9 | j_mayer | #define REG 22 |
95 | 4c9649a9 | j_mayer | #include "op_template.h" |
96 | 4c9649a9 | j_mayer | |
97 | 4c9649a9 | j_mayer | #define REG 23 |
98 | 4c9649a9 | j_mayer | #include "op_template.h" |
99 | 4c9649a9 | j_mayer | |
100 | 4c9649a9 | j_mayer | #define REG 24 |
101 | 4c9649a9 | j_mayer | #include "op_template.h" |
102 | 4c9649a9 | j_mayer | |
103 | 4c9649a9 | j_mayer | #define REG 25 |
104 | 4c9649a9 | j_mayer | #include "op_template.h" |
105 | 4c9649a9 | j_mayer | |
106 | 4c9649a9 | j_mayer | #define REG 26 |
107 | 4c9649a9 | j_mayer | #include "op_template.h" |
108 | 4c9649a9 | j_mayer | |
109 | 4c9649a9 | j_mayer | #define REG 27 |
110 | 4c9649a9 | j_mayer | #include "op_template.h" |
111 | 4c9649a9 | j_mayer | |
112 | 4c9649a9 | j_mayer | #define REG 28 |
113 | 4c9649a9 | j_mayer | #include "op_template.h" |
114 | 4c9649a9 | j_mayer | |
115 | 4c9649a9 | j_mayer | #define REG 29 |
116 | 4c9649a9 | j_mayer | #include "op_template.h" |
117 | 4c9649a9 | j_mayer | |
118 | 4c9649a9 | j_mayer | #define REG 30 |
119 | 4c9649a9 | j_mayer | #include "op_template.h" |
120 | 4c9649a9 | j_mayer | |
121 | 4c9649a9 | j_mayer | #define REG 31 |
122 | 4c9649a9 | j_mayer | #include "op_template.h" |
123 | 4c9649a9 | j_mayer | |
124 | 4c9649a9 | j_mayer | /* Debug stuff */
|
125 | 4c9649a9 | j_mayer | void OPPROTO op_no_op (void) |
126 | 4c9649a9 | j_mayer | { |
127 | 4c9649a9 | j_mayer | #if !defined (DEBUG_OP)
|
128 | 4c9649a9 | j_mayer | __asm__ __volatile__("nop" : : : "memory"); |
129 | 4c9649a9 | j_mayer | #endif
|
130 | 4c9649a9 | j_mayer | RETURN(); |
131 | 4c9649a9 | j_mayer | } |
132 | 4c9649a9 | j_mayer | |
133 | 4c9649a9 | j_mayer | void OPPROTO op_tb_flush (void) |
134 | 4c9649a9 | j_mayer | { |
135 | 4c9649a9 | j_mayer | helper_tb_flush(); |
136 | 4c9649a9 | j_mayer | RETURN(); |
137 | 4c9649a9 | j_mayer | } |
138 | 4c9649a9 | j_mayer | |
139 | 4c9649a9 | j_mayer | /* Load and stores */
|
140 | 4c9649a9 | j_mayer | #define MEMSUFFIX _raw
|
141 | 4c9649a9 | j_mayer | #include "op_mem.h" |
142 | 4c9649a9 | j_mayer | #if !defined(CONFIG_USER_ONLY)
|
143 | 4c9649a9 | j_mayer | #define MEMSUFFIX _kernel
|
144 | 4c9649a9 | j_mayer | #include "op_mem.h" |
145 | b1806c9e | j_mayer | #define MEMSUFFIX _executive
|
146 | b1806c9e | j_mayer | #include "op_mem.h" |
147 | b1806c9e | j_mayer | #define MEMSUFFIX _supervisor
|
148 | b1806c9e | j_mayer | #include "op_mem.h" |
149 | b1806c9e | j_mayer | #define MEMSUFFIX _user
|
150 | b1806c9e | j_mayer | #include "op_mem.h" |
151 | b1806c9e | j_mayer | /* This is used for pal modes */
|
152 | 4c9649a9 | j_mayer | #define MEMSUFFIX _data
|
153 | 4c9649a9 | j_mayer | #include "op_mem.h" |
154 | 4c9649a9 | j_mayer | #endif
|
155 | 4c9649a9 | j_mayer | |
156 | 4c9649a9 | j_mayer | /* Special operation for load and store */
|
157 | 4c9649a9 | j_mayer | void OPPROTO op_n7 (void) |
158 | 4c9649a9 | j_mayer | { |
159 | 4c9649a9 | j_mayer | T0 &= ~(uint64_t)0x7;
|
160 | 4c9649a9 | j_mayer | RETURN(); |
161 | 4c9649a9 | j_mayer | } |
162 | 4c9649a9 | j_mayer | |
163 | 4c9649a9 | j_mayer | /* Misc */
|
164 | 4c9649a9 | j_mayer | void OPPROTO op_excp (void) |
165 | 4c9649a9 | j_mayer | { |
166 | 4c9649a9 | j_mayer | helper_excp(PARAM(1), PARAM(2)); |
167 | 4c9649a9 | j_mayer | RETURN(); |
168 | 4c9649a9 | j_mayer | } |
169 | 4c9649a9 | j_mayer | |
170 | 4c9649a9 | j_mayer | void OPPROTO op_load_amask (void) |
171 | 4c9649a9 | j_mayer | { |
172 | 4c9649a9 | j_mayer | helper_amask(); |
173 | 4c9649a9 | j_mayer | RETURN(); |
174 | 4c9649a9 | j_mayer | } |
175 | 4c9649a9 | j_mayer | |
176 | 4c9649a9 | j_mayer | void OPPROTO op_load_pcc (void) |
177 | 4c9649a9 | j_mayer | { |
178 | 4c9649a9 | j_mayer | helper_load_pcc(); |
179 | 4c9649a9 | j_mayer | RETURN(); |
180 | 4c9649a9 | j_mayer | } |
181 | 4c9649a9 | j_mayer | |
182 | 4c9649a9 | j_mayer | void OPPROTO op_load_implver (void) |
183 | 4c9649a9 | j_mayer | { |
184 | 4c9649a9 | j_mayer | helper_load_implver(); |
185 | 4c9649a9 | j_mayer | RETURN(); |
186 | 4c9649a9 | j_mayer | } |
187 | 4c9649a9 | j_mayer | |
188 | 4c9649a9 | j_mayer | void OPPROTO op_load_fpcr (void) |
189 | 4c9649a9 | j_mayer | { |
190 | 4c9649a9 | j_mayer | helper_load_fpcr(); |
191 | 4c9649a9 | j_mayer | RETURN(); |
192 | 4c9649a9 | j_mayer | } |
193 | 4c9649a9 | j_mayer | |
194 | 4c9649a9 | j_mayer | void OPPROTO op_store_fpcr (void) |
195 | 4c9649a9 | j_mayer | { |
196 | 4c9649a9 | j_mayer | helper_store_fpcr(); |
197 | 4c9649a9 | j_mayer | RETURN(); |
198 | 4c9649a9 | j_mayer | } |
199 | 4c9649a9 | j_mayer | |
200 | 4c9649a9 | j_mayer | void OPPROTO op_load_irf (void) |
201 | 4c9649a9 | j_mayer | { |
202 | 4c9649a9 | j_mayer | helper_load_irf(); |
203 | 4c9649a9 | j_mayer | RETURN(); |
204 | 4c9649a9 | j_mayer | } |
205 | 4c9649a9 | j_mayer | |
206 | 4c9649a9 | j_mayer | void OPPROTO op_set_irf (void) |
207 | 4c9649a9 | j_mayer | { |
208 | 4c9649a9 | j_mayer | helper_set_irf(); |
209 | 4c9649a9 | j_mayer | RETURN(); |
210 | 4c9649a9 | j_mayer | } |
211 | 4c9649a9 | j_mayer | |
212 | 4c9649a9 | j_mayer | void OPPROTO op_clear_irf (void) |
213 | 4c9649a9 | j_mayer | { |
214 | 4c9649a9 | j_mayer | helper_clear_irf(); |
215 | 4c9649a9 | j_mayer | RETURN(); |
216 | 4c9649a9 | j_mayer | } |
217 | 4c9649a9 | j_mayer | |
218 | 4c9649a9 | j_mayer | void OPPROTO op_exit_tb (void) |
219 | 4c9649a9 | j_mayer | { |
220 | 4c9649a9 | j_mayer | EXIT_TB(); |
221 | 4c9649a9 | j_mayer | } |
222 | 4c9649a9 | j_mayer | |
223 | 4c9649a9 | j_mayer | /* Arithmetic */
|
224 | 4c9649a9 | j_mayer | void OPPROTO op_addq (void) |
225 | 4c9649a9 | j_mayer | { |
226 | 4c9649a9 | j_mayer | T0 += T1; |
227 | 4c9649a9 | j_mayer | RETURN(); |
228 | 4c9649a9 | j_mayer | } |
229 | 4c9649a9 | j_mayer | |
230 | 4c9649a9 | j_mayer | void OPPROTO op_addqv (void) |
231 | 4c9649a9 | j_mayer | { |
232 | 4c9649a9 | j_mayer | helper_addqv(); |
233 | 4c9649a9 | j_mayer | RETURN(); |
234 | 4c9649a9 | j_mayer | } |
235 | 4c9649a9 | j_mayer | |
236 | 4c9649a9 | j_mayer | void OPPROTO op_addl (void) |
237 | 4c9649a9 | j_mayer | { |
238 | 4c9649a9 | j_mayer | T0 = (int64_t)((int32_t)(T0 + T1)); |
239 | 4c9649a9 | j_mayer | RETURN(); |
240 | 4c9649a9 | j_mayer | } |
241 | 4c9649a9 | j_mayer | |
242 | 4c9649a9 | j_mayer | void OPPROTO op_addlv (void) |
243 | 4c9649a9 | j_mayer | { |
244 | 4c9649a9 | j_mayer | helper_addlv(); |
245 | 4c9649a9 | j_mayer | RETURN(); |
246 | 4c9649a9 | j_mayer | } |
247 | 4c9649a9 | j_mayer | |
248 | 4c9649a9 | j_mayer | void OPPROTO op_subq (void) |
249 | 4c9649a9 | j_mayer | { |
250 | 4c9649a9 | j_mayer | T0 -= T1; |
251 | 4c9649a9 | j_mayer | RETURN(); |
252 | 4c9649a9 | j_mayer | } |
253 | 4c9649a9 | j_mayer | |
254 | 4c9649a9 | j_mayer | void OPPROTO op_subqv (void) |
255 | 4c9649a9 | j_mayer | { |
256 | 4c9649a9 | j_mayer | helper_subqv(); |
257 | 4c9649a9 | j_mayer | RETURN(); |
258 | 4c9649a9 | j_mayer | } |
259 | 4c9649a9 | j_mayer | |
260 | 4c9649a9 | j_mayer | void OPPROTO op_subl (void) |
261 | 4c9649a9 | j_mayer | { |
262 | 4c9649a9 | j_mayer | T0 = (int64_t)((int32_t)(T0 - T1)); |
263 | 4c9649a9 | j_mayer | RETURN(); |
264 | 4c9649a9 | j_mayer | } |
265 | 4c9649a9 | j_mayer | |
266 | 4c9649a9 | j_mayer | void OPPROTO op_sublv (void) |
267 | 4c9649a9 | j_mayer | { |
268 | 4c9649a9 | j_mayer | helper_sublv(); |
269 | 4c9649a9 | j_mayer | RETURN(); |
270 | 4c9649a9 | j_mayer | } |
271 | 4c9649a9 | j_mayer | |
272 | 4c9649a9 | j_mayer | void OPPROTO op_s4 (void) |
273 | 4c9649a9 | j_mayer | { |
274 | 4c9649a9 | j_mayer | T0 <<= 2;
|
275 | 4c9649a9 | j_mayer | RETURN(); |
276 | 4c9649a9 | j_mayer | } |
277 | 4c9649a9 | j_mayer | |
278 | 4c9649a9 | j_mayer | void OPPROTO op_s8 (void) |
279 | 4c9649a9 | j_mayer | { |
280 | 4c9649a9 | j_mayer | T0 <<= 3;
|
281 | 4c9649a9 | j_mayer | RETURN(); |
282 | 4c9649a9 | j_mayer | } |
283 | 4c9649a9 | j_mayer | |
284 | 4c9649a9 | j_mayer | void OPPROTO op_mull (void) |
285 | 4c9649a9 | j_mayer | { |
286 | 4c9649a9 | j_mayer | T0 = (int64_t)((int32_t)T0 * (int32_t)T1); |
287 | 4c9649a9 | j_mayer | RETURN(); |
288 | 4c9649a9 | j_mayer | } |
289 | 4c9649a9 | j_mayer | |
290 | 4c9649a9 | j_mayer | void OPPROTO op_mullv (void) |
291 | 4c9649a9 | j_mayer | { |
292 | 4c9649a9 | j_mayer | helper_mullv(); |
293 | 4c9649a9 | j_mayer | RETURN(); |
294 | 4c9649a9 | j_mayer | } |
295 | 4c9649a9 | j_mayer | |
296 | 4c9649a9 | j_mayer | void OPPROTO op_mulq (void) |
297 | 4c9649a9 | j_mayer | { |
298 | 4c9649a9 | j_mayer | T0 *= T1; |
299 | 4c9649a9 | j_mayer | RETURN(); |
300 | 4c9649a9 | j_mayer | } |
301 | 4c9649a9 | j_mayer | |
302 | 4c9649a9 | j_mayer | void OPPROTO op_mulqv (void) |
303 | 4c9649a9 | j_mayer | { |
304 | 4c9649a9 | j_mayer | helper_mulqv(); |
305 | 4c9649a9 | j_mayer | RETURN(); |
306 | 4c9649a9 | j_mayer | } |
307 | 4c9649a9 | j_mayer | |
308 | 4c9649a9 | j_mayer | void OPPROTO op_umulh (void) |
309 | 4c9649a9 | j_mayer | { |
310 | 4c9649a9 | j_mayer | helper_umulh(); |
311 | 4c9649a9 | j_mayer | RETURN(); |
312 | 4c9649a9 | j_mayer | } |
313 | 4c9649a9 | j_mayer | |
314 | 4c9649a9 | j_mayer | /* Logical */
|
315 | 4c9649a9 | j_mayer | void OPPROTO op_and (void) |
316 | 4c9649a9 | j_mayer | { |
317 | 4c9649a9 | j_mayer | T0 &= T1; |
318 | 4c9649a9 | j_mayer | RETURN(); |
319 | 4c9649a9 | j_mayer | } |
320 | 4c9649a9 | j_mayer | |
321 | 4c9649a9 | j_mayer | void OPPROTO op_bic (void) |
322 | 4c9649a9 | j_mayer | { |
323 | 4c9649a9 | j_mayer | T0 &= ~T1; |
324 | 4c9649a9 | j_mayer | RETURN(); |
325 | 4c9649a9 | j_mayer | } |
326 | 4c9649a9 | j_mayer | |
327 | 4c9649a9 | j_mayer | void OPPROTO op_bis (void) |
328 | 4c9649a9 | j_mayer | { |
329 | 4c9649a9 | j_mayer | T0 |= T1; |
330 | 4c9649a9 | j_mayer | RETURN(); |
331 | 4c9649a9 | j_mayer | } |
332 | 4c9649a9 | j_mayer | |
333 | 4c9649a9 | j_mayer | void OPPROTO op_eqv (void) |
334 | 4c9649a9 | j_mayer | { |
335 | 4c9649a9 | j_mayer | T0 ^= ~T1; |
336 | 4c9649a9 | j_mayer | RETURN(); |
337 | 4c9649a9 | j_mayer | } |
338 | 4c9649a9 | j_mayer | |
339 | 4c9649a9 | j_mayer | void OPPROTO op_ornot (void) |
340 | 4c9649a9 | j_mayer | { |
341 | 4c9649a9 | j_mayer | T0 |= ~T1; |
342 | 4c9649a9 | j_mayer | RETURN(); |
343 | 4c9649a9 | j_mayer | } |
344 | 4c9649a9 | j_mayer | |
345 | 4c9649a9 | j_mayer | void OPPROTO op_xor (void) |
346 | 4c9649a9 | j_mayer | { |
347 | 4c9649a9 | j_mayer | T0 ^= T1; |
348 | 4c9649a9 | j_mayer | RETURN(); |
349 | 4c9649a9 | j_mayer | } |
350 | 4c9649a9 | j_mayer | |
351 | 4c9649a9 | j_mayer | void OPPROTO op_sll (void) |
352 | 4c9649a9 | j_mayer | { |
353 | 4c9649a9 | j_mayer | T0 <<= T1; |
354 | 4c9649a9 | j_mayer | RETURN(); |
355 | 4c9649a9 | j_mayer | } |
356 | 4c9649a9 | j_mayer | |
357 | 4c9649a9 | j_mayer | void OPPROTO op_srl (void) |
358 | 4c9649a9 | j_mayer | { |
359 | 4c9649a9 | j_mayer | T0 >>= T1; |
360 | 4c9649a9 | j_mayer | RETURN(); |
361 | 4c9649a9 | j_mayer | } |
362 | 4c9649a9 | j_mayer | |
363 | 4c9649a9 | j_mayer | void OPPROTO op_sra (void) |
364 | 4c9649a9 | j_mayer | { |
365 | 4c9649a9 | j_mayer | T0 = (int64_t)T0 >> T1; |
366 | 4c9649a9 | j_mayer | RETURN(); |
367 | 4c9649a9 | j_mayer | } |
368 | 4c9649a9 | j_mayer | |
369 | 4c9649a9 | j_mayer | void OPPROTO op_sextb (void) |
370 | 4c9649a9 | j_mayer | { |
371 | 4c9649a9 | j_mayer | T0 = (int64_t)((int8_t)T0); |
372 | 4c9649a9 | j_mayer | RETURN(); |
373 | 4c9649a9 | j_mayer | } |
374 | 4c9649a9 | j_mayer | |
375 | 4c9649a9 | j_mayer | void OPPROTO op_sextw (void) |
376 | 4c9649a9 | j_mayer | { |
377 | 4c9649a9 | j_mayer | T0 = (int64_t)((int16_t)T0); |
378 | 4c9649a9 | j_mayer | RETURN(); |
379 | 4c9649a9 | j_mayer | |
380 | 4c9649a9 | j_mayer | } |
381 | 4c9649a9 | j_mayer | |
382 | 4c9649a9 | j_mayer | void OPPROTO op_ctpop (void) |
383 | 4c9649a9 | j_mayer | { |
384 | 4c9649a9 | j_mayer | helper_ctpop(); |
385 | 4c9649a9 | j_mayer | RETURN(); |
386 | 4c9649a9 | j_mayer | } |
387 | 4c9649a9 | j_mayer | |
388 | 4c9649a9 | j_mayer | void OPPROTO op_ctlz (void) |
389 | 4c9649a9 | j_mayer | { |
390 | 4c9649a9 | j_mayer | helper_ctlz(); |
391 | 4c9649a9 | j_mayer | RETURN(); |
392 | 4c9649a9 | j_mayer | } |
393 | 4c9649a9 | j_mayer | |
394 | 4c9649a9 | j_mayer | void OPPROTO op_cttz (void) |
395 | 4c9649a9 | j_mayer | { |
396 | 4c9649a9 | j_mayer | helper_cttz(); |
397 | 4c9649a9 | j_mayer | RETURN(); |
398 | 4c9649a9 | j_mayer | } |
399 | 4c9649a9 | j_mayer | |
400 | 4c9649a9 | j_mayer | void OPPROTO op_mskbl (void) |
401 | 4c9649a9 | j_mayer | { |
402 | 4c9649a9 | j_mayer | helper_mskbl(); |
403 | 4c9649a9 | j_mayer | RETURN(); |
404 | 4c9649a9 | j_mayer | } |
405 | 4c9649a9 | j_mayer | |
406 | 4c9649a9 | j_mayer | void OPPROTO op_extbl (void) |
407 | 4c9649a9 | j_mayer | { |
408 | 4c9649a9 | j_mayer | helper_extbl(); |
409 | 4c9649a9 | j_mayer | RETURN(); |
410 | 4c9649a9 | j_mayer | } |
411 | 4c9649a9 | j_mayer | |
412 | 4c9649a9 | j_mayer | void OPPROTO op_insbl (void) |
413 | 4c9649a9 | j_mayer | { |
414 | 4c9649a9 | j_mayer | helper_insbl(); |
415 | 4c9649a9 | j_mayer | RETURN(); |
416 | 4c9649a9 | j_mayer | } |
417 | 4c9649a9 | j_mayer | |
418 | 4c9649a9 | j_mayer | void OPPROTO op_mskwl (void) |
419 | 4c9649a9 | j_mayer | { |
420 | 4c9649a9 | j_mayer | helper_mskwl(); |
421 | 4c9649a9 | j_mayer | RETURN(); |
422 | 4c9649a9 | j_mayer | } |
423 | 4c9649a9 | j_mayer | |
424 | 4c9649a9 | j_mayer | void OPPROTO op_extwl (void) |
425 | 4c9649a9 | j_mayer | { |
426 | 4c9649a9 | j_mayer | helper_extwl(); |
427 | 4c9649a9 | j_mayer | RETURN(); |
428 | 4c9649a9 | j_mayer | } |
429 | 4c9649a9 | j_mayer | |
430 | 4c9649a9 | j_mayer | void OPPROTO op_inswl (void) |
431 | 4c9649a9 | j_mayer | { |
432 | 4c9649a9 | j_mayer | helper_inswl(); |
433 | 4c9649a9 | j_mayer | RETURN(); |
434 | 4c9649a9 | j_mayer | } |
435 | 4c9649a9 | j_mayer | |
436 | 4c9649a9 | j_mayer | void OPPROTO op_mskll (void) |
437 | 4c9649a9 | j_mayer | { |
438 | 4c9649a9 | j_mayer | helper_mskll(); |
439 | 4c9649a9 | j_mayer | RETURN(); |
440 | 4c9649a9 | j_mayer | } |
441 | 4c9649a9 | j_mayer | |
442 | 4c9649a9 | j_mayer | void OPPROTO op_extll (void) |
443 | 4c9649a9 | j_mayer | { |
444 | 4c9649a9 | j_mayer | helper_extll(); |
445 | 4c9649a9 | j_mayer | RETURN(); |
446 | 4c9649a9 | j_mayer | } |
447 | 4c9649a9 | j_mayer | |
448 | 4c9649a9 | j_mayer | void OPPROTO op_insll (void) |
449 | 4c9649a9 | j_mayer | { |
450 | 4c9649a9 | j_mayer | helper_insll(); |
451 | 4c9649a9 | j_mayer | RETURN(); |
452 | 4c9649a9 | j_mayer | } |
453 | 4c9649a9 | j_mayer | |
454 | 4c9649a9 | j_mayer | void OPPROTO op_zap (void) |
455 | 4c9649a9 | j_mayer | { |
456 | 4c9649a9 | j_mayer | helper_zap(); |
457 | 4c9649a9 | j_mayer | RETURN(); |
458 | 4c9649a9 | j_mayer | } |
459 | 4c9649a9 | j_mayer | |
460 | 4c9649a9 | j_mayer | void OPPROTO op_zapnot (void) |
461 | 4c9649a9 | j_mayer | { |
462 | 4c9649a9 | j_mayer | helper_zapnot(); |
463 | 4c9649a9 | j_mayer | RETURN(); |
464 | 4c9649a9 | j_mayer | } |
465 | 4c9649a9 | j_mayer | |
466 | 4c9649a9 | j_mayer | void OPPROTO op_mskql (void) |
467 | 4c9649a9 | j_mayer | { |
468 | 4c9649a9 | j_mayer | helper_mskql(); |
469 | 4c9649a9 | j_mayer | RETURN(); |
470 | 4c9649a9 | j_mayer | } |
471 | 4c9649a9 | j_mayer | |
472 | 4c9649a9 | j_mayer | void OPPROTO op_extql (void) |
473 | 4c9649a9 | j_mayer | { |
474 | 4c9649a9 | j_mayer | helper_extql(); |
475 | 4c9649a9 | j_mayer | RETURN(); |
476 | 4c9649a9 | j_mayer | } |
477 | 4c9649a9 | j_mayer | |
478 | 4c9649a9 | j_mayer | void OPPROTO op_insql (void) |
479 | 4c9649a9 | j_mayer | { |
480 | 4c9649a9 | j_mayer | helper_insql(); |
481 | 4c9649a9 | j_mayer | RETURN(); |
482 | 4c9649a9 | j_mayer | } |
483 | 4c9649a9 | j_mayer | |
484 | 4c9649a9 | j_mayer | void OPPROTO op_mskwh (void) |
485 | 4c9649a9 | j_mayer | { |
486 | 4c9649a9 | j_mayer | helper_mskwh(); |
487 | 4c9649a9 | j_mayer | RETURN(); |
488 | 4c9649a9 | j_mayer | } |
489 | 4c9649a9 | j_mayer | |
490 | 4c9649a9 | j_mayer | void OPPROTO op_inswh (void) |
491 | 4c9649a9 | j_mayer | { |
492 | 4c9649a9 | j_mayer | helper_inswh(); |
493 | 4c9649a9 | j_mayer | RETURN(); |
494 | 4c9649a9 | j_mayer | } |
495 | 4c9649a9 | j_mayer | |
496 | 4c9649a9 | j_mayer | void OPPROTO op_extwh (void) |
497 | 4c9649a9 | j_mayer | { |
498 | 4c9649a9 | j_mayer | helper_extwh(); |
499 | 4c9649a9 | j_mayer | RETURN(); |
500 | 4c9649a9 | j_mayer | } |
501 | 4c9649a9 | j_mayer | |
502 | 4c9649a9 | j_mayer | void OPPROTO op_msklh (void) |
503 | 4c9649a9 | j_mayer | { |
504 | 4c9649a9 | j_mayer | helper_msklh(); |
505 | 4c9649a9 | j_mayer | RETURN(); |
506 | 4c9649a9 | j_mayer | } |
507 | 4c9649a9 | j_mayer | |
508 | 4c9649a9 | j_mayer | void OPPROTO op_inslh (void) |
509 | 4c9649a9 | j_mayer | { |
510 | 4c9649a9 | j_mayer | helper_inslh(); |
511 | 4c9649a9 | j_mayer | RETURN(); |
512 | 4c9649a9 | j_mayer | } |
513 | 4c9649a9 | j_mayer | |
514 | 4c9649a9 | j_mayer | void OPPROTO op_extlh (void) |
515 | 4c9649a9 | j_mayer | { |
516 | 4c9649a9 | j_mayer | helper_extlh(); |
517 | 4c9649a9 | j_mayer | RETURN(); |
518 | 4c9649a9 | j_mayer | } |
519 | 4c9649a9 | j_mayer | |
520 | 4c9649a9 | j_mayer | void OPPROTO op_mskqh (void) |
521 | 4c9649a9 | j_mayer | { |
522 | 4c9649a9 | j_mayer | helper_mskqh(); |
523 | 4c9649a9 | j_mayer | RETURN(); |
524 | 4c9649a9 | j_mayer | } |
525 | 4c9649a9 | j_mayer | |
526 | 4c9649a9 | j_mayer | void OPPROTO op_insqh (void) |
527 | 4c9649a9 | j_mayer | { |
528 | 4c9649a9 | j_mayer | helper_insqh(); |
529 | 4c9649a9 | j_mayer | RETURN(); |
530 | 4c9649a9 | j_mayer | } |
531 | 4c9649a9 | j_mayer | |
532 | 4c9649a9 | j_mayer | void OPPROTO op_extqh (void) |
533 | 4c9649a9 | j_mayer | { |
534 | 4c9649a9 | j_mayer | helper_extqh(); |
535 | 4c9649a9 | j_mayer | RETURN(); |
536 | 4c9649a9 | j_mayer | } |
537 | 4c9649a9 | j_mayer | |
538 | 4c9649a9 | j_mayer | /* Tests */
|
539 | 4c9649a9 | j_mayer | void OPPROTO op_cmpult (void) |
540 | 4c9649a9 | j_mayer | { |
541 | 4c9649a9 | j_mayer | if (T0 < T1)
|
542 | 4c9649a9 | j_mayer | T0 = 1;
|
543 | 4c9649a9 | j_mayer | else
|
544 | 4c9649a9 | j_mayer | T0 = 0;
|
545 | 4c9649a9 | j_mayer | RETURN(); |
546 | 4c9649a9 | j_mayer | } |
547 | 4c9649a9 | j_mayer | |
548 | 4c9649a9 | j_mayer | void OPPROTO op_cmpule (void) |
549 | 4c9649a9 | j_mayer | { |
550 | 4c9649a9 | j_mayer | if (T0 <= T1)
|
551 | 4c9649a9 | j_mayer | T0 = 1;
|
552 | 4c9649a9 | j_mayer | else
|
553 | 4c9649a9 | j_mayer | T0 = 0;
|
554 | 4c9649a9 | j_mayer | RETURN(); |
555 | 4c9649a9 | j_mayer | } |
556 | 4c9649a9 | j_mayer | |
557 | 4c9649a9 | j_mayer | void OPPROTO op_cmpeq (void) |
558 | 4c9649a9 | j_mayer | { |
559 | 4c9649a9 | j_mayer | if (T0 == T1)
|
560 | 4c9649a9 | j_mayer | T0 = 1;
|
561 | 4c9649a9 | j_mayer | else
|
562 | 4c9649a9 | j_mayer | T0 = 0;
|
563 | 4c9649a9 | j_mayer | RETURN(); |
564 | 4c9649a9 | j_mayer | } |
565 | 4c9649a9 | j_mayer | |
566 | 4c9649a9 | j_mayer | void OPPROTO op_cmplt (void) |
567 | 4c9649a9 | j_mayer | { |
568 | 4c9649a9 | j_mayer | if ((int64_t)T0 < (int64_t)T1)
|
569 | 4c9649a9 | j_mayer | T0 = 1;
|
570 | 4c9649a9 | j_mayer | else
|
571 | 4c9649a9 | j_mayer | T0 = 0;
|
572 | 4c9649a9 | j_mayer | RETURN(); |
573 | 4c9649a9 | j_mayer | } |
574 | 4c9649a9 | j_mayer | |
575 | 4c9649a9 | j_mayer | void OPPROTO op_cmple (void) |
576 | 4c9649a9 | j_mayer | { |
577 | 4c9649a9 | j_mayer | if ((int64_t)T0 <= (int64_t)T1)
|
578 | 4c9649a9 | j_mayer | T0 = 1;
|
579 | 4c9649a9 | j_mayer | else
|
580 | 4c9649a9 | j_mayer | T0 = 0;
|
581 | 4c9649a9 | j_mayer | RETURN(); |
582 | 4c9649a9 | j_mayer | } |
583 | 4c9649a9 | j_mayer | |
584 | 4c9649a9 | j_mayer | void OPPROTO op_cmpbge (void) |
585 | 4c9649a9 | j_mayer | { |
586 | 4c9649a9 | j_mayer | helper_cmpbge(); |
587 | 4c9649a9 | j_mayer | RETURN(); |
588 | 4c9649a9 | j_mayer | } |
589 | 4c9649a9 | j_mayer | |
590 | 4c9649a9 | j_mayer | void OPPROTO op_cmpeqz (void) |
591 | 4c9649a9 | j_mayer | { |
592 | 4c9649a9 | j_mayer | if (T0 == 0) |
593 | 4c9649a9 | j_mayer | T0 = 1;
|
594 | 4c9649a9 | j_mayer | else
|
595 | 4c9649a9 | j_mayer | T0 = 0;
|
596 | 4c9649a9 | j_mayer | RETURN(); |
597 | 4c9649a9 | j_mayer | } |
598 | 4c9649a9 | j_mayer | |
599 | 4c9649a9 | j_mayer | void OPPROTO op_cmpnez (void) |
600 | 4c9649a9 | j_mayer | { |
601 | 4c9649a9 | j_mayer | if (T0 != 0) |
602 | 4c9649a9 | j_mayer | T0 = 1;
|
603 | 4c9649a9 | j_mayer | else
|
604 | 4c9649a9 | j_mayer | T0 = 0;
|
605 | 4c9649a9 | j_mayer | RETURN(); |
606 | 4c9649a9 | j_mayer | } |
607 | 4c9649a9 | j_mayer | |
608 | 4c9649a9 | j_mayer | void OPPROTO op_cmpltz (void) |
609 | 4c9649a9 | j_mayer | { |
610 | 4c9649a9 | j_mayer | if ((int64_t)T0 < 0) |
611 | 4c9649a9 | j_mayer | T0 = 1;
|
612 | 4c9649a9 | j_mayer | else
|
613 | 4c9649a9 | j_mayer | T0 = 0;
|
614 | 4c9649a9 | j_mayer | RETURN(); |
615 | 4c9649a9 | j_mayer | } |
616 | 4c9649a9 | j_mayer | |
617 | 4c9649a9 | j_mayer | void OPPROTO op_cmplez (void) |
618 | 4c9649a9 | j_mayer | { |
619 | 4c9649a9 | j_mayer | if ((int64_t)T0 <= 0) |
620 | 4c9649a9 | j_mayer | T0 = 1;
|
621 | 4c9649a9 | j_mayer | else
|
622 | 4c9649a9 | j_mayer | T0 = 0;
|
623 | 4c9649a9 | j_mayer | RETURN(); |
624 | 4c9649a9 | j_mayer | } |
625 | 4c9649a9 | j_mayer | |
626 | 4c9649a9 | j_mayer | void OPPROTO op_cmpgtz (void) |
627 | 4c9649a9 | j_mayer | { |
628 | 4c9649a9 | j_mayer | if ((int64_t)T0 > 0) |
629 | 4c9649a9 | j_mayer | T0 = 1;
|
630 | 4c9649a9 | j_mayer | else
|
631 | 4c9649a9 | j_mayer | T0 = 0;
|
632 | 4c9649a9 | j_mayer | RETURN(); |
633 | 4c9649a9 | j_mayer | } |
634 | 4c9649a9 | j_mayer | |
635 | 4c9649a9 | j_mayer | void OPPROTO op_cmpgez (void) |
636 | 4c9649a9 | j_mayer | { |
637 | 4c9649a9 | j_mayer | if ((int64_t)T0 >= 0) |
638 | 4c9649a9 | j_mayer | T0 = 1;
|
639 | 4c9649a9 | j_mayer | else
|
640 | 4c9649a9 | j_mayer | T0 = 0;
|
641 | 4c9649a9 | j_mayer | RETURN(); |
642 | 4c9649a9 | j_mayer | } |
643 | 4c9649a9 | j_mayer | |
644 | 4c9649a9 | j_mayer | void OPPROTO op_cmplbs (void) |
645 | 4c9649a9 | j_mayer | { |
646 | 4c9649a9 | j_mayer | T0 &= 1;
|
647 | 4c9649a9 | j_mayer | RETURN(); |
648 | 4c9649a9 | j_mayer | } |
649 | 4c9649a9 | j_mayer | |
650 | 4c9649a9 | j_mayer | void OPPROTO op_cmplbc (void) |
651 | 4c9649a9 | j_mayer | { |
652 | 4c9649a9 | j_mayer | T0 = (~T0) & 1;
|
653 | 4c9649a9 | j_mayer | RETURN(); |
654 | 4c9649a9 | j_mayer | } |
655 | 4c9649a9 | j_mayer | |
656 | 4c9649a9 | j_mayer | /* Branches */
|
657 | 4c9649a9 | j_mayer | void OPPROTO op_branch (void) |
658 | 4c9649a9 | j_mayer | { |
659 | 4c9649a9 | j_mayer | env->pc = T0 & ~3;
|
660 | 4c9649a9 | j_mayer | RETURN(); |
661 | 4c9649a9 | j_mayer | } |
662 | 4c9649a9 | j_mayer | |
663 | 4c9649a9 | j_mayer | void OPPROTO op_addq1 (void) |
664 | 4c9649a9 | j_mayer | { |
665 | 4c9649a9 | j_mayer | T1 += T0; |
666 | 4c9649a9 | j_mayer | RETURN(); |
667 | 4c9649a9 | j_mayer | } |
668 | 4c9649a9 | j_mayer | |
669 | 4c9649a9 | j_mayer | #if 0 // Qemu does not know how to do this...
|
670 | 4c9649a9 | j_mayer | void OPPROTO op_bcond (void)
|
671 | 4c9649a9 | j_mayer | {
|
672 | 4c9649a9 | j_mayer | if (T0)
|
673 | 4c9649a9 | j_mayer | env->pc = T1 & ~3;
|
674 | 4c9649a9 | j_mayer | else
|
675 | 4c9649a9 | j_mayer | env->pc = PARAM(1);
|
676 | 4c9649a9 | j_mayer | RETURN();
|
677 | 4c9649a9 | j_mayer | }
|
678 | 4c9649a9 | j_mayer | #else
|
679 | 4c9649a9 | j_mayer | void OPPROTO op_bcond (void) |
680 | 4c9649a9 | j_mayer | { |
681 | 4c9649a9 | j_mayer | if (T0)
|
682 | 4c9649a9 | j_mayer | env->pc = T1 & ~3;
|
683 | 4c9649a9 | j_mayer | else
|
684 | 4c9649a9 | j_mayer | env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2); |
685 | 4c9649a9 | j_mayer | RETURN(); |
686 | 4c9649a9 | j_mayer | } |
687 | 4c9649a9 | j_mayer | #endif
|
688 | 4c9649a9 | j_mayer | |
689 | 4c9649a9 | j_mayer | #if 0 // Qemu does not know how to do this...
|
690 | 4c9649a9 | j_mayer | void OPPROTO op_update_pc (void)
|
691 | 4c9649a9 | j_mayer | {
|
692 | 4c9649a9 | j_mayer | env->pc = PARAM(1);
|
693 | 4c9649a9 | j_mayer | RETURN();
|
694 | 4c9649a9 | j_mayer | }
|
695 | 4c9649a9 | j_mayer | #else
|
696 | 4c9649a9 | j_mayer | void OPPROTO op_update_pc (void) |
697 | 4c9649a9 | j_mayer | { |
698 | 4c9649a9 | j_mayer | env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2); |
699 | 4c9649a9 | j_mayer | RETURN(); |
700 | 4c9649a9 | j_mayer | } |
701 | 4c9649a9 | j_mayer | #endif
|
702 | 4c9649a9 | j_mayer | |
703 | 4c9649a9 | j_mayer | /* Optimization for 32 bits hosts architectures */
|
704 | 4c9649a9 | j_mayer | void OPPROTO op_update_pc32 (void) |
705 | 4c9649a9 | j_mayer | { |
706 | 4c9649a9 | j_mayer | env->pc = (uint64_t)PARAM(1);
|
707 | 4c9649a9 | j_mayer | RETURN(); |
708 | 4c9649a9 | j_mayer | } |
709 | 4c9649a9 | j_mayer | |
710 | 4c9649a9 | j_mayer | /* IEEE floating point arithmetic */
|
711 | 4c9649a9 | j_mayer | /* S floating (single) */
|
712 | 4c9649a9 | j_mayer | void OPPROTO op_adds (void) |
713 | 4c9649a9 | j_mayer | { |
714 | 4c9649a9 | j_mayer | FT0 = float32_add(FT0, FT1, &FP_STATUS); |
715 | 4c9649a9 | j_mayer | RETURN(); |
716 | 4c9649a9 | j_mayer | } |
717 | 4c9649a9 | j_mayer | |
718 | 4c9649a9 | j_mayer | void OPPROTO op_subs (void) |
719 | 4c9649a9 | j_mayer | { |
720 | 4c9649a9 | j_mayer | FT0 = float32_sub(FT0, FT1, &FP_STATUS); |
721 | 4c9649a9 | j_mayer | RETURN(); |
722 | 4c9649a9 | j_mayer | } |
723 | 4c9649a9 | j_mayer | |
724 | 4c9649a9 | j_mayer | void OPPROTO op_muls (void) |
725 | 4c9649a9 | j_mayer | { |
726 | 4c9649a9 | j_mayer | FT0 = float32_mul(FT0, FT1, &FP_STATUS); |
727 | 4c9649a9 | j_mayer | RETURN(); |
728 | 4c9649a9 | j_mayer | } |
729 | 4c9649a9 | j_mayer | |
730 | 4c9649a9 | j_mayer | void OPPROTO op_divs (void) |
731 | 4c9649a9 | j_mayer | { |
732 | 4c9649a9 | j_mayer | FT0 = float32_div(FT0, FT1, &FP_STATUS); |
733 | 4c9649a9 | j_mayer | RETURN(); |
734 | 4c9649a9 | j_mayer | } |
735 | 4c9649a9 | j_mayer | |
736 | 4c9649a9 | j_mayer | void OPPROTO op_sqrts (void) |
737 | 4c9649a9 | j_mayer | { |
738 | 4c9649a9 | j_mayer | helper_sqrts(); |
739 | 4c9649a9 | j_mayer | RETURN(); |
740 | 4c9649a9 | j_mayer | } |
741 | 4c9649a9 | j_mayer | |
742 | 4c9649a9 | j_mayer | void OPPROTO op_cpys (void) |
743 | 4c9649a9 | j_mayer | { |
744 | 4c9649a9 | j_mayer | helper_cpys(); |
745 | 4c9649a9 | j_mayer | RETURN(); |
746 | 4c9649a9 | j_mayer | } |
747 | 4c9649a9 | j_mayer | |
748 | 4c9649a9 | j_mayer | void OPPROTO op_cpysn (void) |
749 | 4c9649a9 | j_mayer | { |
750 | 4c9649a9 | j_mayer | helper_cpysn(); |
751 | 4c9649a9 | j_mayer | RETURN(); |
752 | 4c9649a9 | j_mayer | } |
753 | 4c9649a9 | j_mayer | |
754 | 4c9649a9 | j_mayer | void OPPROTO op_cpyse (void) |
755 | 4c9649a9 | j_mayer | { |
756 | 4c9649a9 | j_mayer | helper_cpyse(); |
757 | 4c9649a9 | j_mayer | RETURN(); |
758 | 4c9649a9 | j_mayer | } |
759 | 4c9649a9 | j_mayer | |
760 | 4c9649a9 | j_mayer | void OPPROTO op_itofs (void) |
761 | 4c9649a9 | j_mayer | { |
762 | 4c9649a9 | j_mayer | helper_itofs(); |
763 | 4c9649a9 | j_mayer | RETURN(); |
764 | 4c9649a9 | j_mayer | } |
765 | 4c9649a9 | j_mayer | |
766 | 4c9649a9 | j_mayer | void OPPROTO op_ftois (void) |
767 | 4c9649a9 | j_mayer | { |
768 | 4c9649a9 | j_mayer | helper_ftois(); |
769 | 4c9649a9 | j_mayer | RETURN(); |
770 | 4c9649a9 | j_mayer | } |
771 | 4c9649a9 | j_mayer | |
772 | 4c9649a9 | j_mayer | /* T floating (double) */
|
773 | 4c9649a9 | j_mayer | void OPPROTO op_addt (void) |
774 | 4c9649a9 | j_mayer | { |
775 | 4c9649a9 | j_mayer | FT0 = float64_add(FT0, FT1, &FP_STATUS); |
776 | 4c9649a9 | j_mayer | RETURN(); |
777 | 4c9649a9 | j_mayer | } |
778 | 4c9649a9 | j_mayer | |
779 | 4c9649a9 | j_mayer | void OPPROTO op_subt (void) |
780 | 4c9649a9 | j_mayer | { |
781 | 4c9649a9 | j_mayer | FT0 = float64_sub(FT0, FT1, &FP_STATUS); |
782 | 4c9649a9 | j_mayer | RETURN(); |
783 | 4c9649a9 | j_mayer | } |
784 | 4c9649a9 | j_mayer | |
785 | 4c9649a9 | j_mayer | void OPPROTO op_mult (void) |
786 | 4c9649a9 | j_mayer | { |
787 | 4c9649a9 | j_mayer | FT0 = float64_mul(FT0, FT1, &FP_STATUS); |
788 | 4c9649a9 | j_mayer | RETURN(); |
789 | 4c9649a9 | j_mayer | } |
790 | 4c9649a9 | j_mayer | |
791 | 4c9649a9 | j_mayer | void OPPROTO op_divt (void) |
792 | 4c9649a9 | j_mayer | { |
793 | 4c9649a9 | j_mayer | FT0 = float64_div(FT0, FT1, &FP_STATUS); |
794 | 4c9649a9 | j_mayer | RETURN(); |
795 | 4c9649a9 | j_mayer | } |
796 | 4c9649a9 | j_mayer | |
797 | 4c9649a9 | j_mayer | void OPPROTO op_sqrtt (void) |
798 | 4c9649a9 | j_mayer | { |
799 | 4c9649a9 | j_mayer | helper_sqrtt(); |
800 | 4c9649a9 | j_mayer | RETURN(); |
801 | 4c9649a9 | j_mayer | } |
802 | 4c9649a9 | j_mayer | |
803 | 4c9649a9 | j_mayer | void OPPROTO op_cmptun (void) |
804 | 4c9649a9 | j_mayer | { |
805 | 4c9649a9 | j_mayer | helper_cmptun(); |
806 | 4c9649a9 | j_mayer | RETURN(); |
807 | 4c9649a9 | j_mayer | } |
808 | 4c9649a9 | j_mayer | |
809 | 4c9649a9 | j_mayer | void OPPROTO op_cmpteq (void) |
810 | 4c9649a9 | j_mayer | { |
811 | 4c9649a9 | j_mayer | helper_cmpteq(); |
812 | 4c9649a9 | j_mayer | RETURN(); |
813 | 4c9649a9 | j_mayer | } |
814 | 4c9649a9 | j_mayer | |
815 | 4c9649a9 | j_mayer | void OPPROTO op_cmptle (void) |
816 | 4c9649a9 | j_mayer | { |
817 | 4c9649a9 | j_mayer | helper_cmptle(); |
818 | 4c9649a9 | j_mayer | RETURN(); |
819 | 4c9649a9 | j_mayer | } |
820 | 4c9649a9 | j_mayer | |
821 | 4c9649a9 | j_mayer | void OPPROTO op_cmptlt (void) |
822 | 4c9649a9 | j_mayer | { |
823 | 4c9649a9 | j_mayer | helper_cmptlt(); |
824 | 4c9649a9 | j_mayer | RETURN(); |
825 | 4c9649a9 | j_mayer | } |
826 | 4c9649a9 | j_mayer | |
827 | 4c9649a9 | j_mayer | void OPPROTO op_itoft (void) |
828 | 4c9649a9 | j_mayer | { |
829 | 4c9649a9 | j_mayer | helper_itoft(); |
830 | 4c9649a9 | j_mayer | RETURN(); |
831 | 4c9649a9 | j_mayer | } |
832 | 4c9649a9 | j_mayer | |
833 | 4c9649a9 | j_mayer | void OPPROTO op_ftoit (void) |
834 | 4c9649a9 | j_mayer | { |
835 | 4c9649a9 | j_mayer | helper_ftoit(); |
836 | 4c9649a9 | j_mayer | RETURN(); |
837 | 4c9649a9 | j_mayer | } |
838 | 4c9649a9 | j_mayer | |
839 | 4c9649a9 | j_mayer | /* VAX floating point arithmetic */
|
840 | 4c9649a9 | j_mayer | /* F floating */
|
841 | 4c9649a9 | j_mayer | void OPPROTO op_addf (void) |
842 | 4c9649a9 | j_mayer | { |
843 | 4c9649a9 | j_mayer | helper_addf(); |
844 | 4c9649a9 | j_mayer | RETURN(); |
845 | 4c9649a9 | j_mayer | } |
846 | 4c9649a9 | j_mayer | |
847 | 4c9649a9 | j_mayer | void OPPROTO op_subf (void) |
848 | 4c9649a9 | j_mayer | { |
849 | 4c9649a9 | j_mayer | helper_subf(); |
850 | 4c9649a9 | j_mayer | RETURN(); |
851 | 4c9649a9 | j_mayer | } |
852 | 4c9649a9 | j_mayer | |
853 | 4c9649a9 | j_mayer | void OPPROTO op_mulf (void) |
854 | 4c9649a9 | j_mayer | { |
855 | 4c9649a9 | j_mayer | helper_mulf(); |
856 | 4c9649a9 | j_mayer | RETURN(); |
857 | 4c9649a9 | j_mayer | } |
858 | 4c9649a9 | j_mayer | |
859 | 4c9649a9 | j_mayer | void OPPROTO op_divf (void) |
860 | 4c9649a9 | j_mayer | { |
861 | 4c9649a9 | j_mayer | helper_divf(); |
862 | 4c9649a9 | j_mayer | RETURN(); |
863 | 4c9649a9 | j_mayer | } |
864 | 4c9649a9 | j_mayer | |
865 | 4c9649a9 | j_mayer | void OPPROTO op_sqrtf (void) |
866 | 4c9649a9 | j_mayer | { |
867 | 4c9649a9 | j_mayer | helper_sqrtf(); |
868 | 4c9649a9 | j_mayer | RETURN(); |
869 | 4c9649a9 | j_mayer | } |
870 | 4c9649a9 | j_mayer | |
871 | 4c9649a9 | j_mayer | void OPPROTO op_cmpfeq (void) |
872 | 4c9649a9 | j_mayer | { |
873 | 4c9649a9 | j_mayer | helper_cmpfeq(); |
874 | 4c9649a9 | j_mayer | RETURN(); |
875 | 4c9649a9 | j_mayer | } |
876 | 4c9649a9 | j_mayer | |
877 | 4c9649a9 | j_mayer | void OPPROTO op_cmpfne (void) |
878 | 4c9649a9 | j_mayer | { |
879 | 4c9649a9 | j_mayer | helper_cmpfne(); |
880 | 4c9649a9 | j_mayer | RETURN(); |
881 | 4c9649a9 | j_mayer | } |
882 | 4c9649a9 | j_mayer | |
883 | 4c9649a9 | j_mayer | void OPPROTO op_cmpflt (void) |
884 | 4c9649a9 | j_mayer | { |
885 | 4c9649a9 | j_mayer | helper_cmpflt(); |
886 | 4c9649a9 | j_mayer | RETURN(); |
887 | 4c9649a9 | j_mayer | } |
888 | 4c9649a9 | j_mayer | |
889 | 4c9649a9 | j_mayer | void OPPROTO op_cmpfle (void) |
890 | 4c9649a9 | j_mayer | { |
891 | 4c9649a9 | j_mayer | helper_cmpfle(); |
892 | 4c9649a9 | j_mayer | RETURN(); |
893 | 4c9649a9 | j_mayer | } |
894 | 4c9649a9 | j_mayer | |
895 | 4c9649a9 | j_mayer | void OPPROTO op_cmpfgt (void) |
896 | 4c9649a9 | j_mayer | { |
897 | 4c9649a9 | j_mayer | helper_cmpfgt(); |
898 | 4c9649a9 | j_mayer | RETURN(); |
899 | 4c9649a9 | j_mayer | } |
900 | 4c9649a9 | j_mayer | |
901 | 4c9649a9 | j_mayer | void OPPROTO op_cmpfge (void) |
902 | 4c9649a9 | j_mayer | { |
903 | 4c9649a9 | j_mayer | helper_cmpfge(); |
904 | 4c9649a9 | j_mayer | RETURN(); |
905 | 4c9649a9 | j_mayer | } |
906 | 4c9649a9 | j_mayer | |
907 | 4c9649a9 | j_mayer | void OPPROTO op_itoff (void) |
908 | 4c9649a9 | j_mayer | { |
909 | 4c9649a9 | j_mayer | helper_itoff(); |
910 | 4c9649a9 | j_mayer | RETURN(); |
911 | 4c9649a9 | j_mayer | } |
912 | 4c9649a9 | j_mayer | |
913 | 4c9649a9 | j_mayer | /* G floating */
|
914 | 4c9649a9 | j_mayer | void OPPROTO op_addg (void) |
915 | 4c9649a9 | j_mayer | { |
916 | 4c9649a9 | j_mayer | helper_addg(); |
917 | 4c9649a9 | j_mayer | RETURN(); |
918 | 4c9649a9 | j_mayer | } |
919 | 4c9649a9 | j_mayer | |
920 | 4c9649a9 | j_mayer | void OPPROTO op_subg (void) |
921 | 4c9649a9 | j_mayer | { |
922 | 4c9649a9 | j_mayer | helper_subg(); |
923 | 4c9649a9 | j_mayer | RETURN(); |
924 | 4c9649a9 | j_mayer | } |
925 | 4c9649a9 | j_mayer | |
926 | 4c9649a9 | j_mayer | void OPPROTO op_mulg (void) |
927 | 4c9649a9 | j_mayer | { |
928 | 4c9649a9 | j_mayer | helper_mulg(); |
929 | 4c9649a9 | j_mayer | RETURN(); |
930 | 4c9649a9 | j_mayer | } |
931 | 4c9649a9 | j_mayer | |
932 | 4c9649a9 | j_mayer | void OPPROTO op_divg (void) |
933 | 4c9649a9 | j_mayer | { |
934 | 4c9649a9 | j_mayer | helper_divg(); |
935 | 4c9649a9 | j_mayer | RETURN(); |
936 | 4c9649a9 | j_mayer | } |
937 | 4c9649a9 | j_mayer | |
938 | 4c9649a9 | j_mayer | void OPPROTO op_sqrtg (void) |
939 | 4c9649a9 | j_mayer | { |
940 | 4c9649a9 | j_mayer | helper_sqrtg(); |
941 | 4c9649a9 | j_mayer | RETURN(); |
942 | 4c9649a9 | j_mayer | } |
943 | 4c9649a9 | j_mayer | |
944 | 4c9649a9 | j_mayer | void OPPROTO op_cmpgeq (void) |
945 | 4c9649a9 | j_mayer | { |
946 | 4c9649a9 | j_mayer | helper_cmpgeq(); |
947 | 4c9649a9 | j_mayer | RETURN(); |
948 | 4c9649a9 | j_mayer | } |
949 | 4c9649a9 | j_mayer | |
950 | 4c9649a9 | j_mayer | void OPPROTO op_cmpglt (void) |
951 | 4c9649a9 | j_mayer | { |
952 | 4c9649a9 | j_mayer | helper_cmpglt(); |
953 | 4c9649a9 | j_mayer | RETURN(); |
954 | 4c9649a9 | j_mayer | } |
955 | 4c9649a9 | j_mayer | |
956 | 4c9649a9 | j_mayer | void OPPROTO op_cmpgle (void) |
957 | 4c9649a9 | j_mayer | { |
958 | 4c9649a9 | j_mayer | helper_cmpgle(); |
959 | 4c9649a9 | j_mayer | RETURN(); |
960 | 4c9649a9 | j_mayer | } |
961 | 4c9649a9 | j_mayer | |
962 | 4c9649a9 | j_mayer | /* Floating point format conversion */
|
963 | 4c9649a9 | j_mayer | void OPPROTO op_cvtst (void) |
964 | 4c9649a9 | j_mayer | { |
965 | 4c9649a9 | j_mayer | FT0 = (float)FT0;
|
966 | 4c9649a9 | j_mayer | RETURN(); |
967 | 4c9649a9 | j_mayer | } |
968 | 4c9649a9 | j_mayer | |
969 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqs (void) |
970 | 4c9649a9 | j_mayer | { |
971 | 4c9649a9 | j_mayer | helper_cvtqs(); |
972 | 4c9649a9 | j_mayer | RETURN(); |
973 | 4c9649a9 | j_mayer | } |
974 | 4c9649a9 | j_mayer | |
975 | 4c9649a9 | j_mayer | void OPPROTO op_cvtts (void) |
976 | 4c9649a9 | j_mayer | { |
977 | 4c9649a9 | j_mayer | FT0 = (float)FT0;
|
978 | 4c9649a9 | j_mayer | RETURN(); |
979 | 4c9649a9 | j_mayer | } |
980 | 4c9649a9 | j_mayer | |
981 | 4c9649a9 | j_mayer | void OPPROTO op_cvttq (void) |
982 | 4c9649a9 | j_mayer | { |
983 | 4c9649a9 | j_mayer | helper_cvttq(); |
984 | 4c9649a9 | j_mayer | RETURN(); |
985 | 4c9649a9 | j_mayer | } |
986 | 4c9649a9 | j_mayer | |
987 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqt (void) |
988 | 4c9649a9 | j_mayer | { |
989 | 4c9649a9 | j_mayer | helper_cvtqt(); |
990 | 4c9649a9 | j_mayer | RETURN(); |
991 | 4c9649a9 | j_mayer | } |
992 | 4c9649a9 | j_mayer | |
993 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqf (void) |
994 | 4c9649a9 | j_mayer | { |
995 | 4c9649a9 | j_mayer | helper_cvtqf(); |
996 | 4c9649a9 | j_mayer | RETURN(); |
997 | 4c9649a9 | j_mayer | } |
998 | 4c9649a9 | j_mayer | |
999 | 4c9649a9 | j_mayer | void OPPROTO op_cvtgf (void) |
1000 | 4c9649a9 | j_mayer | { |
1001 | 4c9649a9 | j_mayer | helper_cvtgf(); |
1002 | 4c9649a9 | j_mayer | RETURN(); |
1003 | 4c9649a9 | j_mayer | } |
1004 | 4c9649a9 | j_mayer | |
1005 | 4c9649a9 | j_mayer | void OPPROTO op_cvtgd (void) |
1006 | 4c9649a9 | j_mayer | { |
1007 | 4c9649a9 | j_mayer | helper_cvtgd(); |
1008 | 4c9649a9 | j_mayer | RETURN(); |
1009 | 4c9649a9 | j_mayer | } |
1010 | 4c9649a9 | j_mayer | |
1011 | 4c9649a9 | j_mayer | void OPPROTO op_cvtgq (void) |
1012 | 4c9649a9 | j_mayer | { |
1013 | 4c9649a9 | j_mayer | helper_cvtgq(); |
1014 | 4c9649a9 | j_mayer | RETURN(); |
1015 | 4c9649a9 | j_mayer | } |
1016 | 4c9649a9 | j_mayer | |
1017 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqg (void) |
1018 | 4c9649a9 | j_mayer | { |
1019 | 4c9649a9 | j_mayer | helper_cvtqg(); |
1020 | 4c9649a9 | j_mayer | RETURN(); |
1021 | 4c9649a9 | j_mayer | } |
1022 | 4c9649a9 | j_mayer | |
1023 | 4c9649a9 | j_mayer | void OPPROTO op_cvtdg (void) |
1024 | 4c9649a9 | j_mayer | { |
1025 | 4c9649a9 | j_mayer | helper_cvtdg(); |
1026 | 4c9649a9 | j_mayer | RETURN(); |
1027 | 4c9649a9 | j_mayer | } |
1028 | 4c9649a9 | j_mayer | |
1029 | 4c9649a9 | j_mayer | void OPPROTO op_cvtlq (void) |
1030 | 4c9649a9 | j_mayer | { |
1031 | 4c9649a9 | j_mayer | helper_cvtlq(); |
1032 | 4c9649a9 | j_mayer | RETURN(); |
1033 | 4c9649a9 | j_mayer | } |
1034 | 4c9649a9 | j_mayer | |
1035 | 4c9649a9 | j_mayer | void OPPROTO op_cvtql (void) |
1036 | 4c9649a9 | j_mayer | { |
1037 | 4c9649a9 | j_mayer | helper_cvtql(); |
1038 | 4c9649a9 | j_mayer | RETURN(); |
1039 | 4c9649a9 | j_mayer | } |
1040 | 4c9649a9 | j_mayer | |
1041 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqlv (void) |
1042 | 4c9649a9 | j_mayer | { |
1043 | 4c9649a9 | j_mayer | helper_cvtqlv(); |
1044 | 4c9649a9 | j_mayer | RETURN(); |
1045 | 4c9649a9 | j_mayer | } |
1046 | 4c9649a9 | j_mayer | |
1047 | 4c9649a9 | j_mayer | void OPPROTO op_cvtqlsv (void) |
1048 | 4c9649a9 | j_mayer | { |
1049 | 4c9649a9 | j_mayer | helper_cvtqlsv(); |
1050 | 4c9649a9 | j_mayer | RETURN(); |
1051 | 4c9649a9 | j_mayer | } |
1052 | 4c9649a9 | j_mayer | |
1053 | 4c9649a9 | j_mayer | /* PALcode support special instructions */
|
1054 | 4c9649a9 | j_mayer | #if !defined (CONFIG_USER_ONLY)
|
1055 | 4c9649a9 | j_mayer | void OPPROTO op_hw_rei (void) |
1056 | 4c9649a9 | j_mayer | { |
1057 | 4c9649a9 | j_mayer | env->pc = env->ipr[IPR_EXC_ADDR] & ~3;
|
1058 | 4c9649a9 | j_mayer | env->ipr[IPR_EXC_ADDR] = env->ipr[IPR_EXC_ADDR] & 1;
|
1059 | 4c9649a9 | j_mayer | /* XXX: re-enable interrupts and memory mapping */
|
1060 | 4c9649a9 | j_mayer | RETURN(); |
1061 | 4c9649a9 | j_mayer | } |
1062 | 4c9649a9 | j_mayer | |
1063 | 4c9649a9 | j_mayer | void OPPROTO op_hw_ret (void) |
1064 | 4c9649a9 | j_mayer | { |
1065 | 4c9649a9 | j_mayer | env->pc = T0 & ~3;
|
1066 | 4c9649a9 | j_mayer | env->ipr[IPR_EXC_ADDR] = T0 & 1;
|
1067 | 4c9649a9 | j_mayer | /* XXX: re-enable interrupts and memory mapping */
|
1068 | 4c9649a9 | j_mayer | RETURN(); |
1069 | 4c9649a9 | j_mayer | } |
1070 | 4c9649a9 | j_mayer | |
1071 | 4c9649a9 | j_mayer | void OPPROTO op_mfpr (void) |
1072 | 4c9649a9 | j_mayer | { |
1073 | 4c9649a9 | j_mayer | helper_mfpr(PARAM(1));
|
1074 | 4c9649a9 | j_mayer | RETURN(); |
1075 | 4c9649a9 | j_mayer | } |
1076 | 4c9649a9 | j_mayer | |
1077 | 4c9649a9 | j_mayer | void OPPROTO op_mtpr (void) |
1078 | 4c9649a9 | j_mayer | { |
1079 | 4c9649a9 | j_mayer | helper_mtpr(PARAM(1));
|
1080 | 4c9649a9 | j_mayer | RETURN(); |
1081 | 4c9649a9 | j_mayer | } |
1082 | 4c9649a9 | j_mayer | |
1083 | 4c9649a9 | j_mayer | void OPPROTO op_set_alt_mode (void) |
1084 | 4c9649a9 | j_mayer | { |
1085 | 4c9649a9 | j_mayer | env->saved_mode = env->ps & 0xC;
|
1086 | 4c9649a9 | j_mayer | env->ps = (env->ps & ~0xC) | (env->ipr[IPR_ALT_MODE] & 0xC); |
1087 | 4c9649a9 | j_mayer | RETURN(); |
1088 | 4c9649a9 | j_mayer | } |
1089 | 4c9649a9 | j_mayer | |
1090 | 4c9649a9 | j_mayer | void OPPROTO op_restore_mode (void) |
1091 | 4c9649a9 | j_mayer | { |
1092 | 4c9649a9 | j_mayer | env->ps = (env->ps & ~0xC) | env->saved_mode;
|
1093 | 4c9649a9 | j_mayer | RETURN(); |
1094 | 4c9649a9 | j_mayer | } |
1095 | 4c9649a9 | j_mayer | |
1096 | 4c9649a9 | j_mayer | void OPPROTO op_ld_phys_to_virt (void) |
1097 | 4c9649a9 | j_mayer | { |
1098 | 4c9649a9 | j_mayer | helper_ld_phys_to_virt(); |
1099 | 4c9649a9 | j_mayer | RETURN(); |
1100 | 4c9649a9 | j_mayer | } |
1101 | 4c9649a9 | j_mayer | |
1102 | 4c9649a9 | j_mayer | void OPPROTO op_st_phys_to_virt (void) |
1103 | 4c9649a9 | j_mayer | { |
1104 | 4c9649a9 | j_mayer | helper_st_phys_to_virt(); |
1105 | 4c9649a9 | j_mayer | RETURN(); |
1106 | 4c9649a9 | j_mayer | } |
1107 | 4c9649a9 | j_mayer | #endif /* !defined (CONFIG_USER_ONLY) */ |