OSDN Git Service

* config/sh/sh.md (*movqi_pop): New insn pattern.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / c-c++-common / dfp / convert-bfp.c
1 /* N1150 5.2 Conversions among decimal floating types and between
2    decimal floating types and generic floating types.
3    C99 6.3.1.5(4) Conversions, arithmetic operands, real floating types.  */
4
5 /* Long double isn't supported yet at runtime, so disable those checks.  */
6
7 #include "dfp-dbg.h"
8
9 static int skip_long_double;
10
11 volatile _Decimal32 d32;
12 volatile _Decimal64 d64;
13 volatile _Decimal128 d128;
14 volatile float sf;
15 volatile double df;
16 volatile long double tf;
17
18 int
19 main ()
20 {
21   /* Conversions from decimal float to binary float. */
22
23   if (sizeof (long double) == sizeof (double))
24     skip_long_double = 1;
25
26   /* Conversions from _Decimal32. */
27   d32 = 2.0df;
28   sf = d32;
29   if (sf != 2.0f)
30     FAILURE
31
32   df = d32;
33   if (df != 2.0)
34     FAILURE
35
36   if (skip_long_double == 0)
37     {
38       tf = d32;
39       if (tf != 2.0l)
40         FAILURE
41     }
42
43   /* Conversions from _Decimal64. */
44   d64 = -7.0dd;
45   sf = d64;
46   if (sf != -7.0f)
47     FAILURE
48   
49   df = d64;
50   if (df != -7.0)
51     FAILURE
52
53   if (skip_long_double == 0)
54     {
55       tf = d64;
56       if (tf != -7.0l)
57         FAILURE
58     }
59
60   /* Conversions from _Decimal128. */
61   d128 = 30.0dl;
62   sf = d128;
63   if (sf != 30.0f)
64     FAILURE
65
66   df = d128;
67   if (df != 30.0)
68     FAILURE
69
70   df = d128;
71   if (df != 30.0l)
72     FAILURE
73
74   /* Conversions from binary float to decimal float. */
75   sf = 30.0f;
76   d32 = sf;
77   if (d32 != 30.0df)
78     FAILURE
79
80   d64 = sf;
81   if (d64 != 30.0dd)
82     FAILURE
83
84   df = -2.0;
85   d32 = df;
86   if (d32 != -2.0df)
87     FAILURE
88
89   d64 = df;
90   if (d64 != -2.0dd)
91     FAILURE
92
93   d128 = df;
94   if (d128 != -2.0dl)
95     FAILURE
96   
97   sf = 30.0f;
98   d128 = sf;
99   if (d128 != 30.0dl)
100     FAILURE
101
102   if (skip_long_double == 0)
103     {
104       tf = -22.0l;
105       d32 = tf;
106       if (d32 != -22.0df)
107         FAILURE
108
109       d64 = tf;
110       if (d64 != -22.0dd)
111         FAILURE
112
113       d128 = tf;
114       if (d128 != -22.0dl)
115         FAILURE
116      }
117
118   /* 2**(-11) = 0.00048828125. */
119   d128 = 0.000488281251dl;
120   sf = d128;
121   if (sf != 0.00048828125f)
122     FAILURE
123   /* 2**(-25) = 0.298023223876953125E-7.  */
124   d128 = 2.98023223876953125E-8dl;
125   df = d128;
126   if (df < (2.9802322387695312e-08 - 0.00000000001)
127       || df > (2.9802322387695312e-08 + 0.00000000001))
128     FAILURE
129
130   FINISH
131 }