summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/pr32293.c
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/pr32293.c
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/pr32293.c')
-rw-r--r--gcc/testsuite/gcc.dg/pr32293.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pr32293.c b/gcc/testsuite/gcc.dg/pr32293.c
new file mode 100644
index 000000000..fb1268ba1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr32293.c
@@ -0,0 +1,61 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+unsigned int _IDEC_glbround;
+unsigned int _IDEC_glbflags;
+typedef unsigned UINT32;
+typedef signed SINT32;
+typedef unsigned long long UINT64;
+typedef signed long long SINT64;
+typedef
+__attribute__ ((aligned(16)))
+ struct {
+ UINT64 w[2];
+ } UINT128;
+
+static __inline UINT64
+unpack_BID128 (UINT64 * psign_x, int *pexponent_x,
+ UINT128 * pcoefficient_x, UINT128 * px) {
+ UINT128 coeff;
+ UINT64 ex;
+ *psign_x = (px->w[1]) & 0x8000000000000000ull;
+ ex = (px->w[1]) >> 49;
+ *pexponent_x = ((int) ex) & 0x3fff;
+ return coeff.w[0] | coeff.w[1];
+}
+
+static __inline UINT32
+get_BID32 (UINT32 sgn, int expon, UINT64 coeff, int rmode,
+ unsigned *fpsc) {
+ UINT32 r;
+
+ if (((unsigned) expon) > 191) {
+ r = sgn | 0x78000000ul;
+ switch (rmode) {
+ case 0x00002:
+ if (sgn)
+ r = sgn | 0x77f8967f;
+ }
+ return r;
+ }
+ r = expon;
+ return r;
+}
+
+UINT32
+bid128_to_bid32 (UINT128 x)
+{
+ UINT128 *px;
+ UINT128 CX;
+ UINT64 sign_x;
+ UINT32 res;
+ int exponent_x = 0;
+ px = &x;
+ if (!unpack_BID128 (&sign_x, &exponent_x, &CX, px)) {
+ return(res);
+ }
+ res = get_BID32 ((UINT32) (sign_x >> 32),
+ exponent_x, CX.w[0], _IDEC_glbround, &_IDEC_glbflags);
+ return(res);;
+}
+