annotate gcc/testsuite/gcc.dg/pr32293.c @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile } */
kono
parents:
diff changeset
2 /* { dg-options "-O2" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 unsigned int _IDEC_glbround;
kono
parents:
diff changeset
5 unsigned int _IDEC_glbflags;
kono
parents:
diff changeset
6 typedef unsigned UINT32;
kono
parents:
diff changeset
7 typedef signed SINT32;
kono
parents:
diff changeset
8 typedef unsigned long long UINT64;
kono
parents:
diff changeset
9 typedef signed long long SINT64;
kono
parents:
diff changeset
10 typedef
kono
parents:
diff changeset
11 __attribute__ ((aligned(16)))
kono
parents:
diff changeset
12 struct {
kono
parents:
diff changeset
13 UINT64 w[2];
kono
parents:
diff changeset
14 } UINT128;
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 static __inline UINT64
kono
parents:
diff changeset
17 unpack_BID128 (UINT64 * psign_x, int *pexponent_x,
kono
parents:
diff changeset
18 UINT128 * pcoefficient_x, UINT128 * px) {
kono
parents:
diff changeset
19 UINT128 coeff;
kono
parents:
diff changeset
20 UINT64 ex;
kono
parents:
diff changeset
21 *psign_x = (px->w[1]) & 0x8000000000000000ull;
kono
parents:
diff changeset
22 ex = (px->w[1]) >> 49;
kono
parents:
diff changeset
23 *pexponent_x = ((int) ex) & 0x3fff;
kono
parents:
diff changeset
24 return coeff.w[0] | coeff.w[1];
kono
parents:
diff changeset
25 }
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 static __inline UINT32
kono
parents:
diff changeset
28 get_BID32 (UINT32 sgn, int expon, UINT64 coeff, int rmode,
kono
parents:
diff changeset
29 unsigned *fpsc) {
kono
parents:
diff changeset
30 UINT32 r;
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 if (((unsigned) expon) > 191) {
kono
parents:
diff changeset
33 r = sgn | 0x78000000ul;
kono
parents:
diff changeset
34 switch (rmode) {
kono
parents:
diff changeset
35 case 0x00002:
kono
parents:
diff changeset
36 if (sgn)
kono
parents:
diff changeset
37 r = sgn | 0x77f8967f;
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39 return r;
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41 r = expon;
kono
parents:
diff changeset
42 return r;
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 UINT32
kono
parents:
diff changeset
46 bid128_to_bid32 (UINT128 x)
kono
parents:
diff changeset
47 {
kono
parents:
diff changeset
48 UINT128 *px;
kono
parents:
diff changeset
49 UINT128 CX;
kono
parents:
diff changeset
50 UINT64 sign_x;
kono
parents:
diff changeset
51 UINT32 res;
kono
parents:
diff changeset
52 int exponent_x = 0;
kono
parents:
diff changeset
53 px = &x;
kono
parents:
diff changeset
54 if (!unpack_BID128 (&sign_x, &exponent_x, &CX, px)) {
kono
parents:
diff changeset
55 return(res);
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57 res = get_BID32 ((UINT32) (sign_x >> 32),
kono
parents:
diff changeset
58 exponent_x, CX.w[0], _IDEC_glbround, &_IDEC_glbflags);
kono
parents:
diff changeset
59 return(res);;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61