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,7 +1224,7 @@ if test "$target_darwin_user" = "yes" ; then | ||
1224 | echo "#define CONFIG_DARWIN_USER 1" >> $config_h | 1224 | echo "#define CONFIG_DARWIN_USER 1" >> $config_h |
1225 | fi | 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 | echo "CONFIG_SOFTFLOAT=yes" >> $config_mak | 1228 | echo "CONFIG_SOFTFLOAT=yes" >> $config_mak |
1229 | echo "#define CONFIG_SOFTFLOAT 1" >> $config_h | 1229 | echo "#define CONFIG_SOFTFLOAT 1" >> $config_h |
1230 | fi | 1230 | fi |
target-ppc/exec.h
@@ -27,6 +27,10 @@ | @@ -27,6 +27,10 @@ | ||
27 | #include "cpu.h" | 27 | #include "cpu.h" |
28 | #include "exec-all.h" | 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 | register struct CPUPPCState *env asm(AREG0); | 34 | register struct CPUPPCState *env asm(AREG0); |
31 | #if TARGET_LONG_BITS > HOST_LONG_BITS | 35 | #if TARGET_LONG_BITS > HOST_LONG_BITS |
32 | /* no registers can be used */ | 36 | /* no registers can be used */ |
target-ppc/op.c
@@ -1716,7 +1716,7 @@ void OPPROTO op_srli_T1_64 (void) | @@ -1716,7 +1716,7 @@ void OPPROTO op_srli_T1_64 (void) | ||
1716 | /* fadd - fadd. */ | 1716 | /* fadd - fadd. */ |
1717 | void OPPROTO op_fadd (void) | 1717 | void OPPROTO op_fadd (void) |
1718 | { | 1718 | { |
1719 | -#ifdef CONFIG_SOFTFLOAT | 1719 | +#if USE_PRECISE_EMULATION |
1720 | do_fadd(); | 1720 | do_fadd(); |
1721 | #else | 1721 | #else |
1722 | FT0 = float64_add(FT0, FT1, &env->fp_status); | 1722 | FT0 = float64_add(FT0, FT1, &env->fp_status); |
@@ -1727,7 +1727,7 @@ void OPPROTO op_fadd (void) | @@ -1727,7 +1727,7 @@ void OPPROTO op_fadd (void) | ||
1727 | /* fsub - fsub. */ | 1727 | /* fsub - fsub. */ |
1728 | void OPPROTO op_fsub (void) | 1728 | void OPPROTO op_fsub (void) |
1729 | { | 1729 | { |
1730 | -#ifdef CONFIG_SOFTFLOAT | 1730 | +#if USE_PRECISE_EMULATION |
1731 | do_fsub(); | 1731 | do_fsub(); |
1732 | #else | 1732 | #else |
1733 | FT0 = float64_sub(FT0, FT1, &env->fp_status); | 1733 | FT0 = float64_sub(FT0, FT1, &env->fp_status); |
@@ -1738,7 +1738,7 @@ void OPPROTO op_fsub (void) | @@ -1738,7 +1738,7 @@ void OPPROTO op_fsub (void) | ||
1738 | /* fmul - fmul. */ | 1738 | /* fmul - fmul. */ |
1739 | void OPPROTO op_fmul (void) | 1739 | void OPPROTO op_fmul (void) |
1740 | { | 1740 | { |
1741 | -#ifdef CONFIG_SOFTFLOAT | 1741 | +#if USE_PRECISE_EMULATION |
1742 | do_fmul(); | 1742 | do_fmul(); |
1743 | #else | 1743 | #else |
1744 | FT0 = float64_mul(FT0, FT1, &env->fp_status); | 1744 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
@@ -1749,7 +1749,7 @@ void OPPROTO op_fmul (void) | @@ -1749,7 +1749,7 @@ void OPPROTO op_fmul (void) | ||
1749 | /* fdiv - fdiv. */ | 1749 | /* fdiv - fdiv. */ |
1750 | void OPPROTO op_fdiv (void) | 1750 | void OPPROTO op_fdiv (void) |
1751 | { | 1751 | { |
1752 | -#ifdef CONFIG_SOFTFLOAT | 1752 | +#if USE_PRECISE_EMULATION |
1753 | do_fdiv(); | 1753 | do_fdiv(); |
1754 | #else | 1754 | #else |
1755 | FT0 = float64_div(FT0, FT1, &env->fp_status); | 1755 | FT0 = float64_div(FT0, FT1, &env->fp_status); |
@@ -1796,7 +1796,7 @@ void OPPROTO op_fsel (void) | @@ -1796,7 +1796,7 @@ void OPPROTO op_fsel (void) | ||
1796 | /* fmadd - fmadd. */ | 1796 | /* fmadd - fmadd. */ |
1797 | void OPPROTO op_fmadd (void) | 1797 | void OPPROTO op_fmadd (void) |
1798 | { | 1798 | { |
1799 | -#ifdef CONFIG_SOFTFLOAT | 1799 | +#if USE_PRECISE_EMULATION |
1800 | do_fmadd(); | 1800 | do_fmadd(); |
1801 | #else | 1801 | #else |
1802 | FT0 = float64_mul(FT0, FT1, &env->fp_status); | 1802 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
@@ -1808,7 +1808,7 @@ void OPPROTO op_fmadd (void) | @@ -1808,7 +1808,7 @@ void OPPROTO op_fmadd (void) | ||
1808 | /* fmsub - fmsub. */ | 1808 | /* fmsub - fmsub. */ |
1809 | void OPPROTO op_fmsub (void) | 1809 | void OPPROTO op_fmsub (void) |
1810 | { | 1810 | { |
1811 | -#ifdef CONFIG_SOFTFLOAT | 1811 | +#if USE_PRECISE_EMULATION |
1812 | do_fmsub(); | 1812 | do_fmsub(); |
1813 | #else | 1813 | #else |
1814 | FT0 = float64_mul(FT0, FT1, &env->fp_status); | 1814 | FT0 = float64_mul(FT0, FT1, &env->fp_status); |
@@ -1835,7 +1835,7 @@ void OPPROTO op_fnmsub (void) | @@ -1835,7 +1835,7 @@ void OPPROTO op_fnmsub (void) | ||
1835 | /* frsp - frsp. */ | 1835 | /* frsp - frsp. */ |
1836 | void OPPROTO op_frsp (void) | 1836 | void OPPROTO op_frsp (void) |
1837 | { | 1837 | { |
1838 | -#ifdef CONFIG_SOFTFLOAT | 1838 | +#if USE_PRECISE_EMULATION |
1839 | do_frsp(); | 1839 | do_frsp(); |
1840 | #else | 1840 | #else |
1841 | FT0 = float64_to_float32(FT0, &env->fp_status); | 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,7 +922,7 @@ void do_float_check_status (void) | ||
922 | } | 922 | } |
923 | #endif | 923 | #endif |
924 | 924 | ||
925 | -#ifdef CONFIG_SOFTFLOAT | 925 | +#if USE_PRECISE_EMULATION |
926 | void do_fadd (void) | 926 | void do_fadd (void) |
927 | { | 927 | { |
928 | if (unlikely(float64_is_signaling_nan(FT0) || | 928 | if (unlikely(float64_is_signaling_nan(FT0) || |
@@ -989,7 +989,7 @@ void do_fdiv (void) | @@ -989,7 +989,7 @@ void do_fdiv (void) | ||
989 | FT0 = float64_div(FT0, FT1, &env->fp_status); | 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 | void do_fctiw (void) | 994 | void do_fctiw (void) |
995 | { | 995 | { |
@@ -1003,7 +1003,7 @@ void do_fctiw (void) | @@ -1003,7 +1003,7 @@ void do_fctiw (void) | ||
1003 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); | 1003 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); |
1004 | } else { | 1004 | } else { |
1005 | p.ll = float64_to_int32(FT0, &env->fp_status); | 1005 | p.ll = float64_to_int32(FT0, &env->fp_status); |
1006 | -#ifdef CONFIG_SOFTFLOAT | 1006 | +#if USE_PRECISE_EMULATION |
1007 | /* XXX: higher bits are not supposed to be significant. | 1007 | /* XXX: higher bits are not supposed to be significant. |
1008 | * to make tests easier, return the same as a real PowerPC 750 | 1008 | * to make tests easier, return the same as a real PowerPC 750 |
1009 | */ | 1009 | */ |
@@ -1025,7 +1025,7 @@ void do_fctiwz (void) | @@ -1025,7 +1025,7 @@ void do_fctiwz (void) | ||
1025 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); | 1025 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); |
1026 | } else { | 1026 | } else { |
1027 | p.ll = float64_to_int32_round_to_zero(FT0, &env->fp_status); | 1027 | p.ll = float64_to_int32_round_to_zero(FT0, &env->fp_status); |
1028 | -#ifdef CONFIG_SOFTFLOAT | 1028 | +#if USE_PRECISE_EMULATION |
1029 | /* XXX: higher bits are not supposed to be significant. | 1029 | /* XXX: higher bits are not supposed to be significant. |
1030 | * to make tests easier, return the same as a real PowerPC 750 | 1030 | * to make tests easier, return the same as a real PowerPC 750 |
1031 | */ | 1031 | */ |
@@ -1114,7 +1114,7 @@ void do_frim (void) | @@ -1114,7 +1114,7 @@ void do_frim (void) | ||
1114 | do_fri(float_round_down); | 1114 | do_fri(float_round_down); |
1115 | } | 1115 | } |
1116 | 1116 | ||
1117 | -#ifdef CONFIG_SOFTFLOAT | 1117 | +#if USE_PRECISE_EMULATION |
1118 | void do_fmadd (void) | 1118 | void do_fmadd (void) |
1119 | { | 1119 | { |
1120 | if (unlikely(float64_is_signaling_nan(FT0) || | 1120 | if (unlikely(float64_is_signaling_nan(FT0) || |
@@ -1164,7 +1164,7 @@ void do_fmsub (void) | @@ -1164,7 +1164,7 @@ void do_fmsub (void) | ||
1164 | #endif | 1164 | #endif |
1165 | } | 1165 | } |
1166 | } | 1166 | } |
1167 | -#endif /* CONFIG_SOFTFLOAT */ | 1167 | +#endif /* USE_PRECISE_EMULATION */ |
1168 | 1168 | ||
1169 | void do_fnmadd (void) | 1169 | void do_fnmadd (void) |
1170 | { | 1170 | { |
@@ -1174,7 +1174,7 @@ void do_fnmadd (void) | @@ -1174,7 +1174,7 @@ void do_fnmadd (void) | ||
1174 | /* sNaN operation */ | 1174 | /* sNaN operation */ |
1175 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); | 1175 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); |
1176 | } else { | 1176 | } else { |
1177 | -#ifdef CONFIG_SOFTFLOAT | 1177 | +#if USE_PRECISE_EMULATION |
1178 | #ifdef FLOAT128 | 1178 | #ifdef FLOAT128 |
1179 | /* This is the way the PowerPC specification defines it */ | 1179 | /* This is the way the PowerPC specification defines it */ |
1180 | float128 ft0_128, ft1_128; | 1180 | float128 ft0_128, ft1_128; |
@@ -1206,7 +1206,7 @@ void do_fnmsub (void) | @@ -1206,7 +1206,7 @@ void do_fnmsub (void) | ||
1206 | /* sNaN operation */ | 1206 | /* sNaN operation */ |
1207 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); | 1207 | fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); |
1208 | } else { | 1208 | } else { |
1209 | -#ifdef CONFIG_SOFTFLOAT | 1209 | +#if USE_PRECISE_EMULATION |
1210 | #ifdef FLOAT128 | 1210 | #ifdef FLOAT128 |
1211 | /* This is the way the PowerPC specification defines it */ | 1211 | /* This is the way the PowerPC specification defines it */ |
1212 | float128 ft0_128, ft1_128; | 1212 | float128 ft0_128, ft1_128; |
@@ -1230,7 +1230,7 @@ void do_fnmsub (void) | @@ -1230,7 +1230,7 @@ void do_fnmsub (void) | ||
1230 | } | 1230 | } |
1231 | } | 1231 | } |
1232 | 1232 | ||
1233 | -#ifdef CONFIG_SOFTFLOAT | 1233 | +#if USE_PRECISE_EMULATION |
1234 | void do_frsp (void) | 1234 | void do_frsp (void) |
1235 | { | 1235 | { |
1236 | if (unlikely(float64_is_signaling_nan(FT0))) { | 1236 | if (unlikely(float64_is_signaling_nan(FT0))) { |
@@ -1240,7 +1240,7 @@ void do_frsp (void) | @@ -1240,7 +1240,7 @@ void do_frsp (void) | ||
1240 | FT0 = float64_to_float32(FT0, &env->fp_status); | 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 | void do_fsqrt (void) | 1245 | void do_fsqrt (void) |
1246 | { | 1246 | { |
@@ -1295,7 +1295,7 @@ void do_fres (void) | @@ -1295,7 +1295,7 @@ void do_fres (void) | ||
1295 | /* Zero reciprocal */ | 1295 | /* Zero reciprocal */ |
1296 | float_zero_divide_excp(); | 1296 | float_zero_divide_excp(); |
1297 | } else if (likely(isnormal(FT0))) { | 1297 | } else if (likely(isnormal(FT0))) { |
1298 | -#ifdef CONFIG_SOFTFLOAT | 1298 | +#if USE_PRECISE_EMULATION |
1299 | FT0 = float64_div(1.0, FT0, &env->fp_status); | 1299 | FT0 = float64_div(1.0, FT0, &env->fp_status); |
1300 | FT0 = float64_to_float32(FT0, &env->fp_status); | 1300 | FT0 = float64_to_float32(FT0, &env->fp_status); |
1301 | #else | 1301 | #else |
target-ppc/op_helper.h
@@ -98,7 +98,7 @@ void do_compute_fprf (int set_class); | @@ -98,7 +98,7 @@ void do_compute_fprf (int set_class); | ||
98 | #ifdef CONFIG_SOFTFLOAT | 98 | #ifdef CONFIG_SOFTFLOAT |
99 | void do_float_check_status (void); | 99 | void do_float_check_status (void); |
100 | #endif | 100 | #endif |
101 | -#ifdef CONFIG_SOFTFLOAT | 101 | +#if USE_PRECISE_EMULATION |
102 | void do_fadd (void); | 102 | void do_fadd (void); |
103 | void do_fsub (void); | 103 | void do_fsub (void); |
104 | void do_fmul (void); | 104 | void do_fmul (void); |
@@ -109,13 +109,13 @@ void do_fre (void); | @@ -109,13 +109,13 @@ void do_fre (void); | ||
109 | void do_fres (void); | 109 | void do_fres (void); |
110 | void do_frsqrte (void); | 110 | void do_frsqrte (void); |
111 | void do_fsel (void); | 111 | void do_fsel (void); |
112 | -#ifdef CONFIG_SOFTFLOAT | 112 | +#if USE_PRECISE_EMULATION |
113 | void do_fmadd (void); | 113 | void do_fmadd (void); |
114 | void do_fmsub (void); | 114 | void do_fmsub (void); |
115 | #endif | 115 | #endif |
116 | void do_fnmadd (void); | 116 | void do_fnmadd (void); |
117 | void do_fnmsub (void); | 117 | void do_fnmsub (void); |
118 | -#ifdef CONFIG_SOFTFLOAT | 118 | +#if USE_PRECISE_EMULATION |
119 | void do_frsp (void); | 119 | void do_frsp (void); |
120 | #endif | 120 | #endif |
121 | void do_fctiw (void); | 121 | void do_fctiw (void); |