Revision e9c71dd1 target-mips/op.c
b/target-mips/op.c | ||
---|---|---|
781 | 781 |
FORCE_RET(); |
782 | 782 |
} |
783 | 783 |
|
784 |
/* Multiplication variants of the vr54xx. */ |
|
785 |
void op_muls (void) |
|
786 |
{ |
|
787 |
CALL_FROM_TB0(do_muls); |
|
788 |
FORCE_RET(); |
|
789 |
} |
|
790 |
|
|
791 |
void op_mulsu (void) |
|
792 |
{ |
|
793 |
CALL_FROM_TB0(do_mulsu); |
|
794 |
FORCE_RET(); |
|
795 |
} |
|
796 |
|
|
797 |
void op_macc (void) |
|
798 |
{ |
|
799 |
CALL_FROM_TB0(do_macc); |
|
800 |
FORCE_RET(); |
|
801 |
} |
|
802 |
|
|
803 |
void op_macchi (void) |
|
804 |
{ |
|
805 |
CALL_FROM_TB0(do_macchi); |
|
806 |
FORCE_RET(); |
|
807 |
} |
|
808 |
|
|
809 |
void op_maccu (void) |
|
810 |
{ |
|
811 |
CALL_FROM_TB0(do_maccu); |
|
812 |
FORCE_RET(); |
|
813 |
} |
|
814 |
void op_macchiu (void) |
|
815 |
{ |
|
816 |
CALL_FROM_TB0(do_macchiu); |
|
817 |
FORCE_RET(); |
|
818 |
} |
|
819 |
|
|
820 |
void op_msac (void) |
|
821 |
{ |
|
822 |
CALL_FROM_TB0(do_msac); |
|
823 |
FORCE_RET(); |
|
824 |
} |
|
825 |
|
|
826 |
void op_msachi (void) |
|
827 |
{ |
|
828 |
CALL_FROM_TB0(do_msachi); |
|
829 |
FORCE_RET(); |
|
830 |
} |
|
831 |
|
|
832 |
void op_msacu (void) |
|
833 |
{ |
|
834 |
CALL_FROM_TB0(do_msacu); |
|
835 |
FORCE_RET(); |
|
836 |
} |
|
837 |
|
|
838 |
void op_msachiu (void) |
|
839 |
{ |
|
840 |
CALL_FROM_TB0(do_msachiu); |
|
841 |
FORCE_RET(); |
|
842 |
} |
|
843 |
|
|
844 |
void op_mulhi (void) |
|
845 |
{ |
|
846 |
CALL_FROM_TB0(do_mulhi); |
|
847 |
FORCE_RET(); |
|
848 |
} |
|
849 |
|
|
850 |
void op_mulhiu (void) |
|
851 |
{ |
|
852 |
CALL_FROM_TB0(do_mulhiu); |
|
853 |
FORCE_RET(); |
|
854 |
} |
|
855 |
|
|
856 |
void op_mulshi (void) |
|
857 |
{ |
|
858 |
CALL_FROM_TB0(do_mulshi); |
|
859 |
FORCE_RET(); |
|
860 |
} |
|
861 |
|
|
862 |
void op_mulshiu (void) |
|
863 |
{ |
|
864 |
CALL_FROM_TB0(do_mulshiu); |
|
865 |
FORCE_RET(); |
|
866 |
} |
|
867 |
|
|
784 | 868 |
#else /* TARGET_LONG_BITS > HOST_LONG_BITS */ |
785 | 869 |
|
786 | 870 |
static always_inline uint64_t get_HILO (void) |
... | ... | |
795 | 879 |
env->HI[0][env->current_tc] = (int32_t)(HILO >> 32); |
796 | 880 |
} |
797 | 881 |
|
882 |
static always_inline void set_HIT0_LO (uint64_t HILO) |
|
883 |
{ |
|
884 |
env->LO[0][env->current_tc] = (int32_t)(HILO & 0xFFFFFFFF); |
|
885 |
T0 = env->HI[0][env->current_tc] = (int32_t)(HILO >> 32); |
|
886 |
} |
|
887 |
|
|
888 |
static always_inline void set_HI_LOT0 (uint64_t HILO) |
|
889 |
{ |
|
890 |
T0 = env->LO[0][env->current_tc] = (int32_t)(HILO & 0xFFFFFFFF); |
|
891 |
env->HI[0][env->current_tc] = (int32_t)(HILO >> 32); |
|
892 |
} |
|
893 |
|
|
798 | 894 |
void op_mult (void) |
799 | 895 |
{ |
800 | 896 |
set_HILO((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1); |
... | ... | |
842 | 938 |
set_HILO(get_HILO() - tmp); |
843 | 939 |
FORCE_RET(); |
844 | 940 |
} |
941 |
|
|
942 |
/* Multiplication variants of the vr54xx. */ |
|
943 |
void op_muls (void) |
|
944 |
{ |
|
945 |
set_HI_LOT0(0 - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
946 |
FORCE_RET(); |
|
947 |
} |
|
948 |
|
|
949 |
void op_mulsu (void) |
|
950 |
{ |
|
951 |
set_HI_LOT0(0 - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
952 |
FORCE_RET(); |
|
953 |
} |
|
954 |
|
|
955 |
void op_macc (void) |
|
956 |
{ |
|
957 |
set_HI_LOT0(get_HILO() + ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
958 |
FORCE_RET(); |
|
959 |
} |
|
960 |
|
|
961 |
void op_macchi (void) |
|
962 |
{ |
|
963 |
set_HIT0_LO(get_HILO() + ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
964 |
FORCE_RET(); |
|
965 |
} |
|
966 |
|
|
967 |
void op_maccu (void) |
|
968 |
{ |
|
969 |
set_HI_LOT0(get_HILO() + ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
970 |
FORCE_RET(); |
|
971 |
} |
|
972 |
|
|
973 |
void op_macchiu (void) |
|
974 |
{ |
|
975 |
set_HIT0_LO(get_HILO() + ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
976 |
FORCE_RET(); |
|
977 |
} |
|
978 |
|
|
979 |
void op_msac (void) |
|
980 |
{ |
|
981 |
set_HI_LOT0(get_HILO() - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
982 |
FORCE_RET(); |
|
983 |
} |
|
984 |
|
|
985 |
void op_msachi (void) |
|
986 |
{ |
|
987 |
set_HIT0_LO(get_HILO() - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
988 |
FORCE_RET(); |
|
989 |
} |
|
990 |
|
|
991 |
void op_msacu (void) |
|
992 |
{ |
|
993 |
set_HI_LOT0(get_HILO() - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
994 |
FORCE_RET(); |
|
995 |
} |
|
996 |
|
|
997 |
void op_msachiu (void) |
|
998 |
{ |
|
999 |
set_HIT0_LO(get_HILO() - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
1000 |
FORCE_RET(); |
|
1001 |
} |
|
1002 |
|
|
1003 |
void op_mulhi (void) |
|
1004 |
{ |
|
1005 |
set_HIT0_LO((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1); |
|
1006 |
FORCE_RET(); |
|
1007 |
} |
|
1008 |
|
|
1009 |
void op_mulhiu (void) |
|
1010 |
{ |
|
1011 |
set_HIT0_LO((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1); |
|
1012 |
FORCE_RET(); |
|
1013 |
} |
|
1014 |
|
|
1015 |
void op_mulshi (void) |
|
1016 |
{ |
|
1017 |
set_HIT0_LO(0 - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1)); |
|
1018 |
FORCE_RET(); |
|
1019 |
} |
|
1020 |
|
|
1021 |
void op_mulshiu (void) |
|
1022 |
{ |
|
1023 |
set_HIT0_LO(0 - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1)); |
|
1024 |
FORCE_RET(); |
|
1025 |
} |
|
1026 |
|
|
845 | 1027 |
#endif /* TARGET_LONG_BITS > HOST_LONG_BITS */ |
846 | 1028 |
|
847 | 1029 |
#if defined(TARGET_MIPS64) |
Also available in: Unified diff