]>
Commit | Line | Data |
---|---|---|
a5544970 | 1 | /* Copyright (C) 2007-2019 Free Software Foundation, Inc. |
dc62d7d1 GJL |
2 | |
3 | This file is part of GCC. | |
4 | ||
5 | GCC is free software; you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation; either version 3, or (at your option) | |
8 | any later version. | |
9 | ||
10 | GCC is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | Under Section 7 of GPL version 3, you are granted additional | |
16 | permissions described in the GCC Runtime Library Exception, version | |
17 | 3.1, as published by the Free Software Foundation. | |
18 | ||
19 | You should have received a copy of the GNU General Public License and | |
20 | a copy of the GCC Runtime Library Exception along with this program; | |
21 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
22 | <http://www.gnu.org/licenses/>. */ | |
23 | ||
24 | /* ISO/IEC JTC1 SC22 WG14 N1169 | |
25 | * Date: 2006-04-04 | |
26 | * ISO/IEC TR 18037 | |
27 | * Programming languages - C - Extensions to support embedded processors | |
28 | */ | |
29 | ||
30 | #ifndef _AVRGCC_STDFIX_H | |
31 | #define _AVRGCC_STDFIX_H | |
32 | ||
33 | /* 7.18a.1 Introduction. */ | |
34 | /* 7.18a.3 Precision macros. */ | |
35 | ||
36 | #include <stdfix-gcc.h> | |
37 | ||
556f9906 | 38 | |
dc62d7d1 GJL |
39 | #if __SIZEOF_INT__ == 2 |
40 | ||
41 | typedef signed char int_hr_t; | |
42 | typedef unsigned char uint_uhr_t; | |
43 | ||
44 | typedef short int int_r_t; | |
45 | typedef short unsigned int uint_ur_t; | |
46 | ||
47 | typedef short int int_hk_t; | |
48 | typedef short unsigned int uint_uhk_t; | |
49 | ||
50 | typedef long int int_lr_t; | |
51 | typedef long unsigned int uint_ulr_t; | |
52 | ||
53 | typedef long int int_k_t; | |
54 | typedef long unsigned int uint_uk_t; | |
55 | ||
56 | typedef long long int int_llr_t; | |
57 | typedef long long unsigned int uint_ullr_t; | |
58 | ||
59 | typedef long long int int_lk_t; | |
60 | typedef long long unsigned int uint_ulk_t; | |
61 | ||
62 | typedef long long int int_llk_t; | |
63 | typedef long long unsigned int uint_ullk_t; | |
64 | ||
85d768f3 | 65 | #elif __SIZEOF_INT__ == 1 /* -mint8 */ |
dc62d7d1 GJL |
66 | |
67 | typedef signed char int_hr_t; | |
68 | typedef unsigned char uint_uhr_t; | |
69 | ||
70 | typedef long int int_r_t; | |
71 | typedef long unsigned int uint_ur_t; | |
72 | ||
73 | typedef long int int_hk_t; | |
74 | typedef long unsigned int uint_uhk_t; | |
75 | ||
76 | typedef long long int int_lr_t; | |
77 | typedef long long unsigned int uint_ulr_t; | |
78 | ||
79 | typedef long long int int_k_t; | |
80 | typedef long long unsigned int uint_uk_t; | |
81 | ||
85d768f3 GJL |
82 | #endif /* __SIZEOF_INT__ == 1, 2 */ |
83 | ||
84 | ||
85 | /* 7.18a.6 The fixed-point intrinsic functions. */ | |
dc62d7d1 GJL |
86 | |
87 | ||
85d768f3 GJL |
88 | /* 7.18a.6.2 The fixed-point absolute value functions. */ |
89 | ||
90 | #define abshr __builtin_avr_abshr | |
91 | #define absr __builtin_avr_absr | |
92 | #define abslr __builtin_avr_abslr | |
93 | ||
94 | #define abshk __builtin_avr_abshk | |
95 | #define absk __builtin_avr_absk | |
96 | ||
97 | #if __SIZEOF_INT__ == 2 | |
98 | ||
99 | #define abslk __builtin_avr_abslk | |
100 | #define absllr __builtin_avr_absllr /* GCC Extension */ | |
101 | #define absllk __builtin_avr_absllk /* GCC Extension */ | |
556f9906 | 102 | |
85d768f3 | 103 | #endif /* sizeof (int) == 2 */ |
556f9906 | 104 | |
556f9906 | 105 | |
85d768f3 | 106 | /* 7.18a.6.3 The fixed-point round functions. */ |
556f9906 | 107 | |
85d768f3 | 108 | /* The Embedded-C paper specifies results only for rounding points |
556f9906 | 109 | |
85d768f3 GJL |
110 | 0 < RP < FBIT |
111 | ||
112 | As an extension, the following functions work as expected | |
113 | with rounding points | |
556f9906 | 114 | |
85d768f3 GJL |
115 | -IBIT < RP < FBIT |
116 | ||
117 | For example, rounding an accum with a rounding point of -1 will | |
118 | result in an even integer value. */ | |
556f9906 | 119 | |
85d768f3 GJL |
120 | #define roundhr __builtin_avr_roundhr |
121 | #define roundr __builtin_avr_roundr | |
122 | #define roundlr __builtin_avr_roundlr | |
556f9906 | 123 | |
85d768f3 GJL |
124 | #define rounduhr __builtin_avr_rounduhr |
125 | #define roundur __builtin_avr_roundur | |
126 | #define roundulr __builtin_avr_roundulr | |
556f9906 | 127 | |
85d768f3 GJL |
128 | #define roundhk __builtin_avr_roundhk |
129 | #define roundk __builtin_avr_roundk | |
556f9906 | 130 | |
85d768f3 GJL |
131 | #define rounduhk __builtin_avr_rounduhk |
132 | #define rounduk __builtin_avr_rounduk | |
556f9906 GJL |
133 | |
134 | #if __SIZEOF_INT__ == 2 | |
135 | ||
85d768f3 GJL |
136 | #define roundlk __builtin_avr_roundlk |
137 | #define roundulk __builtin_avr_roundulk | |
138 | #define roundllr __builtin_avr_roundllr /* GCC Extension */ | |
139 | #define roundullr __builtin_avr_roundullr /* GCC Extension */ | |
140 | #define roundllk __builtin_avr_roundllk /* GCC Extension */ | |
141 | #define roundullk __builtin_avr_roundullk /* GCC Extension */ | |
142 | ||
143 | #endif /* sizeof (int) == 2 */ | |
144 | ||
145 | ||
146 | /* 7.18a.6.4 The fixed-point bit countls functions. */ | |
147 | ||
148 | #define countlshr __builtin_avr_countlshr | |
149 | #define countlsr __builtin_avr_countlsr | |
150 | #define countlslr __builtin_avr_countlslr | |
151 | ||
152 | #define countlsuhr __builtin_avr_countlsuhr | |
153 | #define countlsur __builtin_avr_countlsur | |
154 | #define countlsulr __builtin_avr_countlsulr | |
155 | ||
156 | #define countlshk __builtin_avr_countlshk | |
157 | #define countlsk __builtin_avr_countlsk | |
158 | ||
159 | #define countlsuhk __builtin_avr_countlsuhk | |
160 | #define countlsuk __builtin_avr_countlsuk | |
dc62d7d1 GJL |
161 | |
162 | #if __SIZEOF_INT__ == 2 | |
163 | ||
85d768f3 GJL |
164 | #define countlslk __builtin_avr_countlslk |
165 | #define countlsulk __builtin_avr_countlsulk | |
166 | #define countlsllr __builtin_avr_countlsllr /* GCC Extension */ | |
167 | #define countlsullr __builtin_avr_countlsullr /* GCC Extension */ | |
168 | #define countlsllk __builtin_avr_countlsllk /* GCC Extension */ | |
169 | #define countlsullk __builtin_avr_countlsullk /* GCC Extension */ | |
170 | ||
171 | #endif /* sizeof (int) == 2 */ | |
172 | ||
173 | ||
174 | /* 7.18a.6.5 The bitwise fixed-point to integer conversion functions. */ | |
175 | ||
176 | #define bitshr __builtin_avr_bitshr | |
177 | #define bitsr __builtin_avr_bitsr | |
178 | #define bitslr __builtin_avr_bitslr | |
179 | ||
180 | #define bitsuhr __builtin_avr_bitsuhr | |
181 | #define bitsur __builtin_avr_bitsur | |
182 | #define bitsulr __builtin_avr_bitsulr | |
183 | ||
184 | #define bitshk __builtin_avr_bitshk | |
185 | #define bitsk __builtin_avr_bitsk | |
186 | ||
187 | #define bitsuhk __builtin_avr_bitsuhk | |
188 | #define bitsuk __builtin_avr_bitsuk | |
189 | ||
190 | #if __SIZEOF_INT__ == 2 | |
191 | ||
192 | #define bitslk __builtin_avr_bitslk | |
193 | #define bitsulk __builtin_avr_bitsulk | |
194 | #define bitsllr __builtin_avr_bitsllr /* GCC Extension */ | |
195 | #define bitsullr __builtin_avr_bitsullr /* GCC Extension */ | |
196 | #define bitsllk __builtin_avr_bitsllk /* GCC Extension */ | |
197 | #define bitsullk __builtin_avr_bitsullk /* GCC Extension */ | |
198 | ||
199 | #endif /* sizeof (int) == 2 */ | |
200 | ||
201 | ||
202 | /* 7.18a.6.6 The bitwise integer to fixed-point conversion functions. */ | |
203 | ||
204 | #define hrbits __builtin_avr_hrbits | |
205 | #define rbits __builtin_avr_rbits | |
206 | #define lrbits __builtin_avr_lrbits | |
207 | ||
208 | #define uhrbits __builtin_avr_uhrbits | |
209 | #define urbits __builtin_avr_urbits | |
210 | #define ulrbits __builtin_avr_ulrbits | |
211 | ||
212 | #define hkbits __builtin_avr_hkbits | |
213 | #define kbits __builtin_avr_kbits | |
214 | ||
215 | #define uhkbits __builtin_avr_uhkbits | |
216 | #define ukbits __builtin_avr_ukbits | |
217 | ||
218 | #if __SIZEOF_INT__ == 2 | |
219 | ||
220 | #define lkbits __builtin_avr_lkbits | |
221 | #define ulkbits __builtin_avr_ulkbits | |
222 | #define llrbits __builtin_avr_llrbits /* GCC Extension */ | |
223 | #define ullrbits __builtin_avr_ullrbits /* GCC Extension */ | |
224 | #define llkbits __builtin_avr_llkbits /* GCC Extension */ | |
225 | #define ullkbits __builtin_avr_ullkbits /* GCC Extension */ | |
226 | ||
227 | #endif /* sizeof (int) == 2 */ | |
228 | ||
229 | ||
230 | /* 7.18a.6.7 Type-generic fixed-point functions. */ | |
231 | ||
232 | #define absfx __builtin_avr_absfx | |
233 | #define roundfx __builtin_avr_roundfx | |
234 | #define countlsfx __builtin_avr_countlsfx | |
235 | ||
dd07a06f GJL |
236 | |
237 | /* Hook in stuff from AVR-Libc. */ | |
238 | ||
239 | #if (defined (__WITH_AVRLIBC__) \ | |
240 | && defined (__has_include) \ | |
241 | && __has_include (<stdfix-avrlibc.h>)) | |
242 | #include <stdfix-avrlibc.h> | |
243 | #endif | |
244 | ||
dc62d7d1 | 245 | #endif /* _AVRGCC_STDFIX_H */ |