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
This commit is contained in:
parent
633dd06142
commit
95aac11b84
3 changed files with 33 additions and 29 deletions
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
PR target/39634
|
||||
|
|
|
@ -175,8 +175,6 @@ GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
|
|||
# be subject to -Werror:
|
||||
# flex output may yield harmless "no previous prototype" warnings
|
||||
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.o-warn = -Wno-error
|
||||
|
||||
|
|
55
gcc/dfp.c
55
gcc/dfp.c
|
@ -1,5 +1,6 @@
|
|||
/* 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.
|
||||
|
||||
|
@ -139,7 +140,7 @@ encode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
decimal_to_decnumber (r, &dn);
|
||||
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. */
|
||||
|
@ -155,7 +156,7 @@ decode_decimal32 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
decContextDefault (&set, DEC_INIT_DECIMAL128);
|
||||
set.traps = 0;
|
||||
|
||||
*((uint32_t *) d32.bytes) = (uint32_t) buf[0];
|
||||
memcpy (&d32.bytes, &buf[0], sizeof (uint32_t));
|
||||
|
||||
decimal32ToNumber (&d32, &dn);
|
||||
decimal_from_decnumber (r, &dn, &set);
|
||||
|
@ -179,13 +180,13 @@ encode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
|
||||
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
|
||||
{
|
||||
buf[0] = *(uint32_t *) &d64.bytes[0];
|
||||
buf[1] = *(uint32_t *) &d64.bytes[4];
|
||||
memcpy (&buf[0], &d64.bytes[0], sizeof (uint32_t));
|
||||
memcpy (&buf[1], &d64.bytes[4], sizeof (uint32_t));
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] = *(uint32_t *) &d64.bytes[4];
|
||||
buf[1] = *(uint32_t *) &d64.bytes[0];
|
||||
memcpy (&buf[0], &d64.bytes[4], sizeof (uint32_t));
|
||||
memcpy (&buf[1], &d64.bytes[0], sizeof (uint32_t));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,13 +205,13 @@ decode_decimal64 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
|
||||
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
|
||||
{
|
||||
*((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[0];
|
||||
*((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[1];
|
||||
memcpy (&d64.bytes[0], &buf[0], sizeof (uint32_t));
|
||||
memcpy (&d64.bytes[4], &buf[1], sizeof (uint32_t));
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[1];
|
||||
*((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[0];
|
||||
memcpy (&d64.bytes[0], &buf[1], sizeof (uint32_t));
|
||||
memcpy (&d64.bytes[4], &buf[0], sizeof (uint32_t));
|
||||
}
|
||||
|
||||
decimal64ToNumber (&d64, &dn);
|
||||
|
@ -235,17 +236,17 @@ encode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
|
||||
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
|
||||
{
|
||||
buf[0] = *(uint32_t *) &d128.bytes[0];
|
||||
buf[1] = *(uint32_t *) &d128.bytes[4];
|
||||
buf[2] = *(uint32_t *) &d128.bytes[8];
|
||||
buf[3] = *(uint32_t *) &d128.bytes[12];
|
||||
memcpy (&buf[0], &d128.bytes[0], sizeof (uint32_t));
|
||||
memcpy (&buf[1], &d128.bytes[4], sizeof (uint32_t));
|
||||
memcpy (&buf[2], &d128.bytes[8], sizeof (uint32_t));
|
||||
memcpy (&buf[3], &d128.bytes[12], sizeof (uint32_t));
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] = *(uint32_t *) &d128.bytes[12];
|
||||
buf[1] = *(uint32_t *) &d128.bytes[8];
|
||||
buf[2] = *(uint32_t *) &d128.bytes[4];
|
||||
buf[3] = *(uint32_t *) &d128.bytes[0];
|
||||
memcpy (&buf[0], &d128.bytes[12], sizeof (uint32_t));
|
||||
memcpy (&buf[1], &d128.bytes[8], sizeof (uint32_t));
|
||||
memcpy (&buf[2], &d128.bytes[4], sizeof (uint32_t));
|
||||
memcpy (&buf[3], &d128.bytes[0], sizeof (uint32_t));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,17 +265,17 @@ decode_decimal128 (const struct real_format *fmt ATTRIBUTE_UNUSED,
|
|||
|
||||
if (WORDS_BIGENDIAN == FLOAT_WORDS_BIG_ENDIAN)
|
||||
{
|
||||
*((uint32_t *) &d128.bytes[0]) = (uint32_t) buf[0];
|
||||
*((uint32_t *) &d128.bytes[4]) = (uint32_t) buf[1];
|
||||
*((uint32_t *) &d128.bytes[8]) = (uint32_t) buf[2];
|
||||
*((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[3];
|
||||
memcpy (&d128.bytes[0], &buf[0], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[4], &buf[1], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[8], &buf[2], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[12], &buf[3], sizeof (uint32_t));
|
||||
}
|
||||
else
|
||||
{
|
||||
*((uint32_t *) &d128.bytes[0]) = (uint32_t) buf[3];
|
||||
*((uint32_t *) &d128.bytes[4]) = (uint32_t) buf[2];
|
||||
*((uint32_t *) &d128.bytes[8]) = (uint32_t) buf[1];
|
||||
*((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[0];
|
||||
memcpy (&d128.bytes[0], &buf[3], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[4], &buf[2], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[8], &buf[1], sizeof (uint32_t));
|
||||
memcpy (&d128.bytes[12], &buf[0], sizeof (uint32_t));
|
||||
}
|
||||
|
||||
decimal128ToNumber (&d128, &dn);
|
||||
|
|
Loading…
Add table
Reference in a new issue