Commit 544540979cb8ebb4b4ca71bd8df89e5d8e7f8600

Authored by ths
1 parent dee96f6c

Less magic constants.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3266 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 29 additions and 25 deletions
target-mips/op_helper.c
@@ -613,6 +613,10 @@ void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr) @@ -613,6 +613,10 @@ void tlb_fill (target_ulong addr, int is_write, int is_user, void *retaddr)
613 #define FLOAT_ONE64 (0x3ffULL << 52) 613 #define FLOAT_ONE64 (0x3ffULL << 52)
614 #define FLOAT_TWO32 (1 << 30) 614 #define FLOAT_TWO32 (1 << 30)
615 #define FLOAT_TWO64 (1ULL << 62) 615 #define FLOAT_TWO64 (1ULL << 62)
  616 +#define FLOAT_QNAN32 0x7fbfffff
  617 +#define FLOAT_QNAN64 0x7ff7ffffffffffffULL
  618 +#define FLOAT_SNAN32 0x7fffffff
  619 +#define FLOAT_SNAN64 0x7fffffffffffffffULL
616 620
617 /* convert MIPS rounding mode in FCR31 to IEEE library */ 621 /* convert MIPS rounding mode in FCR31 to IEEE library */
618 unsigned int ieee_rm[] = { 622 unsigned int ieee_rm[] = {
@@ -736,7 +740,7 @@ FLOAT_OP(cvtl, d) @@ -736,7 +740,7 @@ FLOAT_OP(cvtl, d)
736 DT2 = float64_to_int64(FDT0, &env->fpu->fp_status); 740 DT2 = float64_to_int64(FDT0, &env->fpu->fp_status);
737 update_fcr31(); 741 update_fcr31();
738 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 742 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
739 - DT2 = 0x7fffffffffffffffULL; 743 + DT2 = FLOAT_SNAN64;
740 } 744 }
741 FLOAT_OP(cvtl, s) 745 FLOAT_OP(cvtl, s)
742 { 746 {
@@ -744,7 +748,7 @@ FLOAT_OP(cvtl, s) @@ -744,7 +748,7 @@ FLOAT_OP(cvtl, s)
744 DT2 = float32_to_int64(FST0, &env->fpu->fp_status); 748 DT2 = float32_to_int64(FST0, &env->fpu->fp_status);
745 update_fcr31(); 749 update_fcr31();
746 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 750 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
747 - DT2 = 0x7fffffffffffffffULL; 751 + DT2 = FLOAT_SNAN64;
748 } 752 }
749 753
750 FLOAT_OP(cvtps, pw) 754 FLOAT_OP(cvtps, pw)
@@ -761,7 +765,7 @@ FLOAT_OP(cvtpw, ps) @@ -761,7 +765,7 @@ FLOAT_OP(cvtpw, ps)
761 WTH2 = float32_to_int32(FSTH0, &env->fpu->fp_status); 765 WTH2 = float32_to_int32(FSTH0, &env->fpu->fp_status);
762 update_fcr31(); 766 update_fcr31();
763 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 767 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
764 - WT2 = 0x7fffffff; 768 + WT2 = FLOAT_SNAN32;
765 } 769 }
766 FLOAT_OP(cvts, d) 770 FLOAT_OP(cvts, d)
767 { 771 {
@@ -799,7 +803,7 @@ FLOAT_OP(cvtw, s) @@ -799,7 +803,7 @@ FLOAT_OP(cvtw, s)
799 WT2 = float32_to_int32(FST0, &env->fpu->fp_status); 803 WT2 = float32_to_int32(FST0, &env->fpu->fp_status);
800 update_fcr31(); 804 update_fcr31();
801 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 805 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
802 - WT2 = 0x7fffffff; 806 + WT2 = FLOAT_SNAN32;
803 } 807 }
804 FLOAT_OP(cvtw, d) 808 FLOAT_OP(cvtw, d)
805 { 809 {
@@ -807,7 +811,7 @@ FLOAT_OP(cvtw, d) @@ -807,7 +811,7 @@ FLOAT_OP(cvtw, d)
807 WT2 = float64_to_int32(FDT0, &env->fpu->fp_status); 811 WT2 = float64_to_int32(FDT0, &env->fpu->fp_status);
808 update_fcr31(); 812 update_fcr31();
809 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 813 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
810 - WT2 = 0x7fffffff; 814 + WT2 = FLOAT_SNAN32;
811 } 815 }
812 816
813 FLOAT_OP(roundl, d) 817 FLOAT_OP(roundl, d)
@@ -817,7 +821,7 @@ FLOAT_OP(roundl, d) @@ -817,7 +821,7 @@ FLOAT_OP(roundl, d)
817 RESTORE_ROUNDING_MODE; 821 RESTORE_ROUNDING_MODE;
818 update_fcr31(); 822 update_fcr31();
819 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 823 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
820 - DT2 = 0x7fffffffffffffffULL; 824 + DT2 = FLOAT_SNAN64;
821 } 825 }
822 FLOAT_OP(roundl, s) 826 FLOAT_OP(roundl, s)
823 { 827 {
@@ -826,7 +830,7 @@ FLOAT_OP(roundl, s) @@ -826,7 +830,7 @@ FLOAT_OP(roundl, s)
826 RESTORE_ROUNDING_MODE; 830 RESTORE_ROUNDING_MODE;
827 update_fcr31(); 831 update_fcr31();
828 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 832 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
829 - DT2 = 0x7fffffffffffffffULL; 833 + DT2 = FLOAT_SNAN64;
830 } 834 }
831 FLOAT_OP(roundw, d) 835 FLOAT_OP(roundw, d)
832 { 836 {
@@ -835,7 +839,7 @@ FLOAT_OP(roundw, d) @@ -835,7 +839,7 @@ FLOAT_OP(roundw, d)
835 RESTORE_ROUNDING_MODE; 839 RESTORE_ROUNDING_MODE;
836 update_fcr31(); 840 update_fcr31();
837 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 841 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
838 - WT2 = 0x7fffffff; 842 + WT2 = FLOAT_SNAN32;
839 } 843 }
840 FLOAT_OP(roundw, s) 844 FLOAT_OP(roundw, s)
841 { 845 {
@@ -844,7 +848,7 @@ FLOAT_OP(roundw, s) @@ -844,7 +848,7 @@ FLOAT_OP(roundw, s)
844 RESTORE_ROUNDING_MODE; 848 RESTORE_ROUNDING_MODE;
845 update_fcr31(); 849 update_fcr31();
846 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 850 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
847 - WT2 = 0x7fffffff; 851 + WT2 = FLOAT_SNAN32;
848 } 852 }
849 853
850 FLOAT_OP(truncl, d) 854 FLOAT_OP(truncl, d)
@@ -852,28 +856,28 @@ FLOAT_OP(truncl, d) @@ -852,28 +856,28 @@ FLOAT_OP(truncl, d)
852 DT2 = float64_to_int64_round_to_zero(FDT0, &env->fpu->fp_status); 856 DT2 = float64_to_int64_round_to_zero(FDT0, &env->fpu->fp_status);
853 update_fcr31(); 857 update_fcr31();
854 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 858 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
855 - DT2 = 0x7fffffffffffffffULL; 859 + DT2 = FLOAT_SNAN64;
856 } 860 }
857 FLOAT_OP(truncl, s) 861 FLOAT_OP(truncl, s)
858 { 862 {
859 DT2 = float32_to_int64_round_to_zero(FST0, &env->fpu->fp_status); 863 DT2 = float32_to_int64_round_to_zero(FST0, &env->fpu->fp_status);
860 update_fcr31(); 864 update_fcr31();
861 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 865 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
862 - DT2 = 0x7fffffffffffffffULL; 866 + DT2 = FLOAT_SNAN64;
863 } 867 }
864 FLOAT_OP(truncw, d) 868 FLOAT_OP(truncw, d)
865 { 869 {
866 WT2 = float64_to_int32_round_to_zero(FDT0, &env->fpu->fp_status); 870 WT2 = float64_to_int32_round_to_zero(FDT0, &env->fpu->fp_status);
867 update_fcr31(); 871 update_fcr31();
868 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 872 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
869 - WT2 = 0x7fffffff; 873 + WT2 = FLOAT_SNAN32;
870 } 874 }
871 FLOAT_OP(truncw, s) 875 FLOAT_OP(truncw, s)
872 { 876 {
873 WT2 = float32_to_int32_round_to_zero(FST0, &env->fpu->fp_status); 877 WT2 = float32_to_int32_round_to_zero(FST0, &env->fpu->fp_status);
874 update_fcr31(); 878 update_fcr31();
875 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 879 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
876 - WT2 = 0x7fffffff; 880 + WT2 = FLOAT_SNAN32;
877 } 881 }
878 882
879 FLOAT_OP(ceill, d) 883 FLOAT_OP(ceill, d)
@@ -883,7 +887,7 @@ FLOAT_OP(ceill, d) @@ -883,7 +887,7 @@ FLOAT_OP(ceill, d)
883 RESTORE_ROUNDING_MODE; 887 RESTORE_ROUNDING_MODE;
884 update_fcr31(); 888 update_fcr31();
885 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 889 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
886 - DT2 = 0x7fffffffffffffffULL; 890 + DT2 = FLOAT_SNAN64;
887 } 891 }
888 FLOAT_OP(ceill, s) 892 FLOAT_OP(ceill, s)
889 { 893 {
@@ -892,7 +896,7 @@ FLOAT_OP(ceill, s) @@ -892,7 +896,7 @@ FLOAT_OP(ceill, s)
892 RESTORE_ROUNDING_MODE; 896 RESTORE_ROUNDING_MODE;
893 update_fcr31(); 897 update_fcr31();
894 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 898 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
895 - DT2 = 0x7fffffffffffffffULL; 899 + DT2 = FLOAT_SNAN64;
896 } 900 }
897 FLOAT_OP(ceilw, d) 901 FLOAT_OP(ceilw, d)
898 { 902 {
@@ -901,7 +905,7 @@ FLOAT_OP(ceilw, d) @@ -901,7 +905,7 @@ FLOAT_OP(ceilw, d)
901 RESTORE_ROUNDING_MODE; 905 RESTORE_ROUNDING_MODE;
902 update_fcr31(); 906 update_fcr31();
903 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 907 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
904 - WT2 = 0x7fffffff; 908 + WT2 = FLOAT_SNAN32;
905 } 909 }
906 FLOAT_OP(ceilw, s) 910 FLOAT_OP(ceilw, s)
907 { 911 {
@@ -910,7 +914,7 @@ FLOAT_OP(ceilw, s) @@ -910,7 +914,7 @@ FLOAT_OP(ceilw, s)
910 RESTORE_ROUNDING_MODE; 914 RESTORE_ROUNDING_MODE;
911 update_fcr31(); 915 update_fcr31();
912 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 916 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
913 - WT2 = 0x7fffffff; 917 + WT2 = FLOAT_SNAN32;
914 } 918 }
915 919
916 FLOAT_OP(floorl, d) 920 FLOAT_OP(floorl, d)
@@ -920,7 +924,7 @@ FLOAT_OP(floorl, d) @@ -920,7 +924,7 @@ FLOAT_OP(floorl, d)
920 RESTORE_ROUNDING_MODE; 924 RESTORE_ROUNDING_MODE;
921 update_fcr31(); 925 update_fcr31();
922 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 926 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
923 - DT2 = 0x7fffffffffffffffULL; 927 + DT2 = FLOAT_SNAN64;
924 } 928 }
925 FLOAT_OP(floorl, s) 929 FLOAT_OP(floorl, s)
926 { 930 {
@@ -929,7 +933,7 @@ FLOAT_OP(floorl, s) @@ -929,7 +933,7 @@ FLOAT_OP(floorl, s)
929 RESTORE_ROUNDING_MODE; 933 RESTORE_ROUNDING_MODE;
930 update_fcr31(); 934 update_fcr31();
931 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 935 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
932 - DT2 = 0x7fffffffffffffffULL; 936 + DT2 = FLOAT_SNAN64;
933 } 937 }
934 FLOAT_OP(floorw, d) 938 FLOAT_OP(floorw, d)
935 { 939 {
@@ -938,7 +942,7 @@ FLOAT_OP(floorw, d) @@ -938,7 +942,7 @@ FLOAT_OP(floorw, d)
938 RESTORE_ROUNDING_MODE; 942 RESTORE_ROUNDING_MODE;
939 update_fcr31(); 943 update_fcr31();
940 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 944 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
941 - WT2 = 0x7fffffff; 945 + WT2 = FLOAT_SNAN32;
942 } 946 }
943 FLOAT_OP(floorw, s) 947 FLOAT_OP(floorw, s)
944 { 948 {
@@ -947,7 +951,7 @@ FLOAT_OP(floorw, s) @@ -947,7 +951,7 @@ FLOAT_OP(floorw, s)
947 RESTORE_ROUNDING_MODE; 951 RESTORE_ROUNDING_MODE;
948 update_fcr31(); 952 update_fcr31();
949 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID)) 953 if (GET_FP_CAUSE(env->fpu->fcr31) & (FP_OVERFLOW | FP_INVALID))
950 - WT2 = 0x7fffffff; 954 + WT2 = FLOAT_SNAN32;
951 } 955 }
952 956
953 /* MIPS specific unary operations */ 957 /* MIPS specific unary operations */
@@ -1031,7 +1035,7 @@ FLOAT_OP(name, d) \ @@ -1031,7 +1035,7 @@ FLOAT_OP(name, d) \
1031 FDT2 = float64_ ## name (FDT0, FDT1, &env->fpu->fp_status); \ 1035 FDT2 = float64_ ## name (FDT0, FDT1, &env->fpu->fp_status); \
1032 update_fcr31(); \ 1036 update_fcr31(); \
1033 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) \ 1037 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) \
1034 - FDT2 = 0x7ff7ffffffffffffULL; \ 1038 + FDT2 = FLOAT_QNAN64; \
1035 } \ 1039 } \
1036 FLOAT_OP(name, s) \ 1040 FLOAT_OP(name, s) \
1037 { \ 1041 { \
@@ -1039,7 +1043,7 @@ FLOAT_OP(name, s) \ @@ -1039,7 +1043,7 @@ FLOAT_OP(name, s) \
1039 FST2 = float32_ ## name (FST0, FST1, &env->fpu->fp_status); \ 1043 FST2 = float32_ ## name (FST0, FST1, &env->fpu->fp_status); \
1040 update_fcr31(); \ 1044 update_fcr31(); \
1041 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) \ 1045 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) \
1042 - FST2 = 0x7fbfffff; \ 1046 + FST2 = FLOAT_QNAN32; \
1043 } \ 1047 } \
1044 FLOAT_OP(name, ps) \ 1048 FLOAT_OP(name, ps) \
1045 { \ 1049 { \
@@ -1048,8 +1052,8 @@ FLOAT_OP(name, ps) \ @@ -1048,8 +1052,8 @@ FLOAT_OP(name, ps) \
1048 FSTH2 = float32_ ## name (FSTH0, FSTH1, &env->fpu->fp_status); \ 1052 FSTH2 = float32_ ## name (FSTH0, FSTH1, &env->fpu->fp_status); \
1049 update_fcr31(); \ 1053 update_fcr31(); \
1050 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) { \ 1054 if (GET_FP_CAUSE(env->fpu->fcr31) & FP_INVALID) { \
1051 - FST2 = 0x7fbfffff; \  
1052 - FSTH2 = 0x7fbfffff; \ 1055 + FST2 = FLOAT_QNAN32; \
  1056 + FSTH2 = FLOAT_QNAN32; \
1053 } \ 1057 } \
1054 } 1058 }
1055 FLOAT_BINOP(add) 1059 FLOAT_BINOP(add)