From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JiyST-0002BY-R1 for qemu-devel@nongnu.org; Mon, 07 Apr 2008 17:00:53 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JiyST-0002BH-Fa for qemu-devel@nongnu.org; Mon, 07 Apr 2008 17:00:53 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JiyST-0002BC-6X for qemu-devel@nongnu.org; Mon, 07 Apr 2008 17:00:53 -0400 Received: from savannah.gnu.org ([199.232.41.3] helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JiySS-0005Hc-Nr for qemu-devel@nongnu.org; Mon, 07 Apr 2008 17:00:52 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1JiySR-0003u7-QQ for qemu-devel@nongnu.org; Mon, 07 Apr 2008 21:00:51 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1JiySR-0003u3-JD for qemu-devel@nongnu.org; Mon, 07 Apr 2008 21:00:51 +0000 MIME-Version: 1.0 Errors-To: aurel32 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Aurelien Jarno Message-Id: Date: Mon, 07 Apr 2008 21:00:51 +0000 Subject: [Qemu-devel] [4168] Always enable precise emulation when softfloat is used Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 4168 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4168 Author: aurel32 Date: 2008-04-07 21:00:51 +0000 (Mon, 07 Apr 2008) Log Message: ----------- Always enable precise emulation when softfloat is used The patch below changes the way to enable softfloat on the PPC target. It is now enabled when softfloat is used. The rationale behind this change is that persons who want precise emulation prefer precision over emulation speed. Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/target-ppc/exec.h trunk/target-ppc/op.c trunk/target-ppc/op_helper.c trunk/target-ppc/op_helper.h Modified: trunk/target-ppc/exec.h =================================================================== --- trunk/target-ppc/exec.h 2008-04-07 20:31:02 UTC (rev 4167) +++ trunk/target-ppc/exec.h 2008-04-07 21:00:51 UTC (rev 4168) @@ -27,10 +27,6 @@ #include "cpu.h" #include "exec-all.h" -/* For normal operations, precise emulation should not be needed */ -//#define USE_PRECISE_EMULATION 1 -#define USE_PRECISE_EMULATION 0 - register struct CPUPPCState *env asm(AREG0); #if TARGET_LONG_BITS > HOST_LONG_BITS /* no registers can be used */ Modified: trunk/target-ppc/op.c =================================================================== --- trunk/target-ppc/op.c 2008-04-07 20:31:02 UTC (rev 4167) +++ trunk/target-ppc/op.c 2008-04-07 21:00:51 UTC (rev 4168) @@ -1716,7 +1716,7 @@ /* fadd - fadd. */ void OPPROTO op_fadd (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fadd(); #else FT0 = float64_add(FT0, FT1, &env->fp_status); @@ -1727,7 +1727,7 @@ /* fsub - fsub. */ void OPPROTO op_fsub (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fsub(); #else FT0 = float64_sub(FT0, FT1, &env->fp_status); @@ -1738,7 +1738,7 @@ /* fmul - fmul. */ void OPPROTO op_fmul (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fmul(); #else FT0 = float64_mul(FT0, FT1, &env->fp_status); @@ -1749,7 +1749,7 @@ /* fdiv - fdiv. */ void OPPROTO op_fdiv (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fdiv(); #else FT0 = float64_div(FT0, FT1, &env->fp_status); @@ -1796,7 +1796,7 @@ /* fmadd - fmadd. */ void OPPROTO op_fmadd (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fmadd(); #else FT0 = float64_mul(FT0, FT1, &env->fp_status); @@ -1808,7 +1808,7 @@ /* fmsub - fmsub. */ void OPPROTO op_fmsub (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_fmsub(); #else FT0 = float64_mul(FT0, FT1, &env->fp_status); @@ -1835,7 +1835,7 @@ /* frsp - frsp. */ void OPPROTO op_frsp (void) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT do_frsp(); #else FT0 = float64_to_float32(FT0, &env->fp_status); Modified: trunk/target-ppc/op_helper.c =================================================================== --- trunk/target-ppc/op_helper.c 2008-04-07 20:31:02 UTC (rev 4167) +++ trunk/target-ppc/op_helper.c 2008-04-07 21:00:51 UTC (rev 4168) @@ -922,7 +922,7 @@ } #endif -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_fadd (void) { if (unlikely(float64_is_signaling_nan(FT0) || @@ -989,7 +989,7 @@ FT0 = float64_div(FT0, FT1, &env->fp_status); } } -#endif /* USE_PRECISE_EMULATION */ +#endif /* CONFIG_SOFTFLOAT */ void do_fctiw (void) { @@ -1003,7 +1003,7 @@ fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); } else { p.ll = float64_to_int32(FT0, &env->fp_status); -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT /* XXX: higher bits are not supposed to be significant. * to make tests easier, return the same as a real PowerPC 750 */ @@ -1025,7 +1025,7 @@ fload_invalid_op_excp(POWERPC_EXCP_FP_VXCVI); } else { p.ll = float64_to_int32_round_to_zero(FT0, &env->fp_status); -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT /* XXX: higher bits are not supposed to be significant. * to make tests easier, return the same as a real PowerPC 750 */ @@ -1114,7 +1114,7 @@ do_fri(float_round_down); } -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_fmadd (void) { if (unlikely(float64_is_signaling_nan(FT0) || @@ -1164,7 +1164,7 @@ #endif } } -#endif /* USE_PRECISE_EMULATION */ +#endif /* CONFIG_SOFTFLOAT */ void do_fnmadd (void) { @@ -1174,7 +1174,7 @@ /* sNaN operation */ fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); } else { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT #ifdef FLOAT128 /* This is the way the PowerPC specification defines it */ float128 ft0_128, ft1_128; @@ -1206,7 +1206,7 @@ /* sNaN operation */ fload_invalid_op_excp(POWERPC_EXCP_FP_VXSNAN); } else { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT #ifdef FLOAT128 /* This is the way the PowerPC specification defines it */ float128 ft0_128, ft1_128; @@ -1230,7 +1230,7 @@ } } -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_frsp (void) { if (unlikely(float64_is_signaling_nan(FT0))) { @@ -1240,7 +1240,7 @@ FT0 = float64_to_float32(FT0, &env->fp_status); } } -#endif /* USE_PRECISE_EMULATION */ +#endif /* CONFIG_SOFTFLOAT */ void do_fsqrt (void) { @@ -1295,7 +1295,7 @@ /* Zero reciprocal */ float_zero_divide_excp(); } else if (likely(isnormal(FT0))) { -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT FT0 = float64_div(1.0, FT0, &env->fp_status); FT0 = float64_to_float32(FT0, &env->fp_status); #else Modified: trunk/target-ppc/op_helper.h =================================================================== --- trunk/target-ppc/op_helper.h 2008-04-07 20:31:02 UTC (rev 4167) +++ trunk/target-ppc/op_helper.h 2008-04-07 21:00:51 UTC (rev 4168) @@ -98,7 +98,7 @@ #ifdef CONFIG_SOFTFLOAT void do_float_check_status (void); #endif -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_fadd (void); void do_fsub (void); void do_fmul (void); @@ -109,13 +109,13 @@ void do_fres (void); void do_frsqrte (void); void do_fsel (void); -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_fmadd (void); void do_fmsub (void); #endif void do_fnmadd (void); void do_fnmsub (void); -#if USE_PRECISE_EMULATION +#ifdef CONFIG_SOFTFLOAT void do_frsp (void); #endif void do_fctiw (void);