1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * Mupen64plus - gcop1_s.c *
3 * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
4 * Copyright (C) 2007 Richard Goedeken (Richard42) *
5 * Copyright (C) 2002 Hacktarux *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the *
19 * Free Software Foundation, Inc., *
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
21 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
26 #include "interpret.h"
28 #include "r4300/recomph.h"
29 #include "r4300/r4300.h"
30 #include "r4300/ops.h"
31 #include "r4300/macros.h"
35 #if defined(COUNT_INSTR)
36 inc_m32rel(&instr_count[119]);
38 #ifdef INTERPRET_ADD_S
39 gencallinterp((unsigned long long)cached_interpreter_table.ADD_S, 0);
41 gencheck_cop1_unusable();
42 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
43 fld_preg64_dword(RAX);
44 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
45 fadd_preg64_dword(RAX);
46 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
47 fstp_preg64_dword(RAX);
53 #if defined(COUNT_INSTR)
54 inc_m32rel(&instr_count[120]);
56 #ifdef INTERPRET_SUB_S
57 gencallinterp((unsigned long long)cached_interpreter_table.SUB_S, 0);
59 gencheck_cop1_unusable();
60 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
61 fld_preg64_dword(RAX);
62 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
63 fsub_preg64_dword(RAX);
64 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
65 fstp_preg64_dword(RAX);
71 #if defined(COUNT_INSTR)
72 inc_m32rel(&instr_count[121]);
74 #ifdef INTERPRET_MUL_S
75 gencallinterp((unsigned long long)cached_interpreter_table.MUL_S, 0);
77 gencheck_cop1_unusable();
78 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
79 fld_preg64_dword(RAX);
80 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
81 fmul_preg64_dword(RAX);
82 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
83 fstp_preg64_dword(RAX);
89 #if defined(COUNT_INSTR)
90 inc_m32rel(&instr_count[122]);
92 #ifdef INTERPRET_DIV_S
93 gencallinterp((unsigned long long)cached_interpreter_table.DIV_S, 0);
95 gencheck_cop1_unusable();
96 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
97 fld_preg64_dword(RAX);
98 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
99 fdiv_preg64_dword(RAX);
100 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
101 fstp_preg64_dword(RAX);
107 #if defined(COUNT_INSTR)
108 inc_m32rel(&instr_count[123]);
110 #ifdef INTERPRET_SQRT_S
111 gencallinterp((unsigned long long)cached_interpreter_table.SQRT_S, 0);
113 gencheck_cop1_unusable();
114 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
115 fld_preg64_dword(RAX);
117 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
118 fstp_preg64_dword(RAX);
124 #if defined(COUNT_INSTR)
125 inc_m32rel(&instr_count[124]);
127 #ifdef INTERPRET_ABS_S
128 gencallinterp((unsigned long long)cached_interpreter_table.ABS_S, 0);
130 gencheck_cop1_unusable();
131 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
132 fld_preg64_dword(RAX);
134 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
135 fstp_preg64_dword(RAX);
141 #if defined(COUNT_INSTR)
142 inc_m32rel(&instr_count[125]);
144 #ifdef INTERPRET_MOV_S
145 gencallinterp((unsigned long long)cached_interpreter_table.MOV_S, 0);
147 gencheck_cop1_unusable();
148 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
149 mov_reg32_preg64(EBX, RAX);
150 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
151 mov_preg64_reg32(RAX, EBX);
157 #if defined(COUNT_INSTR)
158 inc_m32rel(&instr_count[126]);
160 #ifdef INTERPRET_NEG_S
161 gencallinterp((unsigned long long)cached_interpreter_table.NEG_S, 0);
163 gencheck_cop1_unusable();
164 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
165 fld_preg64_dword(RAX);
167 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
168 fstp_preg64_dword(RAX);
172 void genround_l_s(void)
174 #if defined(COUNT_INSTR)
175 inc_m32rel(&instr_count[127]);
177 #ifdef INTERPRET_ROUND_L_S
178 gencallinterp((unsigned long long)cached_interpreter_table.ROUND_L_S, 0);
180 gencheck_cop1_unusable();
181 fldcw_m16rel((unsigned short*)&round_mode);
182 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
183 fld_preg64_dword(RAX);
184 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
185 fistp_preg64_qword(RAX);
186 fldcw_m16rel((unsigned short*)&rounding_mode);
190 void gentrunc_l_s(void)
192 #if defined(COUNT_INSTR)
193 inc_m32rel(&instr_count[128]);
195 #ifdef INTERPRET_TRUNC_L_S
196 gencallinterp((unsigned long long)cached_interpreter_table.TRUNC_L_S, 0);
198 gencheck_cop1_unusable();
199 fldcw_m16rel((unsigned short*)&trunc_mode);
200 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
201 fld_preg64_dword(RAX);
202 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
203 fistp_preg64_qword(RAX);
204 fldcw_m16rel((unsigned short*)&rounding_mode);
208 void genceil_l_s(void)
210 #if defined(COUNT_INSTR)
211 inc_m32rel(&instr_count[129]);
213 #ifdef INTERPRET_CEIL_L_S
214 gencallinterp((unsigned long long)cached_interpreter_table.CEIL_L_S, 0);
216 gencheck_cop1_unusable();
217 fldcw_m16rel((unsigned short*)&ceil_mode);
218 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
219 fld_preg64_dword(RAX);
220 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
221 fistp_preg64_qword(RAX);
222 fldcw_m16rel((unsigned short*)&rounding_mode);
226 void genfloor_l_s(void)
228 #if defined(COUNT_INSTR)
229 inc_m32rel(&instr_count[130]);
231 #ifdef INTERPRET_FLOOR_L_S
232 gencallinterp((unsigned long long)cached_interpreter_table.FLOOR_L_S, 0);
234 gencheck_cop1_unusable();
235 fldcw_m16rel((unsigned short*)&floor_mode);
236 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
237 fld_preg64_dword(RAX);
238 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
239 fistp_preg64_qword(RAX);
240 fldcw_m16rel((unsigned short*)&rounding_mode);
244 void genround_w_s(void)
246 #if defined(COUNT_INSTR)
247 inc_m32rel(&instr_count[127]);
249 #ifdef INTERPRET_ROUND_W_S
250 gencallinterp((unsigned long long)cached_interpreter_table.ROUND_W_S, 0);
252 gencheck_cop1_unusable();
253 fldcw_m16rel((unsigned short*)&round_mode);
254 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
255 fld_preg64_dword(RAX);
256 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
257 fistp_preg64_dword(RAX);
258 fldcw_m16rel((unsigned short*)&rounding_mode);
262 void gentrunc_w_s(void)
264 #if defined(COUNT_INSTR)
265 inc_m32rel(&instr_count[128]);
267 #ifdef INTERPRET_TRUNC_W_S
268 gencallinterp((unsigned long long)cached_interpreter_table.TRUNC_W_S, 0);
270 gencheck_cop1_unusable();
271 fldcw_m16rel((unsigned short*)&trunc_mode);
272 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
273 fld_preg64_dword(RAX);
274 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
275 fistp_preg64_dword(RAX);
276 fldcw_m16rel((unsigned short*)&rounding_mode);
280 void genceil_w_s(void)
282 #if defined(COUNT_INSTR)
283 inc_m32rel(&instr_count[129]);
285 #ifdef INTERPRET_CEIL_W_S
286 gencallinterp((unsigned long long)cached_interpreter_table.CEIL_W_S, 0);
288 gencheck_cop1_unusable();
289 fldcw_m16rel((unsigned short*)&ceil_mode);
290 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
291 fld_preg64_dword(RAX);
292 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
293 fistp_preg64_dword(RAX);
294 fldcw_m16rel((unsigned short*)&rounding_mode);
298 void genfloor_w_s(void)
300 #if defined(COUNT_INSTR)
301 inc_m32rel(&instr_count[130]);
303 #ifdef INTERPRET_FLOOR_W_S
304 gencallinterp((unsigned long long)cached_interpreter_table.FLOOR_W_S, 0);
306 gencheck_cop1_unusable();
307 fldcw_m16rel((unsigned short*)&floor_mode);
308 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
309 fld_preg64_dword(RAX);
310 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
311 fistp_preg64_dword(RAX);
312 fldcw_m16rel((unsigned short*)&rounding_mode);
316 void gencvt_d_s(void)
318 #if defined(COUNT_INSTR)
319 inc_m32rel(&instr_count[117]);
321 #ifdef INTERPRET_CVT_D_S
322 gencallinterp((unsigned long long)cached_interpreter_table.CVT_D_S, 0);
324 gencheck_cop1_unusable();
325 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
326 fld_preg64_dword(RAX);
327 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
328 fstp_preg64_qword(RAX);
332 void gencvt_w_s(void)
334 #if defined(COUNT_INSTR)
335 inc_m32rel(&instr_count[117]);
337 #ifdef INTERPRET_CVT_W_S
338 gencallinterp((unsigned long long)cached_interpreter_table.CVT_W_S, 0);
340 gencheck_cop1_unusable();
341 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
342 fld_preg64_dword(RAX);
343 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
344 fistp_preg64_dword(RAX);
348 void gencvt_l_s(void)
350 #if defined(COUNT_INSTR)
351 inc_m32rel(&instr_count[117]);
353 #ifdef INTERPRET_CVT_L_S
354 gencallinterp((unsigned long long)cached_interpreter_table.CVT_L_S, 0);
356 gencheck_cop1_unusable();
357 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
358 fld_preg64_dword(RAX);
359 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
360 fistp_preg64_qword(RAX);
366 #if defined(COUNT_INSTR)
367 inc_m32rel(&instr_count[118]);
369 #ifdef INTERPRET_C_F_S
370 gencallinterp((unsigned long long)cached_interpreter_table.C_F_S, 0);
372 gencheck_cop1_unusable();
373 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000);
379 #if defined(COUNT_INSTR)
380 inc_m32rel(&instr_count[118]);
382 #ifdef INTERPRET_C_UN_S
383 gencallinterp((unsigned long long)cached_interpreter_table.C_UN_S, 0);
385 gencheck_cop1_unusable();
386 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
387 fld_preg64_dword(RAX);
388 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
389 fld_preg64_dword(RAX);
393 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
394 jmp_imm_short(11); // 2
395 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
401 #if defined(COUNT_INSTR)
402 inc_m32rel(&instr_count[118]);
404 #ifdef INTERPRET_C_EQ_S
405 gencallinterp((unsigned long long)cached_interpreter_table.C_EQ_S, 0);
407 gencheck_cop1_unusable();
408 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
409 fld_preg64_dword(RAX);
410 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
411 fld_preg64_dword(RAX);
415 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
416 jmp_imm_short(11); // 2
417 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
421 void genc_ueq_s(void)
423 #if defined(COUNT_INSTR)
424 inc_m32rel(&instr_count[118]);
426 #ifdef INTERPRET_C_UEQ_S
427 gencallinterp((unsigned long long)cached_interpreter_table.C_UEQ_S, 0);
429 gencheck_cop1_unusable();
430 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
431 fld_preg64_dword(RAX);
432 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
433 fld_preg64_dword(RAX);
438 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
439 jmp_imm_short(11); // 2
440 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
444 void genc_olt_s(void)
446 #if defined(COUNT_INSTR)
447 inc_m32rel(&instr_count[118]);
449 #ifdef INTERPRET_C_OLT_S
450 gencallinterp((unsigned long long)cached_interpreter_table.C_OLT_S, 0);
452 gencheck_cop1_unusable();
453 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
454 fld_preg64_dword(RAX);
455 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
456 fld_preg64_dword(RAX);
460 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
461 jmp_imm_short(11); // 2
462 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
466 void genc_ult_s(void)
468 #if defined(COUNT_INSTR)
469 inc_m32rel(&instr_count[118]);
471 #ifdef INTERPRET_C_ULT_S
472 gencallinterp((unsigned long long)cached_interpreter_table.C_ULT_S, 0);
474 gencheck_cop1_unusable();
475 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
476 fld_preg64_dword(RAX);
477 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
478 fld_preg64_dword(RAX);
483 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
484 jmp_imm_short(11); // 2
485 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
489 void genc_ole_s(void)
491 #if defined(COUNT_INSTR)
492 inc_m32rel(&instr_count[118]);
494 #ifdef INTERPRET_C_OLE_S
495 gencallinterp((unsigned long long)cached_interpreter_table.C_OLE_S, 0);
497 gencheck_cop1_unusable();
498 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
499 fld_preg64_dword(RAX);
500 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
501 fld_preg64_dword(RAX);
505 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
506 jmp_imm_short(11); // 2
507 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
511 void genc_ule_s(void)
513 #if defined(COUNT_INSTR)
514 inc_m32rel(&instr_count[118]);
516 #ifdef INTERPRET_C_ULE_S
517 gencallinterp((unsigned long long)cached_interpreter_table.C_ULE_S, 0);
519 gencheck_cop1_unusable();
520 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
521 fld_preg64_dword(RAX);
522 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
523 fld_preg64_dword(RAX);
528 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
529 jmp_imm_short(11); // 2
530 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
536 #if defined(COUNT_INSTR)
537 inc_m32rel(&instr_count[118]);
539 #ifdef INTERPRET_C_SF_S
540 gencallinterp((unsigned long long)cached_interpreter_table.C_SF_S, 0);
542 gencheck_cop1_unusable();
543 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
544 fld_preg64_dword(RAX);
545 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
546 fld_preg64_dword(RAX);
549 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000);
553 void genc_ngle_s(void)
555 #if defined(COUNT_INSTR)
556 inc_m32rel(&instr_count[118]);
558 #ifdef INTERPRET_C_NGLE_S
559 gencallinterp((unsigned long long)cached_interpreter_table.C_NGLE_S, 0);
561 gencheck_cop1_unusable();
562 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
563 fld_preg64_dword(RAX);
564 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
565 fld_preg64_dword(RAX);
569 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
570 jmp_imm_short(11); // 2
571 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
575 void genc_seq_s(void)
577 #if defined(COUNT_INSTR)
578 inc_m32rel(&instr_count[118]);
580 #ifdef INTERPRET_C_SEQ_S
581 gencallinterp((unsigned long long)cached_interpreter_table.C_SEQ_S, 0);
583 gencheck_cop1_unusable();
584 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
585 fld_preg64_dword(RAX);
586 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
587 fld_preg64_dword(RAX);
591 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
592 jmp_imm_short(11); // 2
593 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
597 void genc_ngl_s(void)
599 #if defined(COUNT_INSTR)
600 inc_m32rel(&instr_count[118]);
602 #ifdef INTERPRET_C_NGL_S
603 gencallinterp((unsigned long long)cached_interpreter_table.C_NGL_S, 0);
605 gencheck_cop1_unusable();
606 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
607 fld_preg64_dword(RAX);
608 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
609 fld_preg64_dword(RAX);
614 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
615 jmp_imm_short(11); // 2
616 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
622 #if defined(COUNT_INSTR)
623 inc_m32rel(&instr_count[118]);
625 #ifdef INTERPRET_C_LT_S
626 gencallinterp((unsigned long long)cached_interpreter_table.C_LT_S, 0);
628 gencheck_cop1_unusable();
629 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
630 fld_preg64_dword(RAX);
631 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
632 fld_preg64_dword(RAX);
636 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
637 jmp_imm_short(11); // 2
638 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
642 void genc_nge_s(void)
644 #if defined(COUNT_INSTR)
645 inc_m32rel(&instr_count[118]);
647 #ifdef INTERPRET_C_NGE_S
648 gencallinterp((unsigned long long)cached_interpreter_table.C_NGE_S, 0);
650 gencheck_cop1_unusable();
651 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
652 fld_preg64_dword(RAX);
653 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
654 fld_preg64_dword(RAX);
659 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
660 jmp_imm_short(11); // 2
661 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
667 #if defined(COUNT_INSTR)
668 inc_m32rel(&instr_count[118]);
670 #ifdef INTERPRET_C_LE_S
671 gencallinterp((unsigned long long)cached_interpreter_table.C_LE_S, 0);
673 gencheck_cop1_unusable();
674 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
675 fld_preg64_dword(RAX);
676 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
677 fld_preg64_dword(RAX);
681 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
682 jmp_imm_short(11); // 2
683 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
687 void genc_ngt_s(void)
689 #if defined(COUNT_INSTR)
690 inc_m32rel(&instr_count[118]);
692 #ifdef INTERPRET_C_NGT_S
693 gencallinterp((unsigned long long)cached_interpreter_table.C_NGT_S, 0);
695 gencheck_cop1_unusable();
696 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.ft]));
697 fld_preg64_dword(RAX);
698 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fs]));
699 fld_preg64_dword(RAX);
704 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
705 jmp_imm_short(11); // 2
706 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11