From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1L3fkt-0001B6-PX for qemu-devel@nongnu.org; Fri, 21 Nov 2008 18:49:43 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1L3fks-00019j-QW for qemu-devel@nongnu.org; Fri, 21 Nov 2008 18:49:42 -0500 Received: from [199.232.76.173] (port=49853 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1L3fks-00019b-KH for qemu-devel@nongnu.org; Fri, 21 Nov 2008 18:49:42 -0500 Received: from savannah.gnu.org ([199.232.41.3]:37827 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 1L3fks-0006JX-Fn for qemu-devel@nongnu.org; Fri, 21 Nov 2008 18:49:42 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1L3fkr-0002wn-Br for qemu-devel@nongnu.org; Fri, 21 Nov 2008 23:49:41 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1L3fkr-0002we-1W for qemu-devel@nongnu.org; Fri, 21 Nov 2008 23:49:41 +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: Fri, 21 Nov 2008 23:49:41 +0000 Subject: [Qemu-devel] [5771] target-alpha: use CPU_Float/CPU_Double instead of ugly casts 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: 5771 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5771 Author: aurel32 Date: 2008-11-21 23:49:40 +0000 (Fri, 21 Nov 2008) Log Message: ----------- target-alpha: use CPU_Float/CPU_Double instead of ugly casts Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/target-alpha/op_helper.c Modified: trunk/target-alpha/op_helper.c =================================================================== --- trunk/target-alpha/op_helper.c 2008-11-21 22:33:15 UTC (rev 5770) +++ trunk/target-alpha/op_helper.c 2008-11-21 23:49:40 UTC (rev 5771) @@ -345,13 +345,13 @@ /* F floating (VAX) */ static always_inline uint64_t float32_to_f (float32 fa) { - uint32_t a; uint64_t r, exp, mant, sig; + CPU_FloatU a; - a = *(uint32_t*)(&fa); - sig = ((uint64_t)a & 0x80000000) << 32; - exp = (a >> 23) & 0xff; - mant = ((uint64_t)a & 0x007fffff) << 29; + a.f = fa; + sig = ((uint64_t)a.l & 0x80000000) << 32; + exp = (a.l >> 23) & 0xff; + mant = ((uint64_t)a.l & 0x007fffff) << 29; if (exp == 255) { /* NaN or infinity */ @@ -378,7 +378,8 @@ static always_inline float32 f_to_float32 (uint64_t a) { - uint32_t r, exp, mant_sig; + uint32_t exp, mant_sig; + CPU_FloatU r; exp = ((a >> 55) & 0x80) | ((a >> 52) & 0x7f); mant_sig = ((a >> 32) & 0x80000000) | ((a >> 29) & 0x007fffff); @@ -390,12 +391,12 @@ if (exp < 3) { /* Underflow */ - r = 0; + r.l = 0; } else { - r = ((exp - 2) << 23) | mant_sig; + r.l = ((exp - 2) << 23) | mant_sig; } - return *(float32*)(&a); + return r.f; } uint32_t helper_f_to_memory (uint64_t a) @@ -471,12 +472,13 @@ /* G floating (VAX) */ static always_inline uint64_t float64_to_g (float64 fa) { - uint64_t a, r, exp, mant, sig; + uint64_t r, exp, mant, sig; + CPU_DoubleU a; - a = *(uint64_t*)(&fa); - sig = a & 0x8000000000000000ull; - exp = (a >> 52) & 0x7ff; - mant = a & 0x000fffffffffffffull; + a.d = fa; + sig = a.ll & 0x8000000000000000ull; + exp = (a.ll >> 52) & 0x7ff; + mant = a.ll & 0x000fffffffffffffull; if (exp == 2047) { /* NaN or infinity */ @@ -503,7 +505,8 @@ static always_inline float64 g_to_float64 (uint64_t a) { - uint64_t r, exp, mant_sig; + uint64_t exp, mant_sig; + CPU_DoubleU r; exp = (a >> 52) & 0x7ff; mant_sig = a & 0x800fffffffffffffull; @@ -515,12 +518,12 @@ if (exp < 3) { /* Underflow */ - r = 0; + r.ll = 0; } else { - r = ((exp - 2) << 52) | mant_sig; + r.ll = ((exp - 2) << 52) | mant_sig; } - return *(float64*)(&a); + return r.d; } uint64_t helper_g_to_memory (uint64_t a) @@ -596,21 +599,22 @@ /* S floating (single) */ static always_inline uint64_t float32_to_s (float32 fa) { - uint32_t a; + CPU_FloatU a; uint64_t r; - a = *(uint32_t*)(&fa); + a.f = fa; - r = (((uint64_t)(a & 0xc0000000)) << 32) | (((uint64_t)(a & 0x3fffffff)) << 29); - if (((a & 0x7f800000) != 0x7f800000) && (!(a & 0x40000000))) + r = (((uint64_t)(a.l & 0xc0000000)) << 32) | (((uint64_t)(a.l & 0x3fffffff)) << 29); + if (((a.l & 0x7f800000) != 0x7f800000) && (!(a.l & 0x40000000))) r |= 0x7ll << 59; return r; } static always_inline float32 s_to_float32 (uint64_t a) { - uint32_t r = ((a >> 32) & 0xc0000000) | ((a >> 29) & 0x3fffffff); - return *(float32*)(&r); + CPU_FloatU r; + r.l = ((a >> 32) & 0xc0000000) | ((a >> 29) & 0x3fffffff); + return r.f; } uint32_t helper_s_to_memory (uint64_t a) @@ -680,13 +684,17 @@ static always_inline float64 t_to_float64 (uint64_t a) { /* Memory format is the same as float64 */ - return *(float64*)(&a); + CPU_DoubleU r; + r.ll = a; + return r.d; } static always_inline uint64_t float64_to_t (float64 fa) { /* Memory format is the same as float64 */ - return *(uint64*)(&fa); + CPU_DoubleU r; + r.d = fa; + return r.ll; } uint64_t helper_addt (uint64_t a, uint64_t b)