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); |