1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * Mupen64plus - gcop1_d.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"
34 #if defined(COUNT_INSTR)
35 inc_m32rel(&instr_count[119]);
37 #ifdef INTERPRET_ADD_D
38 gencallinterp((unsigned long long)cached_interpreter_table.ADD_D, 0);
40 gencheck_cop1_unusable();
41 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
42 fld_preg64_qword(RAX);
43 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
44 fadd_preg64_qword(RAX);
45 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
46 fstp_preg64_qword(RAX);
52 #if defined(COUNT_INSTR)
53 inc_m32rel(&instr_count[120]);
55 #ifdef INTERPRET_SUB_D
56 gencallinterp((unsigned long long)cached_interpreter_table.SUB_D, 0);
58 gencheck_cop1_unusable();
59 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
60 fld_preg64_qword(RAX);
61 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
62 fsub_preg64_qword(RAX);
63 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
64 fstp_preg64_qword(RAX);
70 #if defined(COUNT_INSTR)
71 inc_m32rel(&instr_count[121]);
73 #ifdef INTERPRET_MUL_D
74 gencallinterp((unsigned long long)cached_interpreter_table.MUL_D, 0);
76 gencheck_cop1_unusable();
77 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
78 fld_preg64_qword(RAX);
79 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
80 fmul_preg64_qword(RAX);
81 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
82 fstp_preg64_qword(RAX);
88 #if defined(COUNT_INSTR)
89 inc_m32rel(&instr_count[122]);
91 #ifdef INTERPRET_DIV_D
92 gencallinterp((unsigned long long)cached_interpreter_table.DIV_D, 0);
94 gencheck_cop1_unusable();
95 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
96 fld_preg64_qword(RAX);
97 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
98 fdiv_preg64_qword(RAX);
99 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
100 fstp_preg64_qword(RAX);
106 #if defined(COUNT_INSTR)
107 inc_m32rel(&instr_count[123]);
109 #ifdef INTERPRET_SQRT_D
110 gencallinterp((unsigned long long)cached_interpreter_table.SQRT_D, 0);
112 gencheck_cop1_unusable();
113 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
114 fld_preg64_qword(RAX);
116 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
117 fstp_preg64_qword(RAX);
123 #if defined(COUNT_INSTR)
124 inc_m32rel(&instr_count[124]);
126 #ifdef INTERPRET_ABS_D
127 gencallinterp((unsigned long long)cached_interpreter_table.ABS_D, 0);
129 gencheck_cop1_unusable();
130 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
131 fld_preg64_qword(RAX);
133 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
134 fstp_preg64_qword(RAX);
140 #if defined(COUNT_INSTR)
141 inc_m32rel(&instr_count[125]);
143 #ifdef INTERPRET_MOV_D
144 gencallinterp((unsigned long long)cached_interpreter_table.MOV_D, 0);
146 gencheck_cop1_unusable();
147 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
148 mov_reg32_preg64(EBX, RAX);
149 mov_reg32_preg64pimm32(ECX, RAX, 4);
150 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
151 mov_preg64_reg32(RAX, EBX);
152 mov_preg64pimm32_reg32(RAX, 4, ECX);
158 #if defined(COUNT_INSTR)
159 inc_m32rel(&instr_count[126]);
161 #ifdef INTERPRET_NEG_D
162 gencallinterp((unsigned long long)cached_interpreter_table.NEG_D, 0);
164 gencheck_cop1_unusable();
165 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
166 fld_preg64_qword(RAX);
168 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
169 fstp_preg64_qword(RAX);
173 void genround_l_d(void)
175 #if defined(COUNT_INSTR)
176 inc_m32rel(&instr_count[127]);
178 #ifdef INTERPRET_ROUND_L_D
179 gencallinterp((unsigned long long)cached_interpreter_table.ROUND_L_D, 0);
181 gencheck_cop1_unusable();
182 fldcw_m16rel((unsigned short*)&round_mode);
183 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
184 fld_preg64_qword(RAX);
185 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
186 fistp_preg64_qword(RAX);
187 fldcw_m16rel((unsigned short*)&rounding_mode);
191 void gentrunc_l_d(void)
193 #if defined(COUNT_INSTR)
194 inc_m32rel(&instr_count[128]);
196 #ifdef INTERPRET_TRUNC_L_D
197 gencallinterp((unsigned long long)cached_interpreter_table.TRUNC_L_D, 0);
199 gencheck_cop1_unusable();
200 fldcw_m16rel((unsigned short*)&trunc_mode);
201 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
202 fld_preg64_qword(RAX);
203 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
204 fistp_preg64_qword(RAX);
205 fldcw_m16rel((unsigned short*)&rounding_mode);
209 void genceil_l_d(void)
211 #if defined(COUNT_INSTR)
212 inc_m32rel(&instr_count[129]);
214 #ifdef INTERPRET_CEIL_L_D
215 gencallinterp((unsigned long long)cached_interpreter_table.CEIL_L_D, 0);
217 gencheck_cop1_unusable();
218 fldcw_m16rel((unsigned short*)&ceil_mode);
219 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
220 fld_preg64_qword(RAX);
221 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
222 fistp_preg64_qword(RAX);
223 fldcw_m16rel((unsigned short*)&rounding_mode);
227 void genfloor_l_d(void)
229 #if defined(COUNT_INSTR)
230 inc_m32rel(&instr_count[130]);
232 #ifdef INTERPRET_FLOOR_L_D
233 gencallinterp((unsigned long long)cached_interpreter_table.FLOOR_L_D, 0);
235 gencheck_cop1_unusable();
236 fldcw_m16rel((unsigned short*)&floor_mode);
237 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
238 fld_preg64_qword(RAX);
239 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
240 fistp_preg64_qword(RAX);
241 fldcw_m16rel((unsigned short*)&rounding_mode);
245 void genround_w_d(void)
247 #if defined(COUNT_INSTR)
248 inc_m32rel(&instr_count[127]);
250 #ifdef INTERPRET_ROUND_W_D
251 gencallinterp((unsigned long long)cached_interpreter_table.ROUND_W_D, 0);
253 gencheck_cop1_unusable();
254 fldcw_m16rel((unsigned short*)&round_mode);
255 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
256 fld_preg64_qword(RAX);
257 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
258 fistp_preg64_dword(RAX);
259 fldcw_m16rel((unsigned short*)&rounding_mode);
263 void gentrunc_w_d(void)
265 #if defined(COUNT_INSTR)
266 inc_m32rel(&instr_count[128]);
268 #ifdef INTERPRET_TRUNC_W_D
269 gencallinterp((unsigned long long)cached_interpreter_table.TRUNC_W_D, 0);
271 gencheck_cop1_unusable();
272 fldcw_m16rel((unsigned short*)&trunc_mode);
273 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
274 fld_preg64_qword(RAX);
275 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
276 fistp_preg64_dword(RAX);
277 fldcw_m16rel((unsigned short*)&rounding_mode);
281 void genceil_w_d(void)
283 #if defined(COUNT_INSTR)
284 inc_m32rel(&instr_count[129]);
286 #ifdef INTERPRET_CEIL_W_D
287 gencallinterp((unsigned long long)cached_interpreter_table.CEIL_W_D, 0);
289 gencheck_cop1_unusable();
290 fldcw_m16rel((unsigned short*)&ceil_mode);
291 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
292 fld_preg64_qword(RAX);
293 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
294 fistp_preg64_dword(RAX);
295 fldcw_m16rel((unsigned short*)&rounding_mode);
299 void genfloor_w_d(void)
301 #if defined(COUNT_INSTR)
302 inc_m32rel(&instr_count[130]);
304 #ifdef INTERPRET_FLOOR_W_D
305 gencallinterp((unsigned long long)cached_interpreter_table.FLOOR_W_D, 0);
307 gencheck_cop1_unusable();
308 fldcw_m16rel((unsigned short*)&floor_mode);
309 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
310 fld_preg64_qword(RAX);
311 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
312 fistp_preg64_dword(RAX);
313 fldcw_m16rel((unsigned short*)&rounding_mode);
317 void gencvt_s_d(void)
319 #if defined(COUNT_INSTR)
320 inc_m32rel(&instr_count[117]);
322 #ifdef INTERPRET_CVT_S_D
323 gencallinterp((unsigned long long)cached_interpreter_table.CVT_S_D, 0);
325 gencheck_cop1_unusable();
326 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
327 fld_preg64_qword(RAX);
328 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
329 fstp_preg64_dword(RAX);
333 void gencvt_w_d(void)
335 #if defined(COUNT_INSTR)
336 inc_m32rel(&instr_count[117]);
338 #ifdef INTERPRET_CVT_W_D
339 gencallinterp((unsigned long long)cached_interpreter_table.CVT_W_D, 0);
341 gencheck_cop1_unusable();
342 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
343 fld_preg64_qword(RAX);
344 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_simple[dst->f.cf.fd]));
345 fistp_preg64_dword(RAX);
349 void gencvt_l_d(void)
351 #if defined(COUNT_INSTR)
352 inc_m32rel(&instr_count[117]);
354 #ifdef INTERPRET_CVT_L_D
355 gencallinterp((unsigned long long)cached_interpreter_table.CVT_L_D, 0);
357 gencheck_cop1_unusable();
358 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
359 fld_preg64_qword(RAX);
360 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fd]));
361 fistp_preg64_qword(RAX);
367 #if defined(COUNT_INSTR)
368 inc_m32rel(&instr_count[118]);
370 #ifdef INTERPRET_C_F_D
371 gencallinterp((unsigned long long)cached_interpreter_table.C_F_D, 0);
373 gencheck_cop1_unusable();
374 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000);
380 #if defined(COUNT_INSTR)
381 inc_m32rel(&instr_count[118]);
383 #ifdef INTERPRET_C_UN_D
384 gencallinterp((unsigned long long)cached_interpreter_table.C_UN_D, 0);
386 gencheck_cop1_unusable();
387 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
388 fld_preg64_qword(RAX);
389 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
390 fld_preg64_qword(RAX);
394 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
395 jmp_imm_short(11); // 2
396 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
402 #if defined(COUNT_INSTR)
403 inc_m32rel(&instr_count[118]);
405 #ifdef INTERPRET_C_EQ_D
406 gencallinterp((unsigned long long)cached_interpreter_table.C_EQ_D, 0);
408 gencheck_cop1_unusable();
409 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
410 fld_preg64_qword(RAX);
411 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
412 fld_preg64_qword(RAX);
416 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
417 jmp_imm_short(11); // 2
418 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
422 void genc_ueq_d(void)
424 #if defined(COUNT_INSTR)
425 inc_m32rel(&instr_count[118]);
427 #ifdef INTERPRET_C_UEQ_D
428 gencallinterp((unsigned long long)cached_interpreter_table.C_UEQ_D, 0);
430 gencheck_cop1_unusable();
431 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
432 fld_preg64_qword(RAX);
433 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
434 fld_preg64_qword(RAX);
439 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
440 jmp_imm_short(11); // 2
441 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
445 void genc_olt_d(void)
447 #if defined(COUNT_INSTR)
448 inc_m32rel(&instr_count[118]);
450 #ifdef INTERPRET_C_OLT_D
451 gencallinterp((unsigned long long)cached_interpreter_table.C_OLT_D, 0);
453 gencheck_cop1_unusable();
454 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
455 fld_preg64_qword(RAX);
456 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
457 fld_preg64_qword(RAX);
461 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
462 jmp_imm_short(11); // 2
463 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
467 void genc_ult_d(void)
469 #if defined(COUNT_INSTR)
470 inc_m32rel(&instr_count[118]);
472 #ifdef INTERPRET_C_ULT_D
473 gencallinterp((unsigned long long)cached_interpreter_table.C_ULT_D, 0);
475 gencheck_cop1_unusable();
476 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
477 fld_preg64_qword(RAX);
478 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
479 fld_preg64_qword(RAX);
484 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
485 jmp_imm_short(11); // 2
486 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
490 void genc_ole_d(void)
492 #if defined(COUNT_INSTR)
493 inc_m32rel(&instr_count[118]);
495 #ifdef INTERPRET_C_OLE_D
496 gencallinterp((unsigned long long)cached_interpreter_table.C_OLE_D, 0);
498 gencheck_cop1_unusable();
499 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
500 fld_preg64_qword(RAX);
501 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
502 fld_preg64_qword(RAX);
506 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
507 jmp_imm_short(11); // 2
508 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
512 void genc_ule_d(void)
514 #if defined(COUNT_INSTR)
515 inc_m32rel(&instr_count[118]);
517 #ifdef INTERPRET_C_ULE_D
518 gencallinterp((unsigned long long)cached_interpreter_table.C_ULE_D, 0);
520 gencheck_cop1_unusable();
521 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
522 fld_preg64_qword(RAX);
523 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
524 fld_preg64_qword(RAX);
529 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
530 jmp_imm_short(11); // 2
531 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
537 #if defined(COUNT_INSTR)
538 inc_m32rel(&instr_count[118]);
540 #ifdef INTERPRET_C_SF_D
541 gencallinterp((unsigned long long)cached_interpreter_table.C_SF_D, 0);
543 gencheck_cop1_unusable();
544 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
545 fld_preg64_qword(RAX);
546 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
547 fld_preg64_qword(RAX);
550 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000);
554 void genc_ngle_d(void)
556 #if defined(COUNT_INSTR)
557 inc_m32rel(&instr_count[118]);
559 #ifdef INTERPRET_C_NGLE_D
560 gencallinterp((unsigned long long)cached_interpreter_table.C_NGLE_D, 0);
562 gencheck_cop1_unusable();
563 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
564 fld_preg64_qword(RAX);
565 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
566 fld_preg64_qword(RAX);
570 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
571 jmp_imm_short(11); // 2
572 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
576 void genc_seq_d(void)
578 #if defined(COUNT_INSTR)
579 inc_m32rel(&instr_count[118]);
581 #ifdef INTERPRET_C_SEQ_D
582 gencallinterp((unsigned long long)cached_interpreter_table.C_SEQ_D, 0);
584 gencheck_cop1_unusable();
585 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
586 fld_preg64_qword(RAX);
587 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
588 fld_preg64_qword(RAX);
592 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
593 jmp_imm_short(11); // 2
594 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
598 void genc_ngl_d(void)
600 #if defined(COUNT_INSTR)
601 inc_m32rel(&instr_count[118]);
603 #ifdef INTERPRET_C_NGL_D
604 gencallinterp((unsigned long long)cached_interpreter_table.C_NGL_D, 0);
606 gencheck_cop1_unusable();
607 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
608 fld_preg64_qword(RAX);
609 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
610 fld_preg64_qword(RAX);
615 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
616 jmp_imm_short(11); // 2
617 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
623 #if defined(COUNT_INSTR)
624 inc_m32rel(&instr_count[118]);
626 #ifdef INTERPRET_C_LT_D
627 gencallinterp((unsigned long long)cached_interpreter_table.C_LT_D, 0);
629 gencheck_cop1_unusable();
630 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
631 fld_preg64_qword(RAX);
632 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
633 fld_preg64_qword(RAX);
637 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
638 jmp_imm_short(11); // 2
639 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
643 void genc_nge_d(void)
645 #if defined(COUNT_INSTR)
646 inc_m32rel(&instr_count[118]);
648 #ifdef INTERPRET_C_NGE_D
649 gencallinterp((unsigned long long)cached_interpreter_table.C_NGE_D, 0);
651 gencheck_cop1_unusable();
652 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
653 fld_preg64_qword(RAX);
654 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
655 fld_preg64_qword(RAX);
660 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
661 jmp_imm_short(11); // 2
662 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
668 #if defined(COUNT_INSTR)
669 inc_m32rel(&instr_count[118]);
671 #ifdef INTERPRET_C_LE_D
672 gencallinterp((unsigned long long)cached_interpreter_table.C_LE_D, 0);
674 gencheck_cop1_unusable();
675 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
676 fld_preg64_qword(RAX);
677 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
678 fld_preg64_qword(RAX);
682 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
683 jmp_imm_short(11); // 2
684 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11
688 void genc_ngt_d(void)
690 #if defined(COUNT_INSTR)
691 inc_m32rel(&instr_count[118]);
693 #ifdef INTERPRET_C_NGT_D
694 gencallinterp((unsigned long long)cached_interpreter_table.C_NGT_D, 0);
696 gencheck_cop1_unusable();
697 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.ft]));
698 fld_preg64_qword(RAX);
699 mov_xreg64_m64rel(RAX, (unsigned long long *)(®_cop1_double[dst->f.cf.fs]));
700 fld_preg64_qword(RAX);
705 or_m32rel_imm32((unsigned int*)&FCR31, 0x800000); // 11
706 jmp_imm_short(11); // 2
707 and_m32rel_imm32((unsigned int*)&FCR31, ~0x800000); // 11