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