summaryrefslogtreecommitdiff
path: root/gcc/config/fp-bit.c
diff options
context:
space:
mode:
authorcrux <crux@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-29 10:48:44 +0000
committercrux <crux@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-29 10:48:44 +0000
commit45e2fe08f74b4f4a7b32c07c68ff4cc79c0bc845 (patch)
tree2239bdd561d881db2c9667680ba470ed8f85fb20 /gcc/config/fp-bit.c
parent272a21709773af49d9ed865b1119f75782b6e942 (diff)
downloadgcc-45e2fe08f74b4f4a7b32c07c68ff4cc79c0bc845.tar.gz
Fix possible aliasing problems
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28963 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/fp-bit.c')
-rw-r--r--gcc/config/fp-bit.c112
1 files changed, 85 insertions, 27 deletions
diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c
index 6b8bd703f7e..25fe4ef451b 100644
--- a/gcc/config/fp-bit.c
+++ b/gcc/config/fp-bit.c
@@ -780,9 +780,13 @@ add (FLO_type arg_a, FLO_type arg_b)
fp_number_type b;
fp_number_type tmp;
fp_number_type *res;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
res = _fpadd_parts (&a, &b, &tmp);
@@ -796,9 +800,13 @@ sub (FLO_type arg_a, FLO_type arg_b)
fp_number_type b;
fp_number_type tmp;
fp_number_type *res;
+ FLO_union_type au, bu;
+
+ au.value = arg_a;
+ bu.value = arg_b;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
b.sign ^= 1;
@@ -986,9 +994,13 @@ multiply (FLO_type arg_a, FLO_type arg_b)
fp_number_type b;
fp_number_type tmp;
fp_number_type *res;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
res = _fpmul_parts (&a, &b, &tmp);
@@ -1092,9 +1104,13 @@ divide (FLO_type arg_a, FLO_type arg_b)
fp_number_type a;
fp_number_type b;
fp_number_type *res;
+ FLO_union_type au, bu;
+
+ au.value = arg_a;
+ bu.value = arg_b;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
res = _fpdiv_parts (&a, &b);
@@ -1195,9 +1211,13 @@ compare (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
return __fpcmp_parts (&a, &b);
}
@@ -1213,9 +1233,13 @@ _eq_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
+
+ au.value = arg_a;
+ bu.value = arg_b;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return 1; /* false, truth == 0 */
@@ -1230,9 +1254,13 @@ _ne_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return 1; /* true, truth != 0 */
@@ -1247,9 +1275,13 @@ _gt_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
+
+ au.value = arg_a;
+ bu.value = arg_b;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return -1; /* false, truth > 0 */
@@ -1264,9 +1296,13 @@ _ge_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return -1; /* false, truth >= 0 */
@@ -1280,9 +1316,13 @@ _lt_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
+
+ au.value = arg_a;
+ bu.value = arg_b;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return 1; /* false, truth < 0 */
@@ -1297,9 +1337,13 @@ _le_f2 (FLO_type arg_a, FLO_type arg_b)
{
fp_number_type a;
fp_number_type b;
+ FLO_union_type au, bu;
- unpack_d ((FLO_union_type *) & arg_a, &a);
- unpack_d ((FLO_union_type *) & arg_b, &b);
+ au.value = arg_a;
+ bu.value = arg_b;
+
+ unpack_d (&au, &a);
+ unpack_d (&bu, &b);
if (isnan (&a) || isnan (&b))
return 1; /* false, truth <= 0 */
@@ -1354,8 +1398,11 @@ float_to_si (FLO_type arg_a)
{
fp_number_type a;
SItype tmp;
+ FLO_union_type au;
+
+ au.value = arg_a;
+ unpack_d (&au, &a);
- unpack_d ((FLO_union_type *) & arg_a, &a);
if (iszero (&a))
return 0;
if (isnan (&a))
@@ -1385,8 +1432,11 @@ USItype
float_to_usi (FLO_type arg_a)
{
fp_number_type a;
+ FLO_union_type au;
+
+ au.value = arg_a;
+ unpack_d (&au, &a);
- unpack_d ((FLO_union_type *) & arg_a, &a);
if (iszero (&a))
return 0;
if (isnan (&a))
@@ -1415,8 +1465,11 @@ FLO_type
negate (FLO_type arg_a)
{
fp_number_type a;
+ FLO_union_type au;
+
+ au.value = arg_a;
+ unpack_d (&au, &a);
- unpack_d ((FLO_union_type *) & arg_a, &a);
flip_sign (&a);
return pack_d (&a);
}
@@ -1455,8 +1508,11 @@ DFtype
sf_to_df (SFtype arg_a)
{
fp_number_type in;
+ FLO_union_type au;
+
+ au.value = arg_a;
+ unpack_d (&au, &in);
- unpack_d ((FLO_union_type *) & arg_a, &in);
return __make_dp (in.class, in.sign, in.normal_exp,
((UDItype) in.fraction.ll) << F_D_BITOFF);
}
@@ -1489,8 +1545,10 @@ df_to_sf (DFtype arg_a)
{
fp_number_type in;
USItype sffrac;
+ FLO_union_type au;
- unpack_d ((FLO_union_type *) & arg_a, &in);
+ au.value = arg_a;
+ unpack_d (&au, &in);
sffrac = in.fraction.ll >> F_D_BITOFF;