Core commit. Compile and run on the OpenPandora
[mupen64plus-pandora.git] / source / mupen64plus-core / src / r4300 / x86 / gcop1_s.c
CommitLineData
451ab91e 1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * Mupen64plus - gcop1_s.c *
3 * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
4 * Copyright (C) 2002 Hacktarux *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the *
18 * Free Software Foundation, Inc., *
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
20 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
21
22#include <stdio.h>
23
24#include "assemble.h"
25#include "interpret.h"
26
27#include "r4300/recomph.h"
28#include "r4300/r4300.h"
29#include "r4300/ops.h"
30#include "r4300/macros.h"
31
32void genadd_s(void)
33{
34#ifdef INTERPRET_ADD_S
35 gencallinterp((unsigned int)cached_interpreter_table.ADD_S, 0);
36#else
37 gencheck_cop1_unusable();
38 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
39 fld_preg32_dword(EAX);
40 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
41 fadd_preg32_dword(EAX);
42 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
43 fstp_preg32_dword(EAX);
44#endif
45}
46
47void gensub_s(void)
48{
49#ifdef INTERPRET_SUB_S
50 gencallinterp((unsigned int)cached_interpreter_table.SUB_S, 0);
51#else
52 gencheck_cop1_unusable();
53 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
54 fld_preg32_dword(EAX);
55 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
56 fsub_preg32_dword(EAX);
57 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
58 fstp_preg32_dword(EAX);
59#endif
60}
61
62void genmul_s(void)
63{
64#ifdef INTERPRET_MUL_S
65 gencallinterp((unsigned int)cached_interpreter_table.MUL_S, 0);
66#else
67 gencheck_cop1_unusable();
68 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
69 fld_preg32_dword(EAX);
70 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
71 fmul_preg32_dword(EAX);
72 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
73 fstp_preg32_dword(EAX);
74#endif
75}
76
77void gendiv_s(void)
78{
79#ifdef INTERPRET_DIV_S
80 gencallinterp((unsigned int)cached_interpreter_table.DIV_S, 0);
81#else
82 gencheck_cop1_unusable();
83 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
84 fld_preg32_dword(EAX);
85 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
86 fdiv_preg32_dword(EAX);
87 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
88 fstp_preg32_dword(EAX);
89#endif
90}
91
92void gensqrt_s(void)
93{
94#ifdef INTERPRET_SQRT_S
95 gencallinterp((unsigned int)cached_interpreter_table.SQRT_S, 0);
96#else
97 gencheck_cop1_unusable();
98 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
99 fld_preg32_dword(EAX);
100 fsqrt();
101 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
102 fstp_preg32_dword(EAX);
103#endif
104}
105
106void genabs_s(void)
107{
108#ifdef INTERPRET_ABS_S
109 gencallinterp((unsigned int)cached_interpreter_table.ABS_S, 0);
110#else
111 gencheck_cop1_unusable();
112 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
113 fld_preg32_dword(EAX);
114 fabs_();
115 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
116 fstp_preg32_dword(EAX);
117#endif
118}
119
120void genmov_s(void)
121{
122#ifdef INTERPRET_MOV_S
123 gencallinterp((unsigned int)cached_interpreter_table.MOV_S, 0);
124#else
125 gencheck_cop1_unusable();
126 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
127 mov_reg32_preg32(EBX, EAX);
128 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
129 mov_preg32_reg32(EAX, EBX);
130#endif
131}
132
133void genneg_s(void)
134{
135#ifdef INTERPRET_NEG_S
136 gencallinterp((unsigned int)cached_interpreter_table.NEG_S, 0);
137#else
138 gencheck_cop1_unusable();
139 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
140 fld_preg32_dword(EAX);
141 fchs();
142 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
143 fstp_preg32_dword(EAX);
144#endif
145}
146
147void genround_l_s(void)
148{
149#ifdef INTERPRET_ROUND_L_S
150 gencallinterp((unsigned int)cached_interpreter_table.ROUND_L_S, 0);
151#else
152 gencheck_cop1_unusable();
153 fldcw_m16((unsigned short*)&round_mode);
154 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
155 fld_preg32_dword(EAX);
156 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
157 fistp_preg32_qword(EAX);
158 fldcw_m16((unsigned short*)&rounding_mode);
159#endif
160}
161
162void gentrunc_l_s(void)
163{
164#ifdef INTERPRET_TRUNC_L_S
165 gencallinterp((unsigned int)cached_interpreter_table.TRUNC_L_S, 0);
166#else
167 gencheck_cop1_unusable();
168 fldcw_m16((unsigned short*)&trunc_mode);
169 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
170 fld_preg32_dword(EAX);
171 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
172 fistp_preg32_qword(EAX);
173 fldcw_m16((unsigned short*)&rounding_mode);
174#endif
175}
176
177void genceil_l_s(void)
178{
179#ifdef INTERPRET_CEIL_L_S
180 gencallinterp((unsigned int)cached_interpreter_table.CEIL_L_S, 0);
181#else
182 gencheck_cop1_unusable();
183 fldcw_m16((unsigned short*)&ceil_mode);
184 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
185 fld_preg32_dword(EAX);
186 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
187 fistp_preg32_qword(EAX);
188 fldcw_m16((unsigned short*)&rounding_mode);
189#endif
190}
191
192void genfloor_l_s(void)
193{
194#ifdef INTERPRET_FLOOR_L_S
195 gencallinterp((unsigned int)cached_interpreter_table.FLOOR_L_S, 0);
196#else
197 gencheck_cop1_unusable();
198 fldcw_m16((unsigned short*)&floor_mode);
199 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
200 fld_preg32_dword(EAX);
201 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
202 fistp_preg32_qword(EAX);
203 fldcw_m16((unsigned short*)&rounding_mode);
204#endif
205}
206
207void genround_w_s(void)
208{
209#ifdef INTERPRET_ROUND_W_S
210 gencallinterp((unsigned int)cached_interpreter_table.ROUND_W_S, 0);
211#else
212 gencheck_cop1_unusable();
213 fldcw_m16((unsigned short*)&round_mode);
214 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
215 fld_preg32_dword(EAX);
216 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
217 fistp_preg32_dword(EAX);
218 fldcw_m16((unsigned short*)&rounding_mode);
219#endif
220}
221
222void gentrunc_w_s(void)
223{
224#ifdef INTERPRET_TRUNC_W_S
225 gencallinterp((unsigned int)cached_interpreter_table.TRUNC_W_S, 0);
226#else
227 gencheck_cop1_unusable();
228 fldcw_m16((unsigned short*)&trunc_mode);
229 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
230 fld_preg32_dword(EAX);
231 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
232 fistp_preg32_dword(EAX);
233 fldcw_m16((unsigned short*)&rounding_mode);
234#endif
235}
236
237void genceil_w_s(void)
238{
239#ifdef INTERPRET_CEIL_W_S
240 gencallinterp((unsigned int)cached_interpreter_table.CEIL_W_S, 0);
241#else
242 gencheck_cop1_unusable();
243 fldcw_m16((unsigned short*)&ceil_mode);
244 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
245 fld_preg32_dword(EAX);
246 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
247 fistp_preg32_dword(EAX);
248 fldcw_m16((unsigned short*)&rounding_mode);
249#endif
250}
251
252void genfloor_w_s(void)
253{
254#ifdef INTERPRET_FLOOR_W_S
255 gencallinterp((unsigned int)cached_interpreter_table.FLOOR_W_S, 0);
256#else
257 gencheck_cop1_unusable();
258 fldcw_m16((unsigned short*)&floor_mode);
259 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
260 fld_preg32_dword(EAX);
261 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
262 fistp_preg32_dword(EAX);
263 fldcw_m16((unsigned short*)&rounding_mode);
264#endif
265}
266
267void gencvt_d_s(void)
268{
269#ifdef INTERPRET_CVT_D_S
270 gencallinterp((unsigned int)cached_interpreter_table.CVT_D_S, 0);
271#else
272 gencheck_cop1_unusable();
273 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
274 fld_preg32_dword(EAX);
275 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
276 fstp_preg32_qword(EAX);
277#endif
278}
279
280void gencvt_w_s(void)
281{
282#ifdef INTERPRET_CVT_W_S
283 gencallinterp((unsigned int)cached_interpreter_table.CVT_W_S, 0);
284#else
285 gencheck_cop1_unusable();
286 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
287 fld_preg32_dword(EAX);
288 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fd]));
289 fistp_preg32_dword(EAX);
290#endif
291}
292
293void gencvt_l_s(void)
294{
295#ifdef INTERPRET_CVT_L_S
296 gencallinterp((unsigned int)cached_interpreter_table.CVT_L_S, 0);
297#else
298 gencheck_cop1_unusable();
299 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
300 fld_preg32_dword(EAX);
301 mov_eax_memoffs32((unsigned int *)(&reg_cop1_double[dst->f.cf.fd]));
302 fistp_preg32_qword(EAX);
303#endif
304}
305
306void genc_f_s(void)
307{
308#ifdef INTERPRET_C_F_S
309 gencallinterp((unsigned int)cached_interpreter_table.C_F_S, 0);
310#else
311 gencheck_cop1_unusable();
312 and_m32_imm32((unsigned int*)&FCR31, ~0x800000);
313#endif
314}
315
316void genc_un_s(void)
317{
318#ifdef INTERPRET_C_UN_S
319 gencallinterp((unsigned int)cached_interpreter_table.C_UN_S, 0);
320#else
321 gencheck_cop1_unusable();
322 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
323 fld_preg32_dword(EAX);
324 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
325 fld_preg32_dword(EAX);
326 fucomip_fpreg(1);
327 ffree_fpreg(0);
328 jp_rj(12);
329 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
330 jmp_imm_short(10); // 2
331 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
332#endif
333}
334
335void genc_eq_s(void)
336{
337#ifdef INTERPRET_C_EQ_S
338 gencallinterp((unsigned int)cached_interpreter_table.C_EQ_S, 0);
339#else
340 gencheck_cop1_unusable();
341 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
342 fld_preg32_dword(EAX);
343 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
344 fld_preg32_dword(EAX);
345 fucomip_fpreg(1);
346 ffree_fpreg(0);
347 jne_rj(12);
348 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
349 jmp_imm_short(10); // 2
350 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
351#endif
352}
353
354void genc_ueq_s(void)
355{
356#ifdef INTERPRET_C_UEQ_S
357 gencallinterp((unsigned int)cached_interpreter_table.C_UEQ_S, 0);
358#else
359 gencheck_cop1_unusable();
360 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
361 fld_preg32_dword(EAX);
362 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
363 fld_preg32_dword(EAX);
364 fucomip_fpreg(1);
365 ffree_fpreg(0);
366 jp_rj(14);
367 jne_rj(12);
368 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
369 jmp_imm_short(10); // 2
370 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
371#endif
372}
373
374void genc_olt_s(void)
375{
376#ifdef INTERPRET_C_OLT_S
377 gencallinterp((unsigned int)cached_interpreter_table.C_OLT_S, 0);
378#else
379 gencheck_cop1_unusable();
380 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
381 fld_preg32_dword(EAX);
382 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
383 fld_preg32_dword(EAX);
384 fucomip_fpreg(1);
385 ffree_fpreg(0);
386 jae_rj(12);
387 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
388 jmp_imm_short(10); // 2
389 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
390#endif
391}
392
393void genc_ult_s(void)
394{
395#ifdef INTERPRET_C_ULT_S
396 gencallinterp((unsigned int)cached_interpreter_table.C_ULT_S, 0);
397#else
398 gencheck_cop1_unusable();
399 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
400 fld_preg32_dword(EAX);
401 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
402 fld_preg32_dword(EAX);
403 fucomip_fpreg(1);
404 ffree_fpreg(0);
405 jp_rj(14);
406 jae_rj(12);
407 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
408 jmp_imm_short(10); // 2
409 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
410#endif
411}
412
413void genc_ole_s(void)
414{
415#ifdef INTERPRET_C_OLE_S
416 gencallinterp((unsigned int)cached_interpreter_table.C_OLE_S, 0);
417#else
418 gencheck_cop1_unusable();
419 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
420 fld_preg32_dword(EAX);
421 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
422 fld_preg32_dword(EAX);
423 fucomip_fpreg(1);
424 ffree_fpreg(0);
425 ja_rj(12);
426 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
427 jmp_imm_short(10); // 2
428 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
429#endif
430}
431
432void genc_ule_s(void)
433{
434#ifdef INTERPRET_C_ULE_S
435 gencallinterp((unsigned int)cached_interpreter_table.C_ULE_S, 0);
436#else
437 gencheck_cop1_unusable();
438 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
439 fld_preg32_dword(EAX);
440 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
441 fld_preg32_dword(EAX);
442 fucomip_fpreg(1);
443 ffree_fpreg(0);
444 jp_rj(14);
445 ja_rj(12);
446 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
447 jmp_imm_short(10); // 2
448 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
449#endif
450}
451
452void genc_sf_s(void)
453{
454#ifdef INTERPRET_C_SF_S
455 gencallinterp((unsigned int)cached_interpreter_table.C_SF_S, 0);
456#else
457 gencheck_cop1_unusable();
458 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
459 fld_preg32_dword(EAX);
460 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
461 fld_preg32_dword(EAX);
462 fcomip_fpreg(1);
463 ffree_fpreg(0);
464 and_m32_imm32((unsigned int*)&FCR31, ~0x800000);
465#endif
466}
467
468void genc_ngle_s(void)
469{
470#ifdef INTERPRET_C_NGLE_S
471 gencallinterp((unsigned int)cached_interpreter_table.C_NGLE_S, 0);
472#else
473 gencheck_cop1_unusable();
474 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
475 fld_preg32_dword(EAX);
476 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
477 fld_preg32_dword(EAX);
478 fcomip_fpreg(1);
479 ffree_fpreg(0);
480 jp_rj(12);
481 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
482 jmp_imm_short(10); // 2
483 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
484#endif
485}
486
487void genc_seq_s(void)
488{
489#ifdef INTERPRET_C_SEQ_S
490 gencallinterp((unsigned int)cached_interpreter_table.C_SEQ_S, 0);
491#else
492 gencheck_cop1_unusable();
493 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
494 fld_preg32_dword(EAX);
495 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
496 fld_preg32_dword(EAX);
497 fcomip_fpreg(1);
498 ffree_fpreg(0);
499 jne_rj(12);
500 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
501 jmp_imm_short(10); // 2
502 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
503#endif
504}
505
506void genc_ngl_s(void)
507{
508#ifdef INTERPRET_C_NGL_S
509 gencallinterp((unsigned int)cached_interpreter_table.C_NGL_S, 0);
510#else
511 gencheck_cop1_unusable();
512 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
513 fld_preg32_dword(EAX);
514 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
515 fld_preg32_dword(EAX);
516 fcomip_fpreg(1);
517 ffree_fpreg(0);
518 jp_rj(14);
519 jne_rj(12);
520 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
521 jmp_imm_short(10); // 2
522 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
523#endif
524}
525
526void genc_lt_s(void)
527{
528#ifdef INTERPRET_C_LT_S
529 gencallinterp((unsigned int)cached_interpreter_table.C_LT_S, 0);
530#else
531 gencheck_cop1_unusable();
532 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
533 fld_preg32_dword(EAX);
534 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
535 fld_preg32_dword(EAX);
536 fcomip_fpreg(1);
537 ffree_fpreg(0);
538 jae_rj(12);
539 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
540 jmp_imm_short(10); // 2
541 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
542#endif
543}
544
545void genc_nge_s(void)
546{
547#ifdef INTERPRET_C_NGE_S
548 gencallinterp((unsigned int)cached_interpreter_table.C_NGE_S, 0);
549#else
550 gencheck_cop1_unusable();
551 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
552 fld_preg32_dword(EAX);
553 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
554 fld_preg32_dword(EAX);
555 fcomip_fpreg(1);
556 ffree_fpreg(0);
557 jp_rj(14);
558 jae_rj(12);
559 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
560 jmp_imm_short(10); // 2
561 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
562#endif
563}
564
565void genc_le_s(void)
566{
567#ifdef INTERPRET_C_LE_S
568 gencallinterp((unsigned int)cached_interpreter_table.C_LE_S, 0);
569#else
570 gencheck_cop1_unusable();
571 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
572 fld_preg32_dword(EAX);
573 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
574 fld_preg32_dword(EAX);
575 fcomip_fpreg(1);
576 ffree_fpreg(0);
577 ja_rj(12);
578 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
579 jmp_imm_short(10); // 2
580 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
581#endif
582}
583
584void genc_ngt_s(void)
585{
586#ifdef INTERPRET_C_NGT_S
587 gencallinterp((unsigned int)cached_interpreter_table.C_NGT_S, 0);
588#else
589 gencheck_cop1_unusable();
590 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.ft]));
591 fld_preg32_dword(EAX);
592 mov_eax_memoffs32((unsigned int *)(&reg_cop1_simple[dst->f.cf.fs]));
593 fld_preg32_dword(EAX);
594 fcomip_fpreg(1);
595 ffree_fpreg(0);
596 jp_rj(14);
597 ja_rj(12);
598 or_m32_imm32((unsigned int*)&FCR31, 0x800000); // 10
599 jmp_imm_short(10); // 2
600 and_m32_imm32((unsigned int*)&FCR31, ~0x800000); // 10
601#endif
602}
603