Revision 5d0fc900 target-mips/op.c
b/target-mips/op.c | ||
---|---|---|
377 | 377 |
|
378 | 378 |
#define FLOAT_OP(name, p) void OPPROTO op_float_##name##_##p(void) |
379 | 379 |
|
380 |
FLOAT_OP(cvtd, s) |
|
381 |
{ |
|
382 |
CALL_FROM_TB0(do_float_cvtd_s); |
|
383 |
DEBUG_FPU_STATE(); |
|
384 |
FORCE_RET(); |
|
385 |
} |
|
386 |
FLOAT_OP(cvtd, w) |
|
387 |
{ |
|
388 |
CALL_FROM_TB0(do_float_cvtd_w); |
|
389 |
DEBUG_FPU_STATE(); |
|
390 |
FORCE_RET(); |
|
391 |
} |
|
392 |
FLOAT_OP(cvtd, l) |
|
393 |
{ |
|
394 |
CALL_FROM_TB0(do_float_cvtd_l); |
|
395 |
DEBUG_FPU_STATE(); |
|
396 |
FORCE_RET(); |
|
397 |
} |
|
398 |
FLOAT_OP(cvtl, d) |
|
399 |
{ |
|
400 |
CALL_FROM_TB0(do_float_cvtl_d); |
|
401 |
DEBUG_FPU_STATE(); |
|
402 |
FORCE_RET(); |
|
403 |
} |
|
404 |
FLOAT_OP(cvtl, s) |
|
405 |
{ |
|
406 |
CALL_FROM_TB0(do_float_cvtl_s); |
|
407 |
DEBUG_FPU_STATE(); |
|
408 |
FORCE_RET(); |
|
409 |
} |
|
410 | 380 |
FLOAT_OP(cvtps, s) |
411 | 381 |
{ |
412 | 382 |
WT2 = WT0; |
... | ... | |
414 | 384 |
DEBUG_FPU_STATE(); |
415 | 385 |
FORCE_RET(); |
416 | 386 |
} |
417 |
FLOAT_OP(cvtps, pw) |
|
418 |
{ |
|
419 |
CALL_FROM_TB0(do_float_cvtps_pw); |
|
420 |
DEBUG_FPU_STATE(); |
|
421 |
FORCE_RET(); |
|
422 |
} |
|
423 |
FLOAT_OP(cvtpw, ps) |
|
424 |
{ |
|
425 |
CALL_FROM_TB0(do_float_cvtpw_ps); |
|
426 |
DEBUG_FPU_STATE(); |
|
427 |
FORCE_RET(); |
|
428 |
} |
|
429 |
FLOAT_OP(cvts, d) |
|
430 |
{ |
|
431 |
CALL_FROM_TB0(do_float_cvts_d); |
|
432 |
DEBUG_FPU_STATE(); |
|
433 |
FORCE_RET(); |
|
434 |
} |
|
435 |
FLOAT_OP(cvts, w) |
|
436 |
{ |
|
437 |
CALL_FROM_TB0(do_float_cvts_w); |
|
438 |
DEBUG_FPU_STATE(); |
|
439 |
FORCE_RET(); |
|
440 |
} |
|
441 |
FLOAT_OP(cvts, l) |
|
442 |
{ |
|
443 |
CALL_FROM_TB0(do_float_cvts_l); |
|
444 |
DEBUG_FPU_STATE(); |
|
445 |
FORCE_RET(); |
|
446 |
} |
|
447 |
FLOAT_OP(cvts, pl) |
|
448 |
{ |
|
449 |
CALL_FROM_TB0(do_float_cvts_pl); |
|
450 |
DEBUG_FPU_STATE(); |
|
451 |
FORCE_RET(); |
|
452 |
} |
|
453 |
FLOAT_OP(cvts, pu) |
|
454 |
{ |
|
455 |
CALL_FROM_TB0(do_float_cvts_pu); |
|
456 |
DEBUG_FPU_STATE(); |
|
457 |
FORCE_RET(); |
|
458 |
} |
|
459 |
FLOAT_OP(cvtw, s) |
|
460 |
{ |
|
461 |
CALL_FROM_TB0(do_float_cvtw_s); |
|
462 |
DEBUG_FPU_STATE(); |
|
463 |
FORCE_RET(); |
|
464 |
} |
|
465 |
FLOAT_OP(cvtw, d) |
|
466 |
{ |
|
467 |
CALL_FROM_TB0(do_float_cvtw_d); |
|
468 |
DEBUG_FPU_STATE(); |
|
469 |
FORCE_RET(); |
|
470 |
} |
|
471 | 387 |
|
472 | 388 |
FLOAT_OP(pll, ps) |
473 | 389 |
{ |
... | ... | |
494 | 410 |
FORCE_RET(); |
495 | 411 |
} |
496 | 412 |
|
497 |
#define FLOAT_ROUNDOP(op, ttype, stype) \ |
|
498 |
FLOAT_OP(op ## ttype, stype) \ |
|
499 |
{ \ |
|
500 |
CALL_FROM_TB0(do_float_ ## op ## ttype ## _ ## stype); \ |
|
501 |
DEBUG_FPU_STATE(); \ |
|
502 |
FORCE_RET(); \ |
|
503 |
} |
|
504 |
|
|
505 |
FLOAT_ROUNDOP(round, l, d) |
|
506 |
FLOAT_ROUNDOP(round, l, s) |
|
507 |
FLOAT_ROUNDOP(round, w, d) |
|
508 |
FLOAT_ROUNDOP(round, w, s) |
|
509 |
|
|
510 |
FLOAT_ROUNDOP(trunc, l, d) |
|
511 |
FLOAT_ROUNDOP(trunc, l, s) |
|
512 |
FLOAT_ROUNDOP(trunc, w, d) |
|
513 |
FLOAT_ROUNDOP(trunc, w, s) |
|
514 |
|
|
515 |
FLOAT_ROUNDOP(ceil, l, d) |
|
516 |
FLOAT_ROUNDOP(ceil, l, s) |
|
517 |
FLOAT_ROUNDOP(ceil, w, d) |
|
518 |
FLOAT_ROUNDOP(ceil, w, s) |
|
519 |
|
|
520 |
FLOAT_ROUNDOP(floor, l, d) |
|
521 |
FLOAT_ROUNDOP(floor, l, s) |
|
522 |
FLOAT_ROUNDOP(floor, w, d) |
|
523 |
FLOAT_ROUNDOP(floor, w, s) |
|
524 |
#undef FLOAR_ROUNDOP |
|
525 |
|
|
526 | 413 |
FLOAT_OP(movf, d) |
527 | 414 |
{ |
528 | 415 |
if (!(env->fpu->fcr31 & PARAM1)) |
... | ... | |
618 | 505 |
FORCE_RET(); |
619 | 506 |
} |
620 | 507 |
|
621 |
/* operations calling helpers, for s, d and ps */ |
|
622 |
#define FLOAT_HOP(name) \ |
|
623 |
FLOAT_OP(name, d) \ |
|
624 |
{ \ |
|
625 |
CALL_FROM_TB0(do_float_ ## name ## _d); \ |
|
626 |
DEBUG_FPU_STATE(); \ |
|
627 |
FORCE_RET(); \ |
|
628 |
} \ |
|
629 |
FLOAT_OP(name, s) \ |
|
630 |
{ \ |
|
631 |
CALL_FROM_TB0(do_float_ ## name ## _s); \ |
|
632 |
DEBUG_FPU_STATE(); \ |
|
633 |
FORCE_RET(); \ |
|
634 |
} \ |
|
635 |
FLOAT_OP(name, ps) \ |
|
636 |
{ \ |
|
637 |
CALL_FROM_TB0(do_float_ ## name ## _ps); \ |
|
638 |
DEBUG_FPU_STATE(); \ |
|
639 |
FORCE_RET(); \ |
|
640 |
} |
|
641 |
FLOAT_HOP(add) |
|
642 |
FLOAT_HOP(sub) |
|
643 |
FLOAT_HOP(mul) |
|
644 |
FLOAT_HOP(div) |
|
645 |
FLOAT_HOP(recip2) |
|
646 |
FLOAT_HOP(rsqrt2) |
|
647 |
FLOAT_HOP(rsqrt1) |
|
648 |
FLOAT_HOP(recip1) |
|
649 |
#undef FLOAT_HOP |
|
650 |
|
|
651 |
/* operations calling helpers, for s and d */ |
|
652 |
#define FLOAT_HOP(name) \ |
|
653 |
FLOAT_OP(name, d) \ |
|
654 |
{ \ |
|
655 |
CALL_FROM_TB0(do_float_ ## name ## _d); \ |
|
656 |
DEBUG_FPU_STATE(); \ |
|
657 |
FORCE_RET(); \ |
|
658 |
} \ |
|
659 |
FLOAT_OP(name, s) \ |
|
660 |
{ \ |
|
661 |
CALL_FROM_TB0(do_float_ ## name ## _s); \ |
|
662 |
DEBUG_FPU_STATE(); \ |
|
663 |
FORCE_RET(); \ |
|
664 |
} |
|
665 |
FLOAT_HOP(rsqrt) |
|
666 |
FLOAT_HOP(recip) |
|
667 |
#undef FLOAT_HOP |
|
668 |
|
|
669 |
/* operations calling helpers, for ps */ |
|
670 |
#define FLOAT_HOP(name) \ |
|
671 |
FLOAT_OP(name, ps) \ |
|
672 |
{ \ |
|
673 |
CALL_FROM_TB0(do_float_ ## name ## _ps); \ |
|
674 |
DEBUG_FPU_STATE(); \ |
|
675 |
FORCE_RET(); \ |
|
676 |
} |
|
677 |
FLOAT_HOP(addr) |
|
678 |
FLOAT_HOP(mulr) |
|
679 |
#undef FLOAT_HOP |
|
680 |
|
|
681 | 508 |
/* ternary operations */ |
682 | 509 |
#define FLOAT_TERNOP(name1, name2) \ |
683 | 510 |
FLOAT_OP(name1 ## name2, d) \ |
... | ... | |
836 | 663 |
|
837 | 664 |
extern void dump_fpu_s(CPUState *env); |
838 | 665 |
|
839 |
#define CMP_OP(fmt, op) \ |
|
840 |
void OPPROTO op_cmp ## _ ## fmt ## _ ## op(void) \ |
|
841 |
{ \ |
|
842 |
CALL_FROM_TB1(do_cmp ## _ ## fmt ## _ ## op, PARAM1); \ |
|
843 |
DEBUG_FPU_STATE(); \ |
|
844 |
FORCE_RET(); \ |
|
845 |
} \ |
|
846 |
void OPPROTO op_cmpabs ## _ ## fmt ## _ ## op(void) \ |
|
847 |
{ \ |
|
848 |
CALL_FROM_TB1(do_cmpabs ## _ ## fmt ## _ ## op, PARAM1); \ |
|
849 |
DEBUG_FPU_STATE(); \ |
|
850 |
FORCE_RET(); \ |
|
851 |
} |
|
852 |
#define CMP_OPS(op) \ |
|
853 |
CMP_OP(d, op) \ |
|
854 |
CMP_OP(s, op) \ |
|
855 |
CMP_OP(ps, op) |
|
856 |
|
|
857 |
CMP_OPS(f) |
|
858 |
CMP_OPS(un) |
|
859 |
CMP_OPS(eq) |
|
860 |
CMP_OPS(ueq) |
|
861 |
CMP_OPS(olt) |
|
862 |
CMP_OPS(ult) |
|
863 |
CMP_OPS(ole) |
|
864 |
CMP_OPS(ule) |
|
865 |
CMP_OPS(sf) |
|
866 |
CMP_OPS(ngle) |
|
867 |
CMP_OPS(seq) |
|
868 |
CMP_OPS(ngl) |
|
869 |
CMP_OPS(lt) |
|
870 |
CMP_OPS(nge) |
|
871 |
CMP_OPS(le) |
|
872 |
CMP_OPS(ngt) |
|
873 |
#undef CMP_OPS |
|
874 |
#undef CMP_OP |
|
875 |
|
|
876 | 666 |
void op_bc1f (void) |
877 | 667 |
{ |
878 | 668 |
T0 = !!(~GET_FP_COND(env->fpu) & (0x1 << PARAM1)); |
Also available in: Unified diff