Commit 1cdb9c3d82d6febb526ddb085f2dea8f59c55a93
1 parent
f9fcd6f5
Revert revisions r4168 and r4169. That's work in progress, not ready for trunk yet.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4171 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
5 changed files
with
26 additions
and
22 deletions
configure
... | ... | @@ -1224,7 +1224,7 @@ if test "$target_darwin_user" = "yes" ; then |
1224 | 1224 | echo "#define CONFIG_DARWIN_USER 1" >> $config_h |
1225 | 1225 | fi |
1226 | 1226 | |
1227 | -if test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" -o "$target_cpu" = "sparc" -o "$target_cpu" = "sparc64" -o "$target_cpu" = "sparc32plus" -o "$target_cpu" = "m68k" -o "$target_cpu" = "mips" -o "$target_cpu" = "mipsel" -o "$target_cpu" = "mipsn32" -o "$target_cpu" = "mipsn32el" -o "$target_cpu" = "mips64" -o "$target_cpu" = "mips64el" -o "$target_cpu" = "ppc" ; then | |
1227 | +if test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" -o "$target_cpu" = "sparc" -o "$target_cpu" = "sparc64" -o "$target_cpu" = "sparc32plus" -o "$target_cpu" = "m68k" -o "$target_cpu" = "mips" -o "$target_cpu" = "mipsel" -o "$target_cpu" = "mipsn32" -o "$target_cpu" = "mipsn32el" -o "$target_cpu" = "mips64" -o "$target_cpu" = "mips64el"; then | |
1228 | 1228 | echo "CONFIG_SOFTFLOAT=yes" >> $config_mak |
1229 | 1229 | echo "#define CONFIG_SOFTFLOAT 1" >> $config_h |
1230 | 1230 | fi | ... | ... |
target-ppc/exec.h
... | ... | @@ -27,6 +27,10 @@ |
27 | 27 | #include "cpu.h" |
28 | 28 | #include "exec-all.h" |
29 | 29 | |
30 | +/* For normal operations, precise emulation should not be needed */ | |
31 | +//#define USE_PRECISE_EMULATION 1 | |
32 | +#define USE_PRECISE_EMULATION 0 | |
33 | + | |
30 | 34 | register struct CPUPPCState *env asm(AREG0); |
31 | 35 | #if TARGET_LONG_BITS > HOST_LONG_BITS |
32 | 36 | /* no registers can be used */ | ... | ... |
target-ppc/op.c
... | ... | @@ -1716,7 +1716,7 @@ void OPPROTO op_srli_T1_64 (void) |
1716 | 1716 | /* fadd - fadd. */ |
1717 | 1717 | void OPPROTO op_fadd (void) |
1718 | 1718 | { |
1719 | -#ifdef CONFIG_SOFTFLOAT | |
1719 | +#if USE_PRECISE_EMULATION | |
1720 | 1720 | do_fadd(); |
1721 | 1721 | #else |
1722 | 1722 | FT0 = float64_add(FT0, FT1, &env->fp_status); |
... | ... | @@ -1727,7 +1727,7 @@ void OPPROTO op_fadd (void) |
1727 | 1727 | /* fsub - fsub. */ |
1728 | 1728 | void OPPROTO op_fsub (void) |
1729 | 1729 | { |
1730 | -#ifdef CONFIG_SOFTFLOAT | |
1730 | +#if USE_PRECISE_EMULATION | |
1731 | 1731 | do_fsub(); |
1732 | 1732 | #else |
1733 | 1733 | FT0 = float64_sub(FT0, FT1, &env->fp_status); |
... | ... | @@ -1738,7 +1738,7 @@ void OPPROTO op_fsub (void) |
1738 | 1738 | /* fmul - fmul. */ |
1739 | 1739 | void OPPROTO op_fmul (void) |
1740 | 1740 | { |
1741 | -#ifdef CONFIG_SOFTFLOAT | |
1741 | +#if USE_PRECISE_EMULATION | |
1742 | 1742 | do_fmul(); |
1743 | 1743 | #else |
1744 | 1744 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
... | ... | @@ -1749,7 +1749,7 @@ void OPPROTO op_fmul (void) |
1749 | 1749 | /* fdiv - fdiv. */ |
1750 | 1750 | void OPPROTO op_fdiv (void) |
1751 | 1751 | { |
1752 | -#ifdef CONFIG_SOFTFLOAT | |
1752 | +#if USE_PRECISE_EMULATION | |
1753 | 1753 | do_fdiv(); |
1754 | 1754 | #else |
1755 | 1755 | FT0 = float64_div(FT0, FT1, &env->fp_status); |
... | ... | @@ -1796,7 +1796,7 @@ void OPPROTO op_fsel (void) |
1796 | 1796 | /* fmadd - fmadd. */ |
1797 | 1797 | void OPPROTO op_fmadd (void) |
1798 | 1798 | { |
1799 | -#ifdef CONFIG_SOFTFLOAT | |
1799 | +#if USE_PRECISE_EMULATION | |
1800 | 1800 | do_fmadd(); |
1801 | 1801 | #else |
1802 | 1802 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
... | ... | @@ -1808,7 +1808,7 @@ void OPPROTO op_fmadd (void) |
1808 | 1808 | /* fmsub - fmsub. */ |
1809 | 1809 | void OPPROTO op_fmsub (void) |
1810 | 1810 | { |
1811 | -#ifdef CONFIG_SOFTFLOAT | |
1811 | +#if USE_PRECISE_EMULATION | |
1812 | 1812 | do_fmsub(); |
1813 | 1813 | #else |
1814 | 1814 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
... | ... | @@ -1835,7 +1835,7 @@ void OPPROTO op_fnmsub (void) |
1835 | 1835 | /* frsp - frsp. */ |
1836 | 1836 | void OPPROTO op_frsp (void) |
1837 | 1837 | { |
1838 | -#ifdef CONFIG_SOFTFLOAT | |
1838 | +#if USE_PRECISE_EMULATION | |
1839 | 1839 | do_frsp(); |
1840 | 1840 | #else |
1841 | 1841 | FT0 = float64_to_float32(FT0, &env->fp_status); | ... | ... |
target-ppc/op_helper.c
... | ... | @@ -922,7 +922,7 @@ void do_float_check_status (void) |
922 | 922 | } |
923 | 923 | #endif |
924 | 924 | |
925 | -#ifdef CONFIG_SOFTFLOAT | |
925 | +#if USE_PRECISE_EMULATION | |
926 | 926 | void do_fadd (void) |
927 | 927 | { |
928 | 928 | if (unlikely(float64_is_signaling_nan(FT0) || |
... | ... | @@ -989,7 +989,7 @@ void do_fdiv (void) |
989 | 989 | FT0 = float64_div(FT0, FT1, &env->fp_status); |
990 | 990 | } |
991 | 991 | } |
992 | -#endif /* CONFIG_SOFTFLOAT */ | |
992 | +#endif /* USE_PRECISE_EMULATION */ | |
993 | 993 | |
994 | 994 | void do_fctiw (void) |
995 | 995 | { |
... | ... | @@ -1003,7 +1003,7 @@ void do_fctiw (void) |
1003 | 1003 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); |
1004 | 1004 | } else { |
1005 | 1005 | p.ll = float64_to_int32(FT0, &env->fp_status); |
1006 | -#ifdef CONFIG_SOFTFLOAT | |
1006 | +#if USE_PRECISE_EMULATION | |
1007 | 1007 | /* XXX: higher bits are not supposed to be significant. |
1008 | 1008 | * to make tests easier, return the same as a real PowerPC 750 |
1009 | 1009 | */ |
... | ... | @@ -1025,7 +1025,7 @@ void do_fctiwz (void) |
1025 | 1025 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); |
1026 | 1026 | } else { |
1027 | 1027 | p.ll = float64_to_int32_round_to_zero(FT0, &env->fp_status); |
1028 | -#ifdef CONFIG_SOFTFLOAT | |
1028 | +#if USE_PRECISE_EMULATION | |
1029 | 1029 | /* XXX: higher bits are not supposed to be significant. |
1030 | 1030 | * to make tests easier, return the same as a real PowerPC 750 |
1031 | 1031 | */ |
... | ... | @@ -1114,7 +1114,7 @@ void do_frim (void) |
1114 | 1114 | do_fri(float_round_down); |
1115 | 1115 | } |
1116 | 1116 | |
1117 | -#ifdef CONFIG_SOFTFLOAT | |
1117 | +#if USE_PRECISE_EMULATION | |
1118 | 1118 | void do_fmadd (void) |
1119 | 1119 | { |
1120 | 1120 | if (unlikely(float64_is_signaling_nan(FT0) || |
... | ... | @@ -1164,7 +1164,7 @@ void do_fmsub (void) |
1164 | 1164 | #endif |
1165 | 1165 | } |
1166 | 1166 | } |
1167 | -#endif /* CONFIG_SOFTFLOAT */ | |
1167 | +#endif /* USE_PRECISE_EMULATION */ | |
1168 | 1168 | |
1169 | 1169 | void do_fnmadd (void) |
1170 | 1170 | { |
... | ... | @@ -1174,7 +1174,7 @@ void do_fnmadd (void) |
1174 | 1174 | /* sNaN operation */ |
1175 | 1175 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); |
1176 | 1176 | } else { |
1177 | -#ifdef CONFIG_SOFTFLOAT | |
1177 | +#if USE_PRECISE_EMULATION | |
1178 | 1178 | #ifdef FLOAT128 |
1179 | 1179 | /* This is the way the PowerPC specification defines it */ |
1180 | 1180 | float128 ft0_128, ft1_128; |
... | ... | @@ -1206,7 +1206,7 @@ void do_fnmsub (void) |
1206 | 1206 | /* sNaN operation */ |
1207 | 1207 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); |
1208 | 1208 | } else { |
1209 | -#ifdef CONFIG_SOFTFLOAT | |
1209 | +#if USE_PRECISE_EMULATION | |
1210 | 1210 | #ifdef FLOAT128 |
1211 | 1211 | /* This is the way the PowerPC specification defines it */ |
1212 | 1212 | float128 ft0_128, ft1_128; |
... | ... | @@ -1230,7 +1230,7 @@ void do_fnmsub (void) |
1230 | 1230 | } |
1231 | 1231 | } |
1232 | 1232 | |
1233 | -#ifdef CONFIG_SOFTFLOAT | |
1233 | +#if USE_PRECISE_EMULATION | |
1234 | 1234 | void do_frsp (void) |
1235 | 1235 | { |
1236 | 1236 | if (unlikely(float64_is_signaling_nan(FT0))) { |
... | ... | @@ -1240,7 +1240,7 @@ void do_frsp (void) |
1240 | 1240 | FT0 = float64_to_float32(FT0, &env->fp_status); |
1241 | 1241 | } |
1242 | 1242 | } |
1243 | -#endif /* CONFIG_SOFTFLOAT */ | |
1243 | +#endif /* USE_PRECISE_EMULATION */ | |
1244 | 1244 | |
1245 | 1245 | void do_fsqrt (void) |
1246 | 1246 | { |
... | ... | @@ -1295,7 +1295,7 @@ void do_fres (void) |
1295 | 1295 | /* Zero reciprocal */ |
1296 | 1296 | float_zero_divide_excp(); |
1297 | 1297 | } else if (likely(isnormal(FT0))) { |
1298 | -#ifdef CONFIG_SOFTFLOAT | |
1298 | +#if USE_PRECISE_EMULATION | |
1299 | 1299 | FT0 = float64_div(1.0, FT0, &env->fp_status); |
1300 | 1300 | FT0 = float64_to_float32(FT0, &env->fp_status); |
1301 | 1301 | #else | ... | ... |
target-ppc/op_helper.h
... | ... | @@ -98,7 +98,7 @@ void do_compute_fprf (int set_class); |
98 | 98 | #ifdef CONFIG_SOFTFLOAT |
99 | 99 | void do_float_check_status (void); |
100 | 100 | #endif |
101 | -#ifdef CONFIG_SOFTFLOAT | |
101 | +#if USE_PRECISE_EMULATION | |
102 | 102 | void do_fadd (void); |
103 | 103 | void do_fsub (void); |
104 | 104 | void do_fmul (void); |
... | ... | @@ -109,13 +109,13 @@ void do_fre (void); |
109 | 109 | void do_fres (void); |
110 | 110 | void do_frsqrte (void); |
111 | 111 | void do_fsel (void); |
112 | -#ifdef CONFIG_SOFTFLOAT | |
112 | +#if USE_PRECISE_EMULATION | |
113 | 113 | void do_fmadd (void); |
114 | 114 | void do_fmsub (void); |
115 | 115 | #endif |
116 | 116 | void do_fnmadd (void); |
117 | 117 | void do_fnmsub (void); |
118 | -#ifdef CONFIG_SOFTFLOAT | |
118 | +#if USE_PRECISE_EMULATION | |
119 | 119 | void do_frsp (void); |
120 | 120 | #endif |
121 | 121 | void do_fctiw (void); | ... | ... |