source: libcfa/src/limits.cfa @ 12c1eef

ADTast-experimentalenumpthread-emulationqualifiedEnum
Last change on this file since 12c1eef was 6fbe9a5, checked in by Michael Brooks <mlbrooks@…>, 4 years ago

Fixing code-gen of constants. Fixes #182? Removes workaround 58b6d1.

Forcing recent GCC versions to place CFA-initialized constants in writeable memory, so CFA initialization doesn't segfault when writing them. See the const-init test for specifics about recent GCC versions.

src/InitTweak/FixGlobalInit.cc: generating the attribute to control GCC's placement
libcfa/src/limits.* : removing workaround from 58b6d1, making these limits const again
tests//limits.* : commenting old test that uses the constants from licfa-limits, explaining what the test doesn't exercise
tests/
/const-init.* : new test of static constants, taken from #182, and comments explaining how to test this issue

  • Property mode set to 100644
File size: 6.1 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// limits.c --
8//
9// Author           : Peter A. Buhr
10// Created On       : Wed Apr  6 18:06:52 2016
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Thu Mar  1 16:22:51 2018
13// Update Count     : 74
14//
15
16#include <limits.h>
17#include <float.h>
18#define __USE_GNU                                                                               // get M_* constants
19#include <math.h>
20#include <complex.h>
21#include "limits.hfa"
22
23// Integral Constants
24
25const signed char MIN = SCHAR_MIN;
26const unsigned char MIN = 0;
27const short int MIN = SHRT_MIN;
28const unsigned short int MIN = 0;
29const int MIN = INT_MIN;
30const unsigned int MIN = 0;
31const long int MIN = LONG_MIN;
32const unsigned long int MIN = 0;
33const long long int MIN = LLONG_MIN;
34const unsigned long long int MIN = 0;
35
36const signed char MAX = SCHAR_MAX;
37const unsigned char MAX = UCHAR_MAX;
38const short int MAX = SHRT_MAX;
39const unsigned short int MAX = USHRT_MAX;
40const int MAX = INT_MAX;
41const unsigned int MAX = UINT_MAX;
42const long int MAX = LONG_MAX;
43const unsigned long int MAX = ULONG_MAX;
44const long long int MAX = LLONG_MAX;
45const unsigned long long int MAX = ULLONG_MAX;
46
47// Floating-Point Constants
48
49const float MIN = FLT_MIN;
50const double MIN = DBL_MIN;
51const long double MIN = LDBL_MIN;
52const float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;
53const double _Complex MIN = DBL_MIN +  DBL_MIN * I;
54const long double _Complex MIN = LDBL_MIN + LDBL_MIN * I;
55
56const float MAX = FLT_MAX;
57const double MAX = DBL_MAX;
58const long double MAX = LDBL_MAX;
59const float _Complex MAX = FLT_MAX + FLT_MAX * I;
60const double _Complex MAX = DBL_MAX + DBL_MAX * I;
61const long double _Complex MAX = LDBL_MAX + LDBL_MAX * I;
62
63const float PI = (float)M_PI;                                                   // pi
64const float PI_2 = (float)M_PI_2;                                               // pi / 2
65const float PI_4 = (float)M_PI_4;                                               // pi / 4
66const float _1_PI = (float)M_1_PI;                                              // 1 / pi
67const float _2_PI = (float)M_2_PI;                                              // 2 / pi
68const float _2_SQRT_PI = (float)M_2_SQRTPI;                             // 2 / sqrt(pi)
69
70const double PI = M_PI;                                                                 // pi
71const double PI_2 = M_PI_2;                                                             // pi / 2
72const double PI_4 = M_PI_4;                                                             // pi / 4
73const double _1_PI = M_1_PI;                                                    // 1 / pi
74const double _2_PI = M_2_PI;                                                    // 2 / pi
75const double _2_SQRT_PI = M_2_SQRTPI;                                   // 2 / sqrt(pi)
76
77const long double PI = M_PIl;                                                   // pi
78const long double PI_2 = M_PI_2l;                                               // pi / 2
79const long double PI_4 = M_PI_4l;                                               // pi / 4
80const long double _1_PI = M_1_PIl;                                              // 1 / pi
81const long double _2_PI = M_2_PIl;                                              // 2 / pi
82const long double _2_SQRT_PI = M_2_SQRTPIl;                             // 2 / sqrt(pi)
83
84const float _Complex PI = (float)M_PI + 0.0_iF;                 // pi
85const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;             // pi / 2
86const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;             // pi / 4
87const float _Complex _1_PI = (float)M_1_PI + 0.0_iF;    // 1 / pi
88const float _Complex _2_PI = (float)M_2_PI + 0.0_iF;    // 2 / pi
89const float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)
90
91const double _Complex PI = M_PI + 0.0_iD;                               // pi
92const double _Complex PI_2 = M_PI_2 + 0.0_iD;                   // pi / 2
93const double _Complex PI_4 = M_PI_4 + 0.0_iD;                   // pi / 4
94const double _Complex _1_PI = M_1_PI + 0.0_iD;                  // 1 / pi
95const double _Complex _2_PI = M_2_PI + 0.0_iD;                  // 2 / pi
96const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD; // 2 / sqrt(pi)
97
98const long double _Complex PI = M_PIl + 0.0_iL;                 // pi
99const long double _Complex PI_2 = M_PI_2l + 0.0_iL;             // pi / 2
100const long double _Complex PI_4 = M_PI_4l + 0.0_iL;             // pi / 4
101const long double _Complex _1_PI = M_1_PIl + 0.0_iL;    // 1 / pi
102const long double _Complex _2_PI = M_2_PIl + 0.0_iL;    // 2 / pi
103const long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)
104
105const float E = (float)M_E;                                                             // e
106const float LOG2_E = (float)M_LOG2E;                                    // log_2(e)
107const float LOG10_E = (float)M_LOG10E;                                  // log_10(e)
108const float LN_2 = (float)M_LN2;                                                // log_e(2)
109const float LN_10 = (float)M_LN10;                                              // log_e(10)
110const float SQRT_2 = (float)M_SQRT2;                                    // sqrt(2)
111const float _1_SQRT_2 = (float)M_SQRT1_2;                               // 1 / sqrt(2)
112
113const double E = M_E;                                                                   // e
114const double LOG2_E = M_LOG2E;                                                  // log_2(e)
115const double LOG10_E = M_LOG10E;                                                // log_10(e)
116const double LN_2 = M_LN2;                                                              // log_e(2)
117const double LN_10 = M_LN10;                                                    // log_e(10)
118const double SQRT_2 = M_SQRT2;                                                  // sqrt(2)
119const double _1_SQRT_2 = M_SQRT1_2;                                             // 1 / sqrt(2)
120
121const long double E = M_El;                                                             // e
122const long double LOG2_E = M_LOG2El;                                    // log_2(e)
123const long double LOG10_E = M_LOG10El;                                  // log_10(e)
124const long double LN_2 = M_LN2l;                                                // log_e(2)
125const long double LN_10 = M_LN10l;                                              // log_e(10)
126const long double SQRT_2 = M_SQRT2l;                                    // sqrt(2)
127const long double _1_SQRT_2 = M_SQRT1_2l;                               // 1 / sqrt(2)
128
129const float _Complex E = M_E + 0.0_iF;                                  // e
130const float _Complex LOG2_E = M_LOG2E + 0.0_iF;                 // log_2(e)
131const float _Complex LOG10_E = M_LOG10E + 0.0_iF;               // log_10(e)
132const float _Complex LN_2 = M_LN2 + 0.0_iF;                             // log_e(2)
133const float _Complex LN_10 = M_LN10 + 0.0_iF;                   // log_e(10)
134const float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;                 // sqrt(2)
135const float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;    // 1 / sqrt(2)
136
137const double _Complex E = M_E + 0.0_iD;                                 // e
138const double _Complex LOG2_E = M_LOG2E + 0.0_iD;                // log_2(e)
139const double _Complex LOG10_E = M_LOG10E + 0.0_iD;              // log_10(e)
140const double _Complex LN_2 = M_LN2 + 0.0_iD;                    // log_e(2)
141const double _Complex LN_10 = M_LN10 + 0.0_iD;                  // log_e(10)
142const double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;                // sqrt(2)
143const double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;   // 1 / sqrt(2)
144
145const long double _Complex E = M_El + 0.0_iL;                   // e
146const long double _Complex LOG2_E = M_LOG2El + 0.0_iL;  // log_2(e)
147const long double _Complex LOG10_E = M_LOG10El + 0.0_iL; // log_10(e)
148const long double _Complex LN_2 = M_LN2l + 0.0_iL;              // log_e(2)
149const long double _Complex LN_10 = M_LN10l + 0.0_iL;    // log_e(10)
150const long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;  // sqrt(2)
151const long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL; // 1 / sqrt(2)
152
153// Local Variables: //
154// mode: c //
155// tab-width: 4 //
156// End: //
Note: See TracBrowser for help on using the repository browser.