aboutsummaryrefslogtreecommitdiff
path: root/libdecnumber/bid
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2008-06-11 01:17:34 +0000
committerDJ Delorie <dj@redhat.com>2008-06-11 01:17:34 +0000
commit5f5dfcbe1be67ac8e69cbbcc7c99786551d6cbbf (patch)
treeb0a468317c8bb66c8ce38a23aa0efd93c88d60db /libdecnumber/bid
parent06c74433a779d34858f8cd54473a9076925dc400 (diff)
downloadgdb-5f5dfcbe1be67ac8e69cbbcc7c99786551d6cbbf.zip
gdb-5f5dfcbe1be67ac8e69cbbcc7c99786551d6cbbf.tar.gz
gdb-5f5dfcbe1be67ac8e69cbbcc7c99786551d6cbbf.tar.bz2
merge from gcc
Diffstat (limited to 'libdecnumber/bid')
-rw-r--r--libdecnumber/bid/host-ieee128.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libdecnumber/bid/host-ieee128.c b/libdecnumber/bid/host-ieee128.c
index 6d493e5..12632c8 100644
--- a/libdecnumber/bid/host-ieee128.c
+++ b/libdecnumber/bid/host-ieee128.c
@@ -29,20 +29,35 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include <string.h>
+#include "dconfig.h"
#include "bid-dpd.h"
#include "decimal128.h"
void __host_to_ieee_128 (_Decimal128 in, decimal128 *out);
void __ieee_to_host_128 (decimal128 in, _Decimal128 *out);
+/* The code for converting 128-bit values between DPD and BID presumes
+ that the 64-bit halves of the 128-bit value are in little-endian
+ order, so they need swapping on big-endian hosts. */
+
void
__host_to_ieee_128 (_Decimal128 in, decimal128 *out)
{
+#if WORDS_BIGENDIAN
+ memcpy ((char *) out, (char *) &in + 8, 8);
+ memcpy ((char *) out + 8, (char *) &in, 8);
+#else
memcpy ((char *) out, (char *) &in, 16);
+#endif
}
void
__ieee_to_host_128 (decimal128 in, _Decimal128 *out)
{
+#if WORDS_BIGENDIAN
+ memcpy ((char *) out, (char *) &in + 8, 8);
+ memcpy ((char *) out + 8, (char *) &in, 8);
+#else
memcpy ((char *) out, (char *) &in, 16);
+#endif
}