Commit 95aac11b by Ben Elliston Committed by Ben Elliston

dfp.c: Replace type punning assignments with memcpy throughout.

	* dfp.c: Replace type punning assignments with memcpy throughout.
	* Makefile.in (dfp.o-warn): Remove.

From-SVN: r145644
parent 633dd061
2009-04-07 Ben Elliston <bje@au.ibm.com>
* dfp.c: Replace type punning assignments with memcpy throughout.
* Makefile.in (dfp.o-warn): Remove.
2009-04-07 Alan Modra <amodra@bigpond.net.au> 2009-04-07 Alan Modra <amodra@bigpond.net.au>
PR target/39634 PR target/39634
......
...@@ -175,8 +175,6 @@ GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn) ...@@ -175,8 +175,6 @@ GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
# be subject to -Werror: # be subject to -Werror:
# flex output may yield harmless "no previous prototype" warnings # flex output may yield harmless "no previous prototype" warnings
build/gengtype-lex.o-warn = -Wno-error build/gengtype-lex.o-warn = -Wno-error
# dfp.c contains many alias violations
dfp.o-warn = -fno-strict-aliasing
# mips-tfile.c contains -Wcast-qual warnings. # mips-tfile.c contains -Wcast-qual warnings.
mips-tfile.o-warn = -Wno-error mips-tfile.o-warn = -Wno-error
......
/* Decimal floating point support. /* Decimal floating point support.
Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software
Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -139,7 +140,7 @@ encode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -139,7 +140,7 @@ encode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED,
decimal_to_decnumber (r, &dn); decimal_to_decnumber (r, &dn);
decimal32FromNumber (&d32, &dn, &set); decimal32FromNumber (&d32, &dn, &set);
buf[0] = *(uint32_t *) d32.bytes; memcpy (&buf[0], d32.bytes, sizeof (uint32_t));
} }
/* Decode an IEEE 754 decimal32 type into a real. */ /* Decode an IEEE 754 decimal32 type into a real. */
...@@ -155,7 +156,7 @@ decode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -155,7 +156,7 @@ decode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED,
decContextDefault (&set, DEC_INIT_DECIMAL128); decContextDefault (&set, DEC_INIT_DECIMAL128);
set.traps = 0; set.traps = 0;
*((uint32_t *) d32.bytes) = (uint32_t) buf[0]; memcpy (&d32.bytes, &buf[0], sizeof (uint32_t));
decimal32ToNumber (&d32, &dn); decimal32ToNumber (&d32, &dn);
decimal_from_decnumber (r, &dn, &set); decimal_from_decnumber (r, &dn, &set);
...@@ -179,13 +180,13 @@ encode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -179,13 +180,13 @@ encode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED,
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN) if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
{ {
buf[0] = *(uint32_t *) &d64.bytes[0]; memcpy (&buf[0], &d64.bytes[0], sizeof (uint32_t));
buf[1] = *(uint32_t *) &d64.bytes[4]; memcpy (&buf[1], &d64.bytes[4], sizeof (uint32_t));
} }
else else
{ {
buf[0] = *(uint32_t *) &d64.bytes[4]; memcpy (&buf[0], &d64.bytes[4], sizeof (uint32_t));
buf[1] = *(uint32_t *) &d64.bytes[0]; memcpy (&buf[1], &d64.bytes[0], sizeof (uint32_t));
} }
} }
...@@ -204,13 +205,13 @@ decode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -204,13 +205,13 @@ decode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED,
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN) if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
{ {
*((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[0]; memcpy (&d64.bytes[0], &buf[0], sizeof (uint32_t));
*((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[1]; memcpy (&d64.bytes[4], &buf[1], sizeof (uint32_t));
} }
else else
{ {
*((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[1]; memcpy (&d64.bytes[0], &buf[1], sizeof (uint32_t));
*((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[0]; memcpy (&d64.bytes[4], &buf[0], sizeof (uint32_t));
} }
decimal64ToNumber (&d64, &dn); decimal64ToNumber (&d64, &dn);
...@@ -235,17 +236,17 @@ encode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -235,17 +236,17 @@ encode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED,
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN) if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
{ {
buf[0] = *(uint32_t *) &d128.bytes[0]; memcpy (&buf[0], &d128.bytes[0], sizeof (uint32_t));
buf[1] = *(uint32_t *) &d128.bytes[4]; memcpy (&buf[1], &d128.bytes[4], sizeof (uint32_t));
buf[2] = *(uint32_t *) &d128.bytes[8]; memcpy (&buf[2], &d128.bytes[8], sizeof (uint32_t));
buf[3] = *(uint32_t *) &d128.bytes[12]; memcpy (&buf[3], &d128.bytes[12], sizeof (uint32_t));
} }
else else
{ {
buf[0] = *(uint32_t *) &d128.bytes[12]; memcpy (&buf[0], &d128.bytes[12], sizeof (uint32_t));
buf[1] = *(uint32_t *) &d128.bytes[8]; memcpy (&buf[1], &d128.bytes[8], sizeof (uint32_t));
buf[2] = *(uint32_t *) &d128.bytes[4]; memcpy (&buf[2], &d128.bytes[4], sizeof (uint32_t));
buf[3] = *(uint32_t *) &d128.bytes[0]; memcpy (&buf[3], &d128.bytes[0], sizeof (uint32_t));
} }
} }
...@@ -264,17 +265,17 @@ decode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED, ...@@ -264,17 +265,17 @@ decode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED,
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN) if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
{ {
*((uint32_t *) &d128.bytes[0]) = (uint32_t) buf[0]; memcpy (&d128.bytes[0], &buf[0], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[4]) = (uint32_t) buf[1]; memcpy (&d128.bytes[4], &buf[1], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[8]) = (uint32_t) buf[2]; memcpy (&d128.bytes[8], &buf[2], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[3]; memcpy (&d128.bytes[12], &buf[3], sizeof (uint32_t));
} }
else else
{ {
*((uint32_t *) &d128.bytes[0]) = (uint32_t) buf[3]; memcpy (&d128.bytes[0], &buf[3], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[4]) = (uint32_t) buf[2]; memcpy (&d128.bytes[4], &buf[2], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[8]) = (uint32_t) buf[1]; memcpy (&d128.bytes[8], &buf[1], sizeof (uint32_t));
*((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[0]; memcpy (&d128.bytes[12], &buf[0], sizeof (uint32_t));
} }
decimal128ToNumber (&d128, &dn); decimal128ToNumber (&d128, &dn);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment