]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - libdecnumber/bid/host-ieee128.c
This commit was manufactured by cvs2svn to create branch
[thirdparty/binutils-gdb.git] / libdecnumber / bid / host-ieee128.c
CommitLineData
f5bc1778
DJ
1/* This is a software decimal floating point library.
2 Copyright (C) 2007 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 2, or (at your option) any later
9version.
10
11In addition to the permissions in the GNU General Public License, the
12Free Software Foundation gives you unlimited permission to link the
13compiled version of this file into combinations with other programs,
14and to distribute those combinations without any restriction coming
15from the use of this file. (The General Public License restrictions
16do apply in other respects; for example, they cover modification of
17the file, and distribution when not linked into a combine
18executable.)
19
20GCC is distributed in the hope that it will be useful, but WITHOUT ANY
21WARRANTY; without even the implied warranty of MERCHANTABILITY or
22FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23for more details.
24
25You should have received a copy of the GNU General Public License
26along with GCC; see the file COPYING. If not, write to the Free
27Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2802110-1301, USA. */
29
30#include <string.h>
31
5f5dfcbe 32#include "dconfig.h"
f5bc1778
DJ
33#include "bid-dpd.h"
34#include "decimal128.h"
35
36void __host_to_ieee_128 (_Decimal128 in, decimal128 *out);
37void __ieee_to_host_128 (decimal128 in, _Decimal128 *out);
38
5f5dfcbe
DD
39/* The code for converting 128-bit values between DPD and BID presumes
40 that the 64-bit halves of the 128-bit value are in little-endian
41 order, so they need swapping on big-endian hosts. */
42
f5bc1778
DJ
43void
44__host_to_ieee_128 (_Decimal128 in, decimal128 *out)
45{
5f5dfcbe
DD
46#if WORDS_BIGENDIAN
47 memcpy ((char *) out, (char *) &in + 8, 8);
48 memcpy ((char *) out + 8, (char *) &in, 8);
49#else
f5bc1778 50 memcpy ((char *) out, (char *) &in, 16);
5f5dfcbe 51#endif
f5bc1778
DJ
52}
53
54void
55__ieee_to_host_128 (decimal128 in, _Decimal128 *out)
56{
5f5dfcbe
DD
57#if WORDS_BIGENDIAN
58 memcpy ((char *) out, (char *) &in + 8, 8);
59 memcpy ((char *) out + 8, (char *) &in, 8);
60#else
f5bc1778 61 memcpy ((char *) out, (char *) &in, 16);
5f5dfcbe 62#endif
f5bc1778 63}