OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [c-c++-common/] [dfp/] [constants-zero.c] - Blame information for rev 686

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 686 jeremybenn
/* { dg-options "-O0" } */
2
 
3
/* Decimal float values can have significant trailing zeroes.  This is
4
   true for zero values as well.  Check that various representations of
5
   zero are handled correctly when specified as literal constants.  */
6
 
7
#include "dfp-dbg.h"
8
 
9
int big_endian;
10
 
11
typedef union U32 {
12
  unsigned int i;
13
  _Decimal32 d;
14
  unsigned char b[4];
15
} u32_t;
16
 
17
typedef union U64 {
18
  unsigned long long i;
19
  _Decimal64 d;
20
} u64_t;
21
 
22
typedef union U128 {
23
  unsigned long long i[2];
24
  _Decimal128 d;
25
} u128_t;
26
 
27
int
28
compare32 (_Decimal32 d, unsigned int i)
29
{
30
  u32_t u;
31
 
32
  u.d = d;
33
  return (u.i == i);
34
}
35
 
36
int
37
compare64 (_Decimal64 d, unsigned long long i)
38
{
39
  u64_t u;
40
 
41
  u.d = d;
42
  return (u.i == i);
43
}
44
 
45
int
46
compare128 (_Decimal64 d, unsigned long long i, unsigned long long j)
47
{
48
  u128_t u;
49
 
50
  u.d = d;
51
  if (big_endian)
52
    return (u.i[0] == i && u.i[1] == j);
53
  else
54
    return (u.i[1] == i && u.i[0] == j);
55
}
56
 
57
void
58
dpd_tests (void)
59
{
60
  if (! compare32 (0.DF, 0x22500000U))
61
    FAILURE
62
  if (! compare32 (-0.DF, 0xa2500000U))
63
    FAILURE
64
  if (! compare32 (0.E-4DF, 0x22100000U))
65
    FAILURE
66
  if (! compare32 (0.E-7DF, 0x21e00000U))
67
    FAILURE
68
  if (! compare32 (0.E+3DF, 0x22800000U))
69
    FAILURE
70
 
71
  if (! compare64 (0.DD, 0x2238000000000000ULL))
72
    FAILURE
73
  if (! compare64 (-0.DD, 0xa238000000000000ULL))
74
    FAILURE
75
  if (! compare64 (0.E-6DD, 0x2220000000000000ULL))
76
    FAILURE
77
  if (! compare64 (0.E-7DD, 0x221c000000000000ULL))
78
    FAILURE
79
  if (! compare64 (0.E+2DD, 0x2240000000000000ULL))
80
    FAILURE
81
 
82
  if (! compare128 (0.DL, 0x2208000000000000ULL, 0x0000000000000000ULL))
83
    FAILURE
84
  if (! compare128 (-0.DL, 0xa208000000000000ULL, 0x0000000000000000ULL))
85
    FAILURE
86
  if (! compare128 (0.E-3DL, 0x2207400000000000ULL, 0x0000000000000000ULL))
87
    FAILURE
88
  if (! compare128 (0.E-8DL, 0x2206000000000000ULL, 0x0000000000000000ULL))
89
    FAILURE
90
  if (! compare128 (0.E+2DL, 0x2208800000000000ULL, 0x0000000000000000ULL))
91
    FAILURE
92
}
93
 
94
void
95
bid_tests (void)
96
{
97
  if (! compare32 (0.DF, 0x32800000U))
98
    FAILURE
99
  if (! compare32 (-0.DF, 0xb2800000U))
100
    FAILURE
101
  if (! compare32 (0.E-4DF, 0x30800000U))
102
    FAILURE
103
  if (! compare32 (0.E-7DF, 0x2f000000U))
104
    FAILURE
105
  if (! compare32 (0.E+3DF, 0x34000000U))
106
    FAILURE
107
 
108
  if (! compare64 (0.DD, 0x31c0000000000000ULL))
109
    FAILURE
110
  if (! compare64 (-0.DD, 0xb1c0000000000000ULL))
111
    FAILURE
112
  if (! compare64 (0.E-6DD, 0x3100000000000000ULL))
113
    FAILURE
114
  if (! compare64 (0.E-7DD, 0x30e0000000000000ULL))
115
    FAILURE
116
  if (! compare64 (0.E+2DD, 0x3200000000000000ULL))
117
    FAILURE
118
 
119
  if (! compare128 (0.DL, 0x3040000000000000ULL, 0x0000000000000000ULL))
120
    FAILURE
121
  if (! compare128 (-0.DL, 0xb040000000000000ULL, 0x0000000000000000ULL))
122
    FAILURE
123
  if (! compare128 (0.E-3DL, 0x303a000000000000ULL, 0x0000000000000000ULL))
124
    FAILURE
125
  if (! compare128 (0.E-8DL, 0x3030000000000000ULL, 0x0000000000000000ULL))
126
    FAILURE
127
  if (! compare128 (0.E+2DL, 0x3044000000000000ULL, 0x0000000000000000ULL))
128
    FAILURE
129
}
130
 
131
int
132
main ()
133
{
134
  u32_t u32;
135
 
136
  /* These sizes are probably always true for targets that support decimal
137
     float types, but check anyway.  Abort so we can fix the test.  */
138
  if ((sizeof (_Decimal64) != sizeof (long long))
139
      || (sizeof (_Decimal128) != 2 * sizeof (long long))
140
      || (sizeof (_Decimal32) != sizeof (_Decimal32)))
141
    FAILURE
142
 
143
  u32.d = 1.DF;
144
 
145
  if (u32.i == 0x22500001)
146
    {
147
      big_endian = (u32.b[0] == 0x22);
148
      dpd_tests ();
149
    }
150
  else if (u32.i == 0x32800001)
151
    {
152
       big_endian = (u32.b[0] == 0x32);
153
       bid_tests ();
154
    }
155
  else
156
    FAILURE             /* unknown format; test problem  */
157
 
158
  FINISH
159
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.