472 |
472 |
FORCE_RET();
|
473 |
473 |
}
|
474 |
474 |
|
|
475 |
void OPPROTO op_tadd_T1_T0_cc(void)
|
|
476 |
{
|
|
477 |
target_ulong src1;
|
|
478 |
|
|
479 |
src1 = T0;
|
|
480 |
T0 += T1;
|
|
481 |
env->psr = 0;
|
|
482 |
#ifdef TARGET_SPARC64
|
|
483 |
if (!(T0 & 0xffffffff))
|
|
484 |
env->psr |= PSR_ZERO;
|
|
485 |
if ((int32_t) T0 < 0)
|
|
486 |
env->psr |= PSR_NEG;
|
|
487 |
if ((T0 & 0xffffffff) < (src1 & 0xffffffff))
|
|
488 |
env->psr |= PSR_CARRY;
|
|
489 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff) ^ -1) &
|
|
490 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31))
|
|
491 |
env->psr |= PSR_OVF;
|
|
492 |
if ((src1 & 0x03) || (T1 & 0x03))
|
|
493 |
env->psr |= PSR_OVF;
|
|
494 |
|
|
495 |
env->xcc = 0;
|
|
496 |
if (!T0)
|
|
497 |
env->xcc |= PSR_ZERO;
|
|
498 |
if ((int64_t) T0 < 0)
|
|
499 |
env->xcc |= PSR_NEG;
|
|
500 |
if (T0 < src1)
|
|
501 |
env->xcc |= PSR_CARRY;
|
|
502 |
if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1ULL << 63))
|
|
503 |
env->xcc |= PSR_OVF;
|
|
504 |
#else
|
|
505 |
if (!T0)
|
|
506 |
env->psr |= PSR_ZERO;
|
|
507 |
if ((int32_t) T0 < 0)
|
|
508 |
env->psr |= PSR_NEG;
|
|
509 |
if (T0 < src1)
|
|
510 |
env->psr |= PSR_CARRY;
|
|
511 |
if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
|
|
512 |
env->psr |= PSR_OVF;
|
|
513 |
if ((src1 & 0x03) || (T1 & 0x03))
|
|
514 |
env->psr |= PSR_OVF;
|
|
515 |
#endif
|
|
516 |
FORCE_RET();
|
|
517 |
}
|
|
518 |
|
|
519 |
void OPPROTO op_tadd_T1_T0_ccTV(void)
|
|
520 |
{
|
|
521 |
target_ulong src1;
|
|
522 |
|
|
523 |
if ((T0 & 0x03) || (T1 & 0x03))
|
|
524 |
raise_exception(TT_TOVF);
|
|
525 |
|
|
526 |
src1 = T0;
|
|
527 |
T0 += T1;
|
|
528 |
|
|
529 |
#ifdef TARGET_SPARC64
|
|
530 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff) ^ -1) &
|
|
531 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31))
|
|
532 |
raise_exception(TT_TOVF);
|
|
533 |
#else
|
|
534 |
if ((src1 & 0x03) || (T1 & 0x03))
|
|
535 |
raise_exception(TT_TOVF);
|
|
536 |
#endif
|
|
537 |
|
|
538 |
env->psr = 0;
|
|
539 |
#ifdef TARGET_SPARC64
|
|
540 |
if (!(T0 & 0xffffffff))
|
|
541 |
env->psr |= PSR_ZERO;
|
|
542 |
if ((int32_t) T0 < 0)
|
|
543 |
env->psr |= PSR_NEG;
|
|
544 |
if ((T0 & 0xffffffff) < (src1 & 0xffffffff))
|
|
545 |
env->psr |= PSR_CARRY;
|
|
546 |
|
|
547 |
env->xcc = 0;
|
|
548 |
if (!T0)
|
|
549 |
env->xcc |= PSR_ZERO;
|
|
550 |
if ((int64_t) T0 < 0)
|
|
551 |
env->xcc |= PSR_NEG;
|
|
552 |
if (T0 < src1)
|
|
553 |
env->xcc |= PSR_CARRY;
|
|
554 |
#else
|
|
555 |
if (!T0)
|
|
556 |
env->psr |= PSR_ZERO;
|
|
557 |
if ((int32_t) T0 < 0)
|
|
558 |
env->psr |= PSR_NEG;
|
|
559 |
if (T0 < src1)
|
|
560 |
env->psr |= PSR_CARRY;
|
|
561 |
#endif
|
|
562 |
FORCE_RET();
|
|
563 |
}
|
|
564 |
|
475 |
565 |
void OPPROTO op_sub_T1_T0(void)
|
476 |
566 |
{
|
477 |
567 |
T0 -= T1;
|
... | ... | |
582 |
672 |
FORCE_RET();
|
583 |
673 |
}
|
584 |
674 |
|
|
675 |
void OPPROTO op_tsub_T1_T0_cc(void)
|
|
676 |
{
|
|
677 |
target_ulong src1;
|
|
678 |
|
|
679 |
src1 = T0;
|
|
680 |
T0 -= T1;
|
|
681 |
env->psr = 0;
|
|
682 |
#ifdef TARGET_SPARC64
|
|
683 |
if (!(T0 & 0xffffffff))
|
|
684 |
env->psr |= PSR_ZERO;
|
|
685 |
if ((int32_t) T0 < 0)
|
|
686 |
env->psr |= PSR_NEG;
|
|
687 |
if ((src1 & 0xffffffff) < (T1 & 0xffffffff))
|
|
688 |
env->psr |= PSR_CARRY;
|
|
689 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff)) &
|
|
690 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31))
|
|
691 |
env->psr |= PSR_OVF;
|
|
692 |
if ((src1 & 0x03) || (T1 & 0x03))
|
|
693 |
env->psr |= PSR_OVF;
|
|
694 |
|
|
695 |
env->xcc = 0;
|
|
696 |
if (!T0)
|
|
697 |
env->xcc |= PSR_ZERO;
|
|
698 |
if ((int64_t) T0 < 0)
|
|
699 |
env->xcc |= PSR_NEG;
|
|
700 |
if (src1 < T1)
|
|
701 |
env->xcc |= PSR_CARRY;
|
|
702 |
if (((src1 ^ T1) & (src1 ^ T0)) & (1ULL << 63))
|
|
703 |
env->xcc |= PSR_OVF;
|
|
704 |
#else
|
|
705 |
if (!T0)
|
|
706 |
env->psr |= PSR_ZERO;
|
|
707 |
if ((int32_t) T0 < 0)
|
|
708 |
env->psr |= PSR_NEG;
|
|
709 |
if (src1 < T1)
|
|
710 |
env->psr |= PSR_CARRY;
|
|
711 |
if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
|
|
712 |
env->psr |= PSR_OVF;
|
|
713 |
if ((src1 & 0x03) || (T1 & 0x03))
|
|
714 |
env->psr |= PSR_OVF;
|
|
715 |
#endif
|
|
716 |
FORCE_RET();
|
|
717 |
}
|
|
718 |
|
|
719 |
void OPPROTO op_tsub_T1_T0_ccTV(void)
|
|
720 |
{
|
|
721 |
target_ulong src1;
|
|
722 |
|
|
723 |
if ((T0 & 0x03) || (T1 & 0x03))
|
|
724 |
raise_exception(TT_TOVF);
|
|
725 |
|
|
726 |
src1 = T0;
|
|
727 |
T0 -= T1;
|
|
728 |
|
|
729 |
#ifdef TARGET_SPARC64
|
|
730 |
if ((((src1 & 0xffffffff) ^ (T1 & 0xffffffff)) &
|
|
731 |
((src1 & 0xffffffff) ^ (T0 & 0xffffffff))) & (1 << 31))
|
|
732 |
raise_exception(TT_TOVF);
|
|
733 |
#else
|
|
734 |
if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
|
|
735 |
raise_exception(TT_TOVF);
|
|
736 |
#endif
|
|
737 |
|
|
738 |
env->psr = 0;
|
|
739 |
#ifdef TARGET_SPARC64
|
|
740 |
if (!(T0 & 0xffffffff))
|
|
741 |
env->psr |= PSR_ZERO;
|
|
742 |
if ((int32_t) T0 < 0)
|
|
743 |
env->psr |= PSR_NEG;
|
|
744 |
if ((src1 & 0xffffffff) < (T1 & 0xffffffff))
|
|
745 |
env->psr |= PSR_CARRY;
|
|
746 |
|
|
747 |
env->xcc = 0;
|
|
748 |
if (!T0)
|
|
749 |
env->xcc |= PSR_ZERO;
|
|
750 |
if ((int64_t) T0 < 0)
|
|
751 |
env->xcc |= PSR_NEG;
|
|
752 |
if (src1 < T1)
|
|
753 |
env->xcc |= PSR_CARRY;
|
|
754 |
#else
|
|
755 |
if (!T0)
|
|
756 |
env->psr |= PSR_ZERO;
|
|
757 |
if ((int32_t) T0 < 0)
|
|
758 |
env->psr |= PSR_NEG;
|
|
759 |
if (src1 < T1)
|
|
760 |
env->psr |= PSR_CARRY;
|
|
761 |
#endif
|
|
762 |
FORCE_RET();
|
|
763 |
}
|
|
764 |
|
585 |
765 |
void OPPROTO op_and_T1_T0(void)
|
586 |
766 |
{
|
587 |
767 |
T0 &= T1;
|