Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/fixed-bit.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | a06113de4d67 |
children |
rev | line source |
---|---|
0 | 1 /* This is a software fixed-point library. |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. |
0 | 3 |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify it under | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 Under Section 7 of GPL version 3, you are granted additional | |
17 permissions described in the GCC Runtime Library Exception, version | |
18 3.1, as published by the Free Software Foundation. | |
19 | |
20 You should have received a copy of the GNU General Public License and | |
21 a copy of the GCC Runtime Library Exception along with this program; | |
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 <http://www.gnu.org/licenses/>. */ | |
24 | |
25 #ifndef _FIXED_BIT_H | |
26 #define _FIXED_BIT_H | |
27 | |
28 /* To use this file we need to define one of the following: | |
29 QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE, | |
30 TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE, | |
31 TA_MODE, UTA_MODE. | |
32 Then, all operators for this machine mode will be created. | |
33 | |
34 Or, we need to define FROM_* TO_* for conversions from one mode to another | |
35 mode. The mode could be one of the following: | |
36 Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ | |
37 Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA | |
38 Signed integer: QI, HI, SI, DI, TI | |
39 Unsigned integer: UQI, UHI, USI, UDI, UTI | |
40 Floating-point: SF, DF | |
41 Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is | |
42 generated. */ | |
43 | |
44 #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE | |
45 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE | |
46 #endif | |
47 | |
48 #ifndef LIBGCC2_HAS_SF_MODE | |
49 #define LIBGCC2_HAS_SF_MODE (BITS_PER_UNIT == 8) | |
50 #endif | |
51 | |
52 #ifndef LIBGCC2_HAS_DF_MODE | |
53 #define LIBGCC2_HAS_DF_MODE \ | |
54 (BITS_PER_UNIT == 8 \ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
55 && (__SIZEOF_DOUBLE__ * __CHAR_BIT__ == 64 \ |
0 | 56 || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64)) |
57 #endif | |
58 | |
59 typedef int QItype __attribute__ ((mode (QI))); | |
60 typedef unsigned int UQItype __attribute__ ((mode (QI))); | |
61 typedef int HItype __attribute__ ((mode (HI))); | |
62 typedef unsigned int UHItype __attribute__ ((mode (HI))); | |
63 typedef _Fract QQtype __attribute__ ((mode (QQ))); | |
64 typedef unsigned _Fract UQQtype __attribute__ ((mode (UQQ))); | |
65 typedef _Fract HQtype __attribute__ ((mode (HQ))); | |
66 typedef unsigned _Fract UHQtype __attribute__ ((mode (UHQ))); | |
67 typedef _Fract HAtype __attribute__ ((mode (HA))); | |
68 typedef unsigned _Fract UHAtype __attribute__ ((mode (UHA))); | |
69 #define HAVE_QQ 1 | |
70 #define HAVE_UQQ 1 | |
71 #define HAVE_HQ 1 | |
72 #define HAVE_UHQ 1 | |
73 #define HAVE_HA 1 | |
74 #define HAVE_UHA 1 | |
75 #define HAVE_QI 1 | |
76 #define HAVE_UQI 1 | |
77 #define HAVE_HI 1 | |
78 #define HAVE_UHI 1 | |
79 #if MIN_UNITS_PER_WORD > 1 | |
80 /* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1. */ | |
81 typedef int SItype __attribute__ ((mode (SI))); | |
82 typedef unsigned int USItype __attribute__ ((mode (SI))); | |
83 typedef _Fract SQtype __attribute__ ((mode (SQ))); | |
84 typedef unsigned _Fract USQtype __attribute__ ((mode (USQ))); | |
85 typedef _Fract SAtype __attribute__ ((mode (SA))); | |
86 typedef unsigned _Fract USAtype __attribute__ ((mode (USA))); | |
87 #define HAVE_SQ 1 | |
88 #define HAVE_USQ 1 | |
89 #define HAVE_SA 1 | |
90 #define HAVE_USA 1 | |
91 #define HAVE_SI 1 | |
92 #define HAVE_USI 1 | |
93 #if LONG_LONG_TYPE_SIZE > 32 | |
94 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2. */ | |
95 typedef int DItype __attribute__ ((mode (DI))); | |
96 typedef unsigned int UDItype __attribute__ ((mode (DI))); | |
97 typedef _Fract DQtype __attribute__ ((mode (DQ))); | |
98 typedef unsigned _Fract UDQtype __attribute__ ((mode (UDQ))); | |
99 typedef _Fract DAtype __attribute__ ((mode (DA))); | |
100 typedef unsigned _Fract UDAtype __attribute__ ((mode (UDA))); | |
101 #define HAVE_DQ 1 | |
102 #define HAVE_UDQ 1 | |
103 #define HAVE_DA 1 | |
104 #define HAVE_UDA 1 | |
105 #define HAVE_DI 1 | |
106 #define HAVE_UDI 1 | |
107 #if MIN_UNITS_PER_WORD > 4 | |
108 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4. */ | |
109 typedef int TItype __attribute__ ((mode (TI))); | |
110 typedef unsigned int UTItype __attribute__ ((mode (TI))); | |
111 typedef _Fract TQtype __attribute__ ((mode (TQ))); | |
112 typedef unsigned _Fract UTQtype __attribute__ ((mode (UTQ))); | |
113 typedef _Fract TAtype __attribute__ ((mode (TA))); | |
114 typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA))); | |
115 #define HAVE_TQ 1 | |
116 #define HAVE_UTQ 1 | |
117 #define HAVE_TA 1 | |
118 #define HAVE_UTA 1 | |
119 #define HAVE_TI 1 | |
120 #define HAVE_UTI 1 | |
121 #endif | |
122 #endif | |
123 #endif | |
124 | |
125 #if LIBGCC2_HAS_SF_MODE | |
126 typedef float SFtype __attribute__ ((mode (SF))); | |
127 #define HAVE_SF 1 | |
128 #endif | |
129 #if LIBGCC2_HAS_DF_MODE | |
130 typedef float DFtype __attribute__ ((mode (DF))); | |
131 #define HAVE_DF 1 | |
132 #endif | |
133 | |
134 typedef int word_type __attribute__ ((mode (__word__))); | |
135 | |
136 /* Based on modes, we create many defines. */ | |
137 | |
138 #if defined (QQ_MODE) && (HAVE_QQ == 1) | |
139 #define FIXED_SIZE 1 /* in bytes. */ | |
140 #define INT_C_TYPE QItype | |
141 #define UINT_C_TYPE UQItype | |
142 #define DINT_C_TYPE HItype | |
143 #define DUINT_C_TYPE UHItype | |
144 #define MODE_NAME QQ | |
145 #define MODE_NAME_S qq | |
146 #define MODE_UNSIGNED 0 | |
147 #endif | |
148 | |
149 #if defined (UQQ_MODE) && (HAVE_UQQ == 1) | |
150 #define FIXED_SIZE 1 /* in bytes. */ | |
151 #define INT_C_TYPE UQItype | |
152 #define UINT_C_TYPE UQItype | |
153 #define DINT_C_TYPE UHItype | |
154 #define DUINT_C_TYPE UHItype | |
155 #define MODE_NAME UQQ | |
156 #define MODE_NAME_S uqq | |
157 #define MODE_UNSIGNED 1 | |
158 #endif | |
159 | |
160 #if defined (HQ_MODE) && (HAVE_HQ == 1) | |
161 #define FIXED_SIZE 2 /* in bytes. */ | |
162 #define INT_C_TYPE HItype | |
163 #define UINT_C_TYPE UHItype | |
164 | |
165 #if HAVE_SI == 1 | |
166 #define DINT_C_TYPE SItype | |
167 #define DUINT_C_TYPE USItype | |
168 #else | |
169 #define HINT_C_TYPE QItype | |
170 #define HUINT_C_TYPE UQItype | |
171 #endif | |
172 | |
173 #define MODE_NAME HQ | |
174 #define MODE_NAME_S hq | |
175 #define MODE_UNSIGNED 0 | |
176 #endif | |
177 | |
178 #if defined (UHQ_MODE) && (HAVE_UHQ == 1) | |
179 #define FIXED_SIZE 2 /* in bytes. */ | |
180 #define INT_C_TYPE UHItype | |
181 #define UINT_C_TYPE UHItype | |
182 | |
183 #if HAVE_SI == 1 | |
184 #define DINT_C_TYPE USItype | |
185 #define DUINT_C_TYPE USItype | |
186 #else | |
187 #define HINT_C_TYPE UQItype | |
188 #define HUINT_C_TYPE UQItype | |
189 #endif | |
190 | |
191 #define MODE_NAME UHQ | |
192 #define MODE_NAME_S uhq | |
193 #define MODE_UNSIGNED 1 | |
194 #endif | |
195 | |
196 #if defined (SQ_MODE) && (HAVE_SQ == 1) | |
197 #define FIXED_SIZE 4 /* in bytes. */ | |
198 #define INT_C_TYPE SItype | |
199 #define UINT_C_TYPE USItype | |
200 | |
201 #if HAVE_DI == 1 | |
202 #define DINT_C_TYPE DItype | |
203 #define DUINT_C_TYPE UDItype | |
204 #else | |
205 #define HINT_C_TYPE HItype | |
206 #define HUINT_C_TYPE UHItype | |
207 #endif | |
208 | |
209 #define MODE_NAME SQ | |
210 #define MODE_NAME_S sq | |
211 #define MODE_UNSIGNED 0 | |
212 #endif | |
213 | |
214 #if defined (USQ_MODE) && (HAVE_USQ == 1) | |
215 #define FIXED_SIZE 4 /* in bytes. */ | |
216 #define INT_C_TYPE USItype | |
217 #define UINT_C_TYPE USItype | |
218 | |
219 #if HAVE_DI == 1 | |
220 #define DINT_C_TYPE UDItype | |
221 #define DUINT_C_TYPE UDItype | |
222 #else | |
223 #define HINT_C_TYPE UHItype | |
224 #define HUINT_C_TYPE UHItype | |
225 #endif | |
226 | |
227 #define MODE_NAME USQ | |
228 #define MODE_NAME_S usq | |
229 #define MODE_UNSIGNED 1 | |
230 #endif | |
231 | |
232 #if defined (DQ_MODE) && (HAVE_DQ == 1) | |
233 #define FIXED_SIZE 8 /* in bytes. */ | |
234 #define INT_C_TYPE DItype | |
235 #define UINT_C_TYPE UDItype | |
236 | |
237 #if HAVE_TI == 1 | |
238 #define DINT_C_TYPE TItype | |
239 #define DUINT_C_TYPE UTItype | |
240 #else | |
241 #define HINT_C_TYPE SItype | |
242 #define HUINT_C_TYPE USItype | |
243 #endif | |
244 | |
245 #define MODE_NAME DQ | |
246 #define MODE_NAME_S dq | |
247 #define MODE_UNSIGNED 0 | |
248 #endif | |
249 | |
250 #if defined (UDQ_MODE) && (HAVE_UDQ == 1) | |
251 #define FIXED_SIZE 8 /* in bytes. */ | |
252 #define INT_C_TYPE UDItype | |
253 #define UINT_C_TYPE UDItype | |
254 | |
255 #if HAVE_TI == 1 | |
256 #define DINT_C_TYPE UTItype | |
257 #define DUINT_C_TYPE UTItype | |
258 #else | |
259 #define HINT_C_TYPE USItype | |
260 #define HUINT_C_TYPE USItype | |
261 #endif | |
262 | |
263 #define MODE_NAME UDQ | |
264 #define MODE_NAME_S udq | |
265 #define MODE_UNSIGNED 1 | |
266 #endif | |
267 | |
268 #if defined (TQ_MODE) && (HAVE_TQ == 1) | |
269 #define FIXED_SIZE 16 /* in bytes. */ | |
270 #define INT_C_TYPE TItype | |
271 #define UINT_C_TYPE UTItype | |
272 #define HINT_C_TYPE DItype | |
273 #define HUINT_C_TYPE UDItype | |
274 #define MODE_NAME TQ | |
275 #define MODE_NAME_S tq | |
276 #define MODE_UNSIGNED 0 | |
277 #endif | |
278 | |
279 #if defined (UTQ_MODE) && (HAVE_UTQ == 1) | |
280 #define FIXED_SIZE 16 /* in bytes. */ | |
281 #define INT_C_TYPE UTItype | |
282 #define UINT_C_TYPE UTItype | |
283 #define HINT_C_TYPE UDItype | |
284 #define HUINT_C_TYPE UDItype | |
285 #define MODE_NAME UTQ | |
286 #define MODE_NAME_S utq | |
287 #define MODE_UNSIGNED 1 | |
288 #endif | |
289 | |
290 #if defined (HA_MODE) && (HAVE_HA == 1) | |
291 #define FIXED_SIZE 2 /* in bytes. */ | |
292 #define INT_C_TYPE HItype | |
293 #define UINT_C_TYPE UHItype | |
294 | |
295 #if HAVE_SI == 1 | |
296 #define DINT_C_TYPE SItype | |
297 #define DUINT_C_TYPE USItype | |
298 #else | |
299 #define HINT_C_TYPE QItype | |
300 #define HUINT_C_TYPE UQItype | |
301 #endif | |
302 | |
303 #define MODE_NAME HA | |
304 #define MODE_NAME_S ha | |
305 #define MODE_UNSIGNED 0 | |
306 #endif | |
307 | |
308 #if defined (UHA_MODE) && (HAVE_UHA == 1) | |
309 #define FIXED_SIZE 2 /* in bytes. */ | |
310 #define INT_C_TYPE UHItype | |
311 #define UINT_C_TYPE UHItype | |
312 | |
313 #if HAVE_SI == 1 | |
314 #define DINT_C_TYPE USItype | |
315 #define DUINT_C_TYPE USItype | |
316 #else | |
317 #define HINT_C_TYPE UQItype | |
318 #define HUINT_C_TYPE UQItype | |
319 #endif | |
320 | |
321 #define MODE_NAME UHA | |
322 #define MODE_NAME_S uha | |
323 #define MODE_UNSIGNED 1 | |
324 #endif | |
325 | |
326 #if defined (SA_MODE) && (HAVE_SA == 1) | |
327 #define FIXED_SIZE 4 /* in bytes. */ | |
328 #define INT_C_TYPE SItype | |
329 #define UINT_C_TYPE USItype | |
330 | |
331 #if HAVE_DI == 1 | |
332 #define DINT_C_TYPE DItype | |
333 #define DUINT_C_TYPE UDItype | |
334 #else | |
335 #define HINT_C_TYPE HItype | |
336 #define HUINT_C_TYPE UHItype | |
337 #endif | |
338 | |
339 #define MODE_NAME SA | |
340 #define MODE_NAME_S sa | |
341 #define MODE_UNSIGNED 0 | |
342 #endif | |
343 | |
344 #if defined (USA_MODE) && (HAVE_USA == 1) | |
345 #define FIXED_SIZE 4 /* in bytes. */ | |
346 #define INT_C_TYPE USItype | |
347 #define UINT_C_TYPE USItype | |
348 | |
349 #if HAVE_DI == 1 | |
350 #define DINT_C_TYPE UDItype | |
351 #define DUINT_C_TYPE UDItype | |
352 #else | |
353 #define HINT_C_TYPE UHItype | |
354 #define HUINT_C_TYPE UHItype | |
355 #endif | |
356 | |
357 #define MODE_NAME USA | |
358 #define MODE_NAME_S usa | |
359 #define MODE_UNSIGNED 1 | |
360 #endif | |
361 | |
362 #if defined (DA_MODE) && (HAVE_DA == 1) | |
363 #define FIXED_SIZE 8 /* in bytes. */ | |
364 #define INT_C_TYPE DItype | |
365 #define UINT_C_TYPE UDItype | |
366 | |
367 #if HAVE_TI == 1 | |
368 #define DINT_C_TYPE TItype | |
369 #define DUINT_C_TYPE UTItype | |
370 #else | |
371 #define HINT_C_TYPE SItype | |
372 #define HUINT_C_TYPE USItype | |
373 #endif | |
374 | |
375 #define MODE_NAME DA | |
376 #define MODE_NAME_S da | |
377 #define MODE_UNSIGNED 0 | |
378 #endif | |
379 | |
380 #if defined (UDA_MODE) && (HAVE_UDA == 1) | |
381 #define FIXED_SIZE 8 /* in bytes. */ | |
382 #define INT_C_TYPE UDItype | |
383 #define UINT_C_TYPE UDItype | |
384 | |
385 #if HAVE_TI == 1 | |
386 #define DINT_C_TYPE UTItype | |
387 #define DUINT_C_TYPE UTItype | |
388 #else | |
389 #define HINT_C_TYPE USItype | |
390 #define HUINT_C_TYPE USItype | |
391 #endif | |
392 | |
393 #define MODE_NAME UDA | |
394 #define MODE_NAME_S uda | |
395 #define MODE_UNSIGNED 1 | |
396 #endif | |
397 | |
398 #if defined (TA_MODE) && (HAVE_TA == 1) | |
399 #define FIXED_SIZE 16 /* in bytes. */ | |
400 #define INT_C_TYPE TItype | |
401 #define UINT_C_TYPE UTItype | |
402 #define HINT_C_TYPE DItype | |
403 #define HUINT_C_TYPE UDItype | |
404 #define MODE_NAME TA | |
405 #define MODE_NAME_S ta | |
406 #define MODE_UNSIGNED 0 | |
407 #endif | |
408 | |
409 #if defined (UTA_MODE) && (HAVE_UTA == 1) | |
410 #define FIXED_SIZE 16 /* in bytes. */ | |
411 #define INT_C_TYPE UTItype | |
412 #define UINT_C_TYPE UTItype | |
413 #define HINT_C_TYPE UDItype | |
414 #define HUINT_C_TYPE UDItype | |
415 #define MODE_NAME UTA | |
416 #define MODE_NAME_S uta | |
417 #define MODE_UNSIGNED 1 | |
418 #endif | |
419 | |
420 /* The following defines are based on the previous defines. */ | |
421 | |
422 #if defined (HINT_C_TYPE) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
423 #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ |
0 | 424 struct INTstruct {HINT_C_TYPE high, low;}; |
425 #else | |
426 struct INTstruct {HINT_C_TYPE low, high;}; | |
427 #endif | |
428 | |
429 typedef union | |
430 { | |
431 struct INTstruct s; | |
432 INT_C_TYPE ll; | |
433 } INTunion; | |
434 #endif | |
435 | |
436 #define FIXED_WIDTH (FIXED_SIZE * BITS_PER_UNIT) /* in bits. */ | |
437 #define FIXED_C_TYPE1(NAME) NAME ## type | |
438 #define FIXED_C_TYPE2(NAME) FIXED_C_TYPE1(NAME) | |
439 #define FIXED_C_TYPE FIXED_C_TYPE2(MODE_NAME) | |
440 #define FBITS1(NAME) __ ## NAME ## _FBIT__ | |
441 #define FBITS2(NAME) FBITS1(NAME) | |
442 #define FBITS FBITS2(MODE_NAME) | |
443 #define IBITS1(NAME) __ ## NAME ## _IBIT__ | |
444 #define IBITS2(NAME) IBITS1(NAME) | |
445 #define IBITS IBITS2(MODE_NAME) | |
446 #define I_F_BITS (FBITS + IBITS) | |
447 | |
448 #define FIXED_OP(OP,MODE,NUM) OP ## MODE ## NUM | |
449 | |
450 #define FIXED_SATURATE1_TEMP(NAME) FIXED_OP(__saturate1,NAME,) | |
451 #define FIXED_SATURATE2_TEMP(NAME) FIXED_OP(__saturate2,NAME,) | |
452 #define FIXED_MULHELPER_TEMP(NAME) FIXED_OP(__mulhelper,NAME,) | |
453 #define FIXED_DIVHELPER_TEMP(NAME) FIXED_OP(__divhelper,NAME,) | |
454 #define FIXED_ASHLHELPER_TEMP(NAME) FIXED_OP(__ashlhelper,NAME,) | |
455 #define FIXED_ADD_TEMP(NAME) FIXED_OP(__add,NAME,3) | |
456 #define FIXED_SSADD_TEMP(NAME) FIXED_OP(__ssadd,NAME,3) | |
457 #define FIXED_USADD_TEMP(NAME) FIXED_OP(__usadd,NAME,3) | |
458 #define FIXED_SUB_TEMP(NAME) FIXED_OP(__sub,NAME,3) | |
459 #define FIXED_SSSUB_TEMP(NAME) FIXED_OP(__sssub,NAME,3) | |
460 #define FIXED_USSUB_TEMP(NAME) FIXED_OP(__ussub,NAME,3) | |
461 #define FIXED_MUL_TEMP(NAME) FIXED_OP(__mul,NAME,3) | |
462 #define FIXED_SSMUL_TEMP(NAME) FIXED_OP(__ssmul,NAME,3) | |
463 #define FIXED_USMUL_TEMP(NAME) FIXED_OP(__usmul,NAME,3) | |
464 #define FIXED_DIV_TEMP(NAME) FIXED_OP(__div,NAME,3) | |
465 #define FIXED_UDIV_TEMP(NAME) FIXED_OP(__udiv,NAME,3) | |
466 #define FIXED_SSDIV_TEMP(NAME) FIXED_OP(__ssdiv,NAME,3) | |
467 #define FIXED_USDIV_TEMP(NAME) FIXED_OP(__usdiv,NAME,3) | |
468 #define FIXED_NEG_TEMP(NAME) FIXED_OP(__neg,NAME,2) | |
469 #define FIXED_SSNEG_TEMP(NAME) FIXED_OP(__ssneg,NAME,2) | |
470 #define FIXED_USNEG_TEMP(NAME) FIXED_OP(__usneg,NAME,2) | |
471 #define FIXED_ASHL_TEMP(NAME) FIXED_OP(__ashl,NAME,3) | |
472 #define FIXED_ASHR_TEMP(NAME) FIXED_OP(__ashr,NAME,3) | |
473 #define FIXED_LSHR_TEMP(NAME) FIXED_OP(__lshr,NAME,3) | |
474 #define FIXED_SSASHL_TEMP(NAME) FIXED_OP(__ssashl,NAME,3) | |
475 #define FIXED_USASHL_TEMP(NAME) FIXED_OP(__usashl,NAME,3) | |
476 #define FIXED_CMP_TEMP(NAME) FIXED_OP(__cmp,NAME,2) | |
477 | |
478 #if defined (MODE_NAME) | |
479 #if defined (DINT_C_TYPE) | |
480 #define FIXED_SATURATE1 FIXED_SATURATE1_TEMP(MODE_NAME_S) | |
481 #else | |
482 #define FIXED_SATURATE2 FIXED_SATURATE2_TEMP(MODE_NAME_S) | |
483 #endif | |
484 #define FIXED_MULHELPER FIXED_MULHELPER_TEMP(MODE_NAME_S) | |
485 #define FIXED_DIVHELPER FIXED_DIVHELPER_TEMP(MODE_NAME_S) | |
486 #define FIXED_ASHLHELPER FIXED_ASHLHELPER_TEMP(MODE_NAME_S) | |
487 #define FIXED_ADD FIXED_ADD_TEMP(MODE_NAME_S) | |
488 #define FIXED_SUB FIXED_SUB_TEMP(MODE_NAME_S) | |
489 #define FIXED_MUL FIXED_MUL_TEMP(MODE_NAME_S) | |
490 #define FIXED_NEG FIXED_NEG_TEMP(MODE_NAME_S) | |
491 #define FIXED_ASHL FIXED_ASHL_TEMP(MODE_NAME_S) | |
492 #define FIXED_CMP FIXED_CMP_TEMP(MODE_NAME_S) | |
493 | |
494 /* The following functions are for all fixed-point modes. */ | |
495 #if defined (DINT_C_TYPE) | |
496 extern void FIXED_SATURATE1 (DINT_C_TYPE *); | |
497 #else | |
498 extern void FIXED_SATURATE2 (INT_C_TYPE *, INT_C_TYPE *); | |
499 #endif | |
500 extern FIXED_C_TYPE FIXED_MULHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); | |
501 extern FIXED_C_TYPE FIXED_DIVHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); | |
502 extern FIXED_C_TYPE FIXED_ASHLHELPER (FIXED_C_TYPE, word_type, word_type); | |
503 extern FIXED_C_TYPE FIXED_ADD (FIXED_C_TYPE, FIXED_C_TYPE); | |
504 extern FIXED_C_TYPE FIXED_SUB (FIXED_C_TYPE, FIXED_C_TYPE); | |
505 extern FIXED_C_TYPE FIXED_MUL (FIXED_C_TYPE, FIXED_C_TYPE); | |
506 extern FIXED_C_TYPE FIXED_NEG (FIXED_C_TYPE); | |
507 extern FIXED_C_TYPE FIXED_ASHL (FIXED_C_TYPE, word_type); | |
508 extern word_type FIXED_CMP (FIXED_C_TYPE, FIXED_C_TYPE); | |
509 #endif | |
510 | |
511 #if MODE_UNSIGNED == 0 /* Signed types. */ | |
512 #define PADDING_BITS (FIXED_WIDTH - 1 - I_F_BITS) | |
513 #define NONPADDING_BITS (1 + I_F_BITS) | |
514 | |
515 #if defined (MODE_NAME) | |
516 #define FIXED_DIV FIXED_DIV_TEMP(MODE_NAME_S) | |
517 #define FIXED_ASHR FIXED_ASHR_TEMP(MODE_NAME_S) | |
518 #define FIXED_SSADD FIXED_SSADD_TEMP(MODE_NAME_S) | |
519 #define FIXED_SSSUB FIXED_SSSUB_TEMP(MODE_NAME_S) | |
520 #define FIXED_SSMUL FIXED_SSMUL_TEMP(MODE_NAME_S) | |
521 #define FIXED_SSDIV FIXED_SSDIV_TEMP(MODE_NAME_S) | |
522 #define FIXED_SSNEG FIXED_SSNEG_TEMP(MODE_NAME_S) | |
523 #define FIXED_SSASHL FIXED_SSASHL_TEMP(MODE_NAME_S) | |
524 | |
525 /* The following functions are for signed fixed-point modes. */ | |
526 extern FIXED_C_TYPE FIXED_DIV (FIXED_C_TYPE, FIXED_C_TYPE); | |
527 extern FIXED_C_TYPE FIXED_ASHR (FIXED_C_TYPE, word_type); | |
528 extern FIXED_C_TYPE FIXED_SSADD (FIXED_C_TYPE, FIXED_C_TYPE); | |
529 extern FIXED_C_TYPE FIXED_SSSUB (FIXED_C_TYPE, FIXED_C_TYPE); | |
530 extern FIXED_C_TYPE FIXED_SSMUL (FIXED_C_TYPE, FIXED_C_TYPE); | |
531 extern FIXED_C_TYPE FIXED_SSDIV (FIXED_C_TYPE, FIXED_C_TYPE); | |
532 extern FIXED_C_TYPE FIXED_SSNEG (FIXED_C_TYPE); | |
533 extern FIXED_C_TYPE FIXED_SSASHL (FIXED_C_TYPE, word_type); | |
534 #endif | |
535 | |
536 #else /* Unsigned types. */ | |
537 #define PADDING_BITS (FIXED_WIDTH - I_F_BITS) | |
538 #define NONPADDING_BITS (I_F_BITS) | |
539 | |
540 #if defined (MODE_NAME) | |
541 #define FIXED_UDIV FIXED_UDIV_TEMP(MODE_NAME_S) | |
542 #define FIXED_LSHR FIXED_LSHR_TEMP(MODE_NAME_S) | |
543 #define FIXED_USDIV FIXED_USDIV_TEMP(MODE_NAME_S) | |
544 #define FIXED_USADD FIXED_USADD_TEMP(MODE_NAME_S) | |
545 #define FIXED_USSUB FIXED_USSUB_TEMP(MODE_NAME_S) | |
546 #define FIXED_USMUL FIXED_USMUL_TEMP(MODE_NAME_S) | |
547 #define FIXED_USNEG FIXED_USNEG_TEMP(MODE_NAME_S) | |
548 #define FIXED_USASHL FIXED_USASHL_TEMP(MODE_NAME_S) | |
549 | |
550 /* The following functions are for unsigned fixed-point modes. */ | |
551 extern FIXED_C_TYPE FIXED_UDIV (FIXED_C_TYPE, FIXED_C_TYPE); | |
552 extern FIXED_C_TYPE FIXED_LSHR (FIXED_C_TYPE, word_type); | |
553 extern FIXED_C_TYPE FIXED_USADD (FIXED_C_TYPE, FIXED_C_TYPE); | |
554 extern FIXED_C_TYPE FIXED_USSUB (FIXED_C_TYPE, FIXED_C_TYPE); | |
555 extern FIXED_C_TYPE FIXED_USMUL (FIXED_C_TYPE, FIXED_C_TYPE); | |
556 extern FIXED_C_TYPE FIXED_USDIV (FIXED_C_TYPE, FIXED_C_TYPE); | |
557 extern FIXED_C_TYPE FIXED_USNEG (FIXED_C_TYPE); | |
558 extern FIXED_C_TYPE FIXED_USASHL (FIXED_C_TYPE, word_type); | |
559 #endif | |
560 | |
561 #endif /* End of testing MODE_UNSIGNED. */ | |
562 | |
563 /* This define is to check if this mode have any padding bits. */ | |
564 #define HAVE_PADDING_BITS (PADDING_BITS > 0) | |
565 | |
566 /* ------------------------------------------------------------------------ */ | |
567 /* The following defines are for conversions. */ | |
568 | |
569 #if defined (FROM_QI) && HAVE_QI == 1 | |
570 #define FROM_TYPE 1 /* Signed integer. */ | |
571 #define FROM_INT_C_TYPE QItype | |
572 #define FROM_SINT_C_TYPE QItype | |
573 #define FROM_UINT_C_TYPE UQItype | |
574 #define FROM_MODE_NAME_S qi | |
575 #define FROM_INT_SIZE 1 /* in bytes. */ | |
576 | |
577 #elif defined (FROM_HI) && HAVE_HI == 1 | |
578 #define FROM_TYPE 1 /* Signed integer. */ | |
579 #define FROM_INT_C_TYPE HItype | |
580 #define FROM_SINT_C_TYPE HItype | |
581 #define FROM_UINT_C_TYPE UHItype | |
582 #define FROM_MODE_NAME_S hi | |
583 #define FROM_INT_SIZE 2 /* in bytes. */ | |
584 | |
585 #elif defined (FROM_SI) && HAVE_SI == 1 | |
586 #define FROM_TYPE 1 /* Signed integer. */ | |
587 #define FROM_INT_C_TYPE SItype | |
588 #define FROM_SINT_C_TYPE SItype | |
589 #define FROM_UINT_C_TYPE USItype | |
590 #define FROM_MODE_NAME_S si | |
591 #define FROM_INT_SIZE 4 /* in bytes. */ | |
592 | |
593 #elif defined (FROM_DI) && HAVE_DI == 1 | |
594 #define FROM_TYPE 1 /* Signed integer. */ | |
595 #define FROM_INT_C_TYPE DItype | |
596 #define FROM_SINT_C_TYPE DItype | |
597 #define FROM_UINT_C_TYPE UDItype | |
598 #define FROM_MODE_NAME_S di | |
599 #define FROM_INT_SIZE 8 /* in bytes. */ | |
600 | |
601 #elif defined (FROM_TI) && HAVE_TI == 1 | |
602 #define FROM_TYPE 1 /* Signed integer. */ | |
603 #define FROM_INT_C_TYPE TItype | |
604 #define FROM_SINT_C_TYPE TItype | |
605 #define FROM_UINT_C_TYPE UTItype | |
606 #define FROM_MODE_NAME_S ti | |
607 #define FROM_INT_SIZE 16 /* in bytes. */ | |
608 | |
609 #elif defined (FROM_UQI) && HAVE_UQI == 1 | |
610 #define FROM_TYPE 2 /* Unsigned integer. */ | |
611 #define FROM_INT_C_TYPE QItype | |
612 #define FROM_SINT_C_TYPE QItype | |
613 #define FROM_UINT_C_TYPE UQItype | |
614 #define FROM_MODE_NAME_S qi | |
615 #define FROM_INT_SIZE 1 /* in bytes. */ | |
616 | |
617 #elif defined (FROM_UHI) && HAVE_UHI == 1 | |
618 #define FROM_TYPE 2 /* Unsigned integer. */ | |
619 #define FROM_INT_C_TYPE UHItype | |
620 #define FROM_SINT_C_TYPE HItype | |
621 #define FROM_UINT_C_TYPE UHItype | |
622 #define FROM_MODE_NAME_S hi | |
623 #define FROM_INT_SIZE 2 /* in bytes. */ | |
624 | |
625 #elif defined (FROM_USI) && HAVE_USI == 1 | |
626 #define FROM_TYPE 2 /* Unsigned integer. */ | |
627 #define FROM_INT_C_TYPE USItype | |
628 #define FROM_SINT_C_TYPE SItype | |
629 #define FROM_UINT_C_TYPE USItype | |
630 #define FROM_MODE_NAME_S si | |
631 #define FROM_INT_SIZE 4 /* in bytes. */ | |
632 | |
633 #elif defined (FROM_UDI) && HAVE_UDI == 1 | |
634 #define FROM_TYPE 2 /* Unsigned integer. */ | |
635 #define FROM_INT_C_TYPE UDItype | |
636 #define FROM_SINT_C_TYPE DItype | |
637 #define FROM_UINT_C_TYPE UDItype | |
638 #define FROM_MODE_NAME_S di | |
639 #define FROM_INT_SIZE 8 /* in bytes. */ | |
640 | |
641 #elif defined (FROM_UTI) && HAVE_UTI == 1 | |
642 #define FROM_TYPE 2 /* Unsigned integer. */ | |
643 #define FROM_INT_C_TYPE UTItype | |
644 #define FROM_SINT_C_TYPE TItype | |
645 #define FROM_UINT_C_TYPE UTItype | |
646 #define FROM_MODE_NAME_S ti | |
647 #define FROM_INT_SIZE 16 /* in bytes. */ | |
648 | |
649 #elif defined (FROM_SF) && HAVE_SF == 1 | |
650 #define FROM_TYPE 3 /* Floating-point. */ | |
651 #define FROM_FLOAT_C_TYPE SFtype | |
652 #define FROM_MODE_NAME_S sf | |
653 | |
654 #elif defined (FROM_DF) && HAVE_DF == 1 | |
655 #define FROM_TYPE 3 /* Floating-point. */ | |
656 #define FROM_FLOAT_C_TYPE DFtype | |
657 #define FROM_MODE_NAME_S df | |
658 | |
659 #elif defined (FROM_QQ) && HAVE_QQ == 1 | |
660 #define FROM_TYPE 4 /* Fixed-point. */ | |
661 #define FROM_MODE_NAME QQ | |
662 #define FROM_MODE_NAME_S qq | |
663 #define FROM_INT_C_TYPE QItype | |
664 #define FROM_SINT_C_TYPE QItype | |
665 #define FROM_UINT_C_TYPE UQItype | |
666 #define FROM_MODE_UNSIGNED 0 | |
667 #define FROM_FIXED_SIZE 1 /* in bytes. */ | |
668 | |
669 #elif defined (FROM_HQ) && HAVE_HQ == 1 | |
670 #define FROM_TYPE 4 /* Fixed-point. */ | |
671 #define FROM_MODE_NAME HQ | |
672 #define FROM_MODE_NAME_S hq | |
673 #define FROM_INT_C_TYPE HItype | |
674 #define FROM_SINT_C_TYPE HItype | |
675 #define FROM_UINT_C_TYPE UHItype | |
676 #define FROM_MODE_UNSIGNED 0 | |
677 #define FROM_FIXED_SIZE 2 /* in bytes. */ | |
678 | |
679 #elif defined (FROM_SQ) && HAVE_SQ == 1 | |
680 #define FROM_TYPE 4 /* Fixed-point. */ | |
681 #define FROM_MODE_NAME SQ | |
682 #define FROM_MODE_NAME_S sq | |
683 #define FROM_INT_C_TYPE SItype | |
684 #define FROM_SINT_C_TYPE SItype | |
685 #define FROM_UINT_C_TYPE USItype | |
686 #define FROM_MODE_UNSIGNED 0 | |
687 #define FROM_FIXED_SIZE 4 /* in bytes. */ | |
688 | |
689 #elif defined (FROM_DQ) && HAVE_DQ == 1 | |
690 #define FROM_TYPE 4 /* Fixed-point. */ | |
691 #define FROM_MODE_NAME DQ | |
692 #define FROM_MODE_NAME_S dq | |
693 #define FROM_INT_C_TYPE DItype | |
694 #define FROM_SINT_C_TYPE DItype | |
695 #define FROM_UINT_C_TYPE UDItype | |
696 #define FROM_MODE_UNSIGNED 0 | |
697 #define FROM_FIXED_SIZE 8 /* in bytes. */ | |
698 | |
699 #elif defined (FROM_TQ) && HAVE_TQ == 1 | |
700 #define FROM_TYPE 4 /* Fixed-point. */ | |
701 #define FROM_MODE_NAME TQ | |
702 #define FROM_MODE_NAME_S tq | |
703 #define FROM_INT_C_TYPE TItype | |
704 #define FROM_SINT_C_TYPE TItype | |
705 #define FROM_UINT_C_TYPE UTItype | |
706 #define FROM_MODE_UNSIGNED 0 | |
707 #define FROM_FIXED_SIZE 16 /* in bytes. */ | |
708 | |
709 #elif defined (FROM_UQQ) && HAVE_UQQ == 1 | |
710 #define FROM_TYPE 4 /* Fixed-point. */ | |
711 #define FROM_MODE_NAME UQQ | |
712 #define FROM_MODE_NAME_S uqq | |
713 #define FROM_INT_C_TYPE UQItype | |
714 #define FROM_SINT_C_TYPE QItype | |
715 #define FROM_UINT_C_TYPE UQItype | |
716 #define FROM_MODE_UNSIGNED 1 | |
717 #define FROM_FIXED_SIZE 1 /* in bytes. */ | |
718 | |
719 #elif defined (FROM_UHQ) && HAVE_UHQ == 1 | |
720 #define FROM_TYPE 4 /* Fixed-point. */ | |
721 #define FROM_MODE_NAME UHQ | |
722 #define FROM_MODE_NAME_S uhq | |
723 #define FROM_INT_C_TYPE UHItype | |
724 #define FROM_SINT_C_TYPE HItype | |
725 #define FROM_UINT_C_TYPE UHItype | |
726 #define FROM_MODE_UNSIGNED 1 | |
727 #define FROM_FIXED_SIZE 2 /* in bytes. */ | |
728 | |
729 #elif defined (FROM_USQ) && HAVE_USQ == 1 | |
730 #define FROM_TYPE 4 /* Fixed-point. */ | |
731 #define FROM_MODE_NAME USQ | |
732 #define FROM_MODE_NAME_S usq | |
733 #define FROM_INT_C_TYPE USItype | |
734 #define FROM_SINT_C_TYPE SItype | |
735 #define FROM_UINT_C_TYPE USItype | |
736 #define FROM_MODE_UNSIGNED 1 | |
737 #define FROM_FIXED_SIZE 4 /* in bytes. */ | |
738 | |
739 #elif defined (FROM_UDQ) && HAVE_UDQ == 1 | |
740 #define FROM_TYPE 4 /* Fixed-point. */ | |
741 #define FROM_MODE_NAME UDQ | |
742 #define FROM_MODE_NAME_S udq | |
743 #define FROM_INT_C_TYPE UDItype | |
744 #define FROM_SINT_C_TYPE DItype | |
745 #define FROM_UINT_C_TYPE UDItype | |
746 #define FROM_MODE_UNSIGNED 1 | |
747 #define FROM_FIXED_SIZE 8 /* in bytes. */ | |
748 | |
749 #elif defined (FROM_UTQ) && HAVE_UTQ == 1 | |
750 #define FROM_TYPE 4 /* Fixed-point. */ | |
751 #define FROM_MODE_NAME UTQ | |
752 #define FROM_MODE_NAME_S utq | |
753 #define FROM_INT_C_TYPE UTItype | |
754 #define FROM_SINT_C_TYPE TItype | |
755 #define FROM_UINT_C_TYPE UTItype | |
756 #define FROM_MODE_UNSIGNED 1 | |
757 #define FROM_FIXED_SIZE 16 /* in bytes. */ | |
758 | |
759 #elif defined (FROM_HA) && HAVE_HA == 1 | |
760 #define FROM_TYPE 4 /* Fixed-point. */ | |
761 #define FROM_MODE_NAME HA | |
762 #define FROM_MODE_NAME_S ha | |
763 #define FROM_INT_C_TYPE HItype | |
764 #define FROM_SINT_C_TYPE HItype | |
765 #define FROM_UINT_C_TYPE UHItype | |
766 #define FROM_MODE_UNSIGNED 0 | |
767 #define FROM_FIXED_SIZE 2 /* in bytes. */ | |
768 | |
769 #elif defined (FROM_SA) && HAVE_SA == 1 | |
770 #define FROM_TYPE 4 /* Fixed-point. */ | |
771 #define FROM_MODE_NAME SA | |
772 #define FROM_MODE_NAME_S sa | |
773 #define FROM_INT_C_TYPE SItype | |
774 #define FROM_SINT_C_TYPE SItype | |
775 #define FROM_UINT_C_TYPE USItype | |
776 #define FROM_MODE_UNSIGNED 0 | |
777 #define FROM_FIXED_SIZE 4 /* in bytes. */ | |
778 | |
779 #elif defined (FROM_DA) && HAVE_DA == 1 | |
780 #define FROM_TYPE 4 /* Fixed-point. */ | |
781 #define FROM_MODE_NAME DA | |
782 #define FROM_MODE_NAME_S da | |
783 #define FROM_INT_C_TYPE DItype | |
784 #define FROM_SINT_C_TYPE DItype | |
785 #define FROM_UINT_C_TYPE UDItype | |
786 #define FROM_MODE_UNSIGNED 0 | |
787 #define FROM_FIXED_SIZE 8 /* in bytes. */ | |
788 | |
789 #elif defined (FROM_TA) && HAVE_TA == 1 | |
790 #define FROM_TYPE 4 /* Fixed-point. */ | |
791 #define FROM_MODE_NAME TA | |
792 #define FROM_MODE_NAME_S ta | |
793 #define FROM_INT_C_TYPE TItype | |
794 #define FROM_SINT_C_TYPE TItype | |
795 #define FROM_UINT_C_TYPE UTItype | |
796 #define FROM_MODE_UNSIGNED 0 | |
797 #define FROM_FIXED_SIZE 16 /* in bytes. */ | |
798 | |
799 #elif defined (FROM_UHA) && HAVE_UHA == 1 | |
800 #define FROM_TYPE 4 /* Fixed-point. */ | |
801 #define FROM_MODE_NAME UHA | |
802 #define FROM_MODE_NAME_S uha | |
803 #define FROM_INT_C_TYPE UHItype | |
804 #define FROM_SINT_C_TYPE HItype | |
805 #define FROM_UINT_C_TYPE UHItype | |
806 #define FROM_MODE_UNSIGNED 1 | |
807 #define FROM_FIXED_SIZE 2 /* in bytes. */ | |
808 | |
809 #elif defined (FROM_USA) && HAVE_USA == 1 | |
810 #define FROM_TYPE 4 /* Fixed-point. */ | |
811 #define FROM_MODE_NAME USA | |
812 #define FROM_MODE_NAME_S usa | |
813 #define FROM_INT_C_TYPE USItype | |
814 #define FROM_SINT_C_TYPE SItype | |
815 #define FROM_UINT_C_TYPE USItype | |
816 #define FROM_MODE_UNSIGNED 1 | |
817 #define FROM_FIXED_SIZE 4 /* in bytes. */ | |
818 | |
819 #elif defined (FROM_UDA) && HAVE_UDA == 1 | |
820 #define FROM_TYPE 4 /* Fixed-point. */ | |
821 #define FROM_MODE_NAME UDA | |
822 #define FROM_MODE_NAME_S uda | |
823 #define FROM_INT_C_TYPE UDItype | |
824 #define FROM_SINT_C_TYPE DItype | |
825 #define FROM_UINT_C_TYPE UDItype | |
826 #define FROM_MODE_UNSIGNED 1 | |
827 #define FROM_FIXED_SIZE 8 /* in bytes. */ | |
828 | |
829 #elif defined (FROM_UTA) && HAVE_UTA == 1 | |
830 #define FROM_TYPE 4 /* Fixed-point. */ | |
831 #define FROM_MODE_NAME UTA | |
832 #define FROM_MODE_NAME_S uta | |
833 #define FROM_INT_C_TYPE UTItype | |
834 #define FROM_SINT_C_TYPE TItype | |
835 #define FROM_UINT_C_TYPE UTItype | |
836 #define FROM_MODE_UNSIGNED 1 | |
837 #define FROM_FIXED_SIZE 16 /* in bytes. */ | |
838 | |
839 #endif | |
840 | |
841 #if defined (TO_QI) && HAVE_QI == 1 && !defined (FROM_QI) | |
842 #define TO_TYPE 1 /* Signed integer. */ | |
843 #define TO_INT_C_TYPE QItype | |
844 #define TO_SINT_C_TYPE QItype | |
845 #define TO_UINT_C_TYPE UQItype | |
846 #define TO_MODE_NAME_S qi | |
847 | |
848 #elif defined (TO_HI) && HAVE_HI == 1 && !defined (FROM_HI) | |
849 #define TO_TYPE 1 /* Signed integer. */ | |
850 #define TO_INT_C_TYPE HItype | |
851 #define TO_SINT_C_TYPE HItype | |
852 #define TO_UINT_C_TYPE UHItype | |
853 #define TO_MODE_NAME_S hi | |
854 | |
855 #elif defined (TO_SI) && HAVE_SI == 1 && !defined (FROM_SI) | |
856 #define TO_TYPE 1 /* Signed integer. */ | |
857 #define TO_INT_C_TYPE SItype | |
858 #define TO_SINT_C_TYPE SItype | |
859 #define TO_UINT_C_TYPE USItype | |
860 #define TO_MODE_NAME_S si | |
861 | |
862 #elif defined (TO_DI) && HAVE_DI == 1 && !defined (FROM_DI) | |
863 #define TO_TYPE 1 /* Signed integer. */ | |
864 #define TO_INT_C_TYPE DItype | |
865 #define TO_SINT_C_TYPE DItype | |
866 #define TO_UINT_C_TYPE UDItype | |
867 #define TO_MODE_NAME_S di | |
868 | |
869 #elif defined (TO_TI) && HAVE_TI == 1 && !defined (FROM_TI) | |
870 #define TO_TYPE 1 /* Signed integer. */ | |
871 #define TO_INT_C_TYPE TItype | |
872 #define TO_SINT_C_TYPE TItype | |
873 #define TO_UINT_C_TYPE UTItype | |
874 #define TO_MODE_NAME_S ti | |
875 | |
876 #elif defined (TO_UQI) && HAVE_UQI == 1 && !defined (FROM_UQI) | |
877 #define TO_TYPE 2 /* Unsigned integer. */ | |
878 #define TO_INT_C_TYPE UQItype | |
879 #define TO_SINT_C_TYPE QItype | |
880 #define TO_UINT_C_TYPE UQItype | |
881 #define TO_MODE_NAME_S qi | |
882 | |
883 #elif defined (TO_UHI) && HAVE_UHI == 1 && !defined (FROM_UHI) | |
884 #define TO_TYPE 2 /* Unsigned integer. */ | |
885 #define TO_INT_C_TYPE UHItype | |
886 #define TO_SINT_C_TYPE HItype | |
887 #define TO_UINT_C_TYPE UHItype | |
888 #define TO_MODE_NAME_S hi | |
889 | |
890 #elif defined (TO_USI) && HAVE_USI == 1 && !defined (FROM_USI) | |
891 #define TO_TYPE 2 /* Unsigned integer. */ | |
892 #define TO_INT_C_TYPE USItype | |
893 #define TO_SINT_C_TYPE SItype | |
894 #define TO_UINT_C_TYPE USItype | |
895 #define TO_MODE_NAME_S si | |
896 | |
897 #elif defined (TO_UDI) && HAVE_UDI == 1 && !defined (FROM_UDI) | |
898 #define TO_TYPE 2 /* Unsigned integer. */ | |
899 #define TO_INT_C_TYPE UDItype | |
900 #define TO_SINT_C_TYPE DItype | |
901 #define TO_UINT_C_TYPE UDItype | |
902 #define TO_MODE_NAME_S di | |
903 | |
904 #elif defined (TO_UTI) && HAVE_UTI == 1 && !defined (FROM_UTI) | |
905 #define TO_TYPE 2 /* Unsigned integer. */ | |
906 #define TO_INT_C_TYPE UTItype | |
907 #define TO_SINT_C_TYPE TItype | |
908 #define TO_UINT_C_TYPE UTItype | |
909 #define TO_MODE_NAME_S ti | |
910 | |
911 #elif defined (TO_SF) && HAVE_SF == 1 && !defined (FROM_SF) | |
912 #define TO_TYPE 3 /* Floating-point. */ | |
913 #define TO_FLOAT_C_TYPE SFtype | |
914 #define TO_MODE_NAME_S sf | |
915 | |
916 #elif defined (TO_DF) && HAVE_DF == 1 && !defined (FROM_DF) | |
917 #define TO_TYPE 3 /* Floating-point. */ | |
918 #define TO_FLOAT_C_TYPE DFtype | |
919 #define TO_MODE_NAME_S df | |
920 | |
921 #elif defined (TO_QQ) && HAVE_QQ == 1 && !defined (FROM_QQ) | |
922 #define TO_TYPE 4 /* Fixed-point. */ | |
923 #define TO_MODE_NAME QQ | |
924 #define TO_MODE_NAME_S qq | |
925 #define TO_INT_C_TYPE QItype | |
926 #define TO_SINT_C_TYPE QItype | |
927 #define TO_UINT_C_TYPE UQItype | |
928 #define TO_MODE_UNSIGNED 0 | |
929 #define TO_FIXED_SIZE 1 /* in bytes. */ | |
930 | |
931 #elif defined (TO_HQ) && HAVE_HQ == 1 && !defined (FROM_HQ) | |
932 #define TO_TYPE 4 /* Fixed-point. */ | |
933 #define TO_MODE_NAME HQ | |
934 #define TO_MODE_NAME_S hq | |
935 #define TO_INT_C_TYPE HItype | |
936 #define TO_SINT_C_TYPE HItype | |
937 #define TO_UINT_C_TYPE UHItype | |
938 #define TO_MODE_UNSIGNED 0 | |
939 #define TO_FIXED_SIZE 2 /* in bytes. */ | |
940 | |
941 #elif defined (TO_SQ) && HAVE_SQ == 1 && !defined (FROM_SQ) | |
942 #define TO_TYPE 4 /* Fixed-point. */ | |
943 #define TO_MODE_NAME SQ | |
944 #define TO_MODE_NAME_S sq | |
945 #define TO_INT_C_TYPE SItype | |
946 #define TO_SINT_C_TYPE SItype | |
947 #define TO_UINT_C_TYPE USItype | |
948 #define TO_MODE_UNSIGNED 0 | |
949 #define TO_FIXED_SIZE 4 /* in bytes. */ | |
950 | |
951 #elif defined (TO_DQ) && HAVE_DQ == 1 && !defined (FROM_DQ) | |
952 #define TO_TYPE 4 /* Fixed-point. */ | |
953 #define TO_MODE_NAME DQ | |
954 #define TO_MODE_NAME_S dq | |
955 #define TO_INT_C_TYPE DItype | |
956 #define TO_SINT_C_TYPE DItype | |
957 #define TO_UINT_C_TYPE UDItype | |
958 #define TO_MODE_UNSIGNED 0 | |
959 #define TO_FIXED_SIZE 8 /* in bytes. */ | |
960 | |
961 #elif defined (TO_TQ) && HAVE_TQ == 1 && !defined (FROM_TQ) | |
962 #define TO_TYPE 4 /* Fixed-point. */ | |
963 #define TO_MODE_NAME TQ | |
964 #define TO_MODE_NAME_S tq | |
965 #define TO_INT_C_TYPE TItype | |
966 #define TO_SINT_C_TYPE TItype | |
967 #define TO_UINT_C_TYPE UTItype | |
968 #define TO_MODE_UNSIGNED 0 | |
969 #define TO_FIXED_SIZE 16 /* in bytes. */ | |
970 | |
971 #elif defined (TO_UQQ) && HAVE_UQQ == 1 && !defined (FROM_UQQ) | |
972 #define TO_TYPE 4 /* Fixed-point. */ | |
973 #define TO_MODE_NAME UQQ | |
974 #define TO_MODE_NAME_S uqq | |
975 #define TO_INT_C_TYPE UQItype | |
976 #define TO_SINT_C_TYPE QItype | |
977 #define TO_UINT_C_TYPE UQItype | |
978 #define TO_MODE_UNSIGNED 1 | |
979 #define TO_FIXED_SIZE 1 /* in bytes. */ | |
980 | |
981 #elif defined (TO_UHQ) && HAVE_UHQ == 1 && !defined (FROM_UHQ) | |
982 #define TO_TYPE 4 /* Fixed-point. */ | |
983 #define TO_MODE_NAME UHQ | |
984 #define TO_MODE_NAME_S uhq | |
985 #define TO_INT_C_TYPE UHItype | |
986 #define TO_SINT_C_TYPE HItype | |
987 #define TO_UINT_C_TYPE UHItype | |
988 #define TO_MODE_UNSIGNED 1 | |
989 #define TO_FIXED_SIZE 2 /* in bytes. */ | |
990 | |
991 #elif defined (TO_USQ) && HAVE_USQ == 1 && !defined (FROM_USQ) | |
992 #define TO_TYPE 4 /* Fixed-point. */ | |
993 #define TO_MODE_NAME USQ | |
994 #define TO_MODE_NAME_S usq | |
995 #define TO_INT_C_TYPE USItype | |
996 #define TO_SINT_C_TYPE SItype | |
997 #define TO_UINT_C_TYPE USItype | |
998 #define TO_MODE_UNSIGNED 1 | |
999 #define TO_FIXED_SIZE 4 /* in bytes. */ | |
1000 | |
1001 #elif defined (TO_UDQ) && HAVE_UDQ == 1 && !defined (FROM_UDQ) | |
1002 #define TO_TYPE 4 /* Fixed-point. */ | |
1003 #define TO_MODE_NAME UDQ | |
1004 #define TO_MODE_NAME_S udq | |
1005 #define TO_INT_C_TYPE UDItype | |
1006 #define TO_SINT_C_TYPE DItype | |
1007 #define TO_UINT_C_TYPE UDItype | |
1008 #define TO_MODE_UNSIGNED 1 | |
1009 #define TO_FIXED_SIZE 8 /* in bytes. */ | |
1010 | |
1011 #elif defined (TO_UTQ) && HAVE_UTQ == 1 && !defined (FROM_UTQ) | |
1012 #define TO_TYPE 4 /* Fixed-point. */ | |
1013 #define TO_MODE_NAME UTQ | |
1014 #define TO_MODE_NAME_S utq | |
1015 #define TO_INT_C_TYPE UTItype | |
1016 #define TO_SINT_C_TYPE TItype | |
1017 #define TO_UINT_C_TYPE UTItype | |
1018 #define TO_MODE_UNSIGNED 1 | |
1019 #define TO_FIXED_SIZE 16 /* in bytes. */ | |
1020 | |
1021 #elif defined (TO_HA) && HAVE_HA == 1 && !defined (FROM_HA) | |
1022 #define TO_TYPE 4 /* Fixed-point. */ | |
1023 #define TO_MODE_NAME HA | |
1024 #define TO_MODE_NAME_S ha | |
1025 #define TO_INT_C_TYPE HItype | |
1026 #define TO_SINT_C_TYPE HItype | |
1027 #define TO_UINT_C_TYPE UHItype | |
1028 #define TO_MODE_UNSIGNED 0 | |
1029 #define TO_FIXED_SIZE 2 /* in bytes. */ | |
1030 | |
1031 #elif defined (TO_SA) && HAVE_SA == 1 && !defined (FROM_SA) | |
1032 #define TO_TYPE 4 /* Fixed-point. */ | |
1033 #define TO_MODE_NAME SA | |
1034 #define TO_MODE_NAME_S sa | |
1035 #define TO_INT_C_TYPE SItype | |
1036 #define TO_SINT_C_TYPE SItype | |
1037 #define TO_UINT_C_TYPE USItype | |
1038 #define TO_MODE_UNSIGNED 0 | |
1039 #define TO_FIXED_SIZE 4 /* in bytes. */ | |
1040 | |
1041 #elif defined (TO_DA) && HAVE_DA == 1 && !defined (FROM_DA) | |
1042 #define TO_TYPE 4 /* Fixed-point. */ | |
1043 #define TO_MODE_NAME DA | |
1044 #define TO_MODE_NAME_S da | |
1045 #define TO_INT_C_TYPE DItype | |
1046 #define TO_SINT_C_TYPE DItype | |
1047 #define TO_UINT_C_TYPE UDItype | |
1048 #define TO_MODE_UNSIGNED 0 | |
1049 #define TO_FIXED_SIZE 8 /* in bytes. */ | |
1050 | |
1051 #elif defined (TO_TA) && HAVE_TA == 1 && !defined (FROM_TA) | |
1052 #define TO_TYPE 4 /* Fixed-point. */ | |
1053 #define TO_MODE_NAME TA | |
1054 #define TO_MODE_NAME_S ta | |
1055 #define TO_INT_C_TYPE TItype | |
1056 #define TO_SINT_C_TYPE TItype | |
1057 #define TO_UINT_C_TYPE UTItype | |
1058 #define TO_MODE_UNSIGNED 0 | |
1059 #define TO_FIXED_SIZE 16 /* in bytes. */ | |
1060 | |
1061 #elif defined (TO_UHA) && HAVE_UHA == 1 && !defined (FROM_UHA) | |
1062 #define TO_TYPE 4 /* Fixed-point. */ | |
1063 #define TO_MODE_NAME UHA | |
1064 #define TO_MODE_NAME_S uha | |
1065 #define TO_INT_C_TYPE UHItype | |
1066 #define TO_SINT_C_TYPE HItype | |
1067 #define TO_UINT_C_TYPE UHItype | |
1068 #define TO_MODE_UNSIGNED 1 | |
1069 #define TO_FIXED_SIZE 2 /* in bytes. */ | |
1070 | |
1071 #elif defined (TO_USA) && HAVE_USA == 1 && !defined (FROM_USA) | |
1072 #define TO_TYPE 4 /* Fixed-point. */ | |
1073 #define TO_MODE_NAME USA | |
1074 #define TO_MODE_NAME_S usa | |
1075 #define TO_INT_C_TYPE USItype | |
1076 #define TO_SINT_C_TYPE SItype | |
1077 #define TO_UINT_C_TYPE USItype | |
1078 #define TO_MODE_UNSIGNED 1 | |
1079 #define TO_FIXED_SIZE 4 /* in bytes. */ | |
1080 | |
1081 #elif defined (TO_UDA) && HAVE_UDA == 1 && !defined (FROM_UDA) | |
1082 #define TO_TYPE 4 /* Fixed-point. */ | |
1083 #define TO_MODE_NAME UDA | |
1084 #define TO_MODE_NAME_S uda | |
1085 #define TO_INT_C_TYPE UDItype | |
1086 #define TO_SINT_C_TYPE DItype | |
1087 #define TO_UINT_C_TYPE UDItype | |
1088 #define TO_MODE_UNSIGNED 1 | |
1089 #define TO_FIXED_SIZE 8 /* in bytes. */ | |
1090 | |
1091 #elif defined (TO_UTA) && HAVE_UTA == 1 && !defined (FROM_UTA) | |
1092 #define TO_TYPE 4 /* Fixed-point. */ | |
1093 #define TO_MODE_NAME UTA | |
1094 #define TO_MODE_NAME_S uta | |
1095 #define TO_INT_C_TYPE UTItype | |
1096 #define TO_SINT_C_TYPE TItype | |
1097 #define TO_UINT_C_TYPE UTItype | |
1098 #define TO_MODE_UNSIGNED 1 | |
1099 #define TO_FIXED_SIZE 16 /* in bytes. */ | |
1100 | |
1101 #endif | |
1102 | |
1103 #if defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) | |
1104 | |
1105 #if FROM_TYPE == 1 /* Signed integer. */ | |
1106 #define FROM_INT_WIDTH (FROM_INT_SIZE * BITS_PER_UNIT) | |
1107 #endif | |
1108 | |
1109 #if FROM_TYPE == 2 /* Unsigned integer. */ | |
1110 #define FROM_INT_WIDTH (FROM_INT_SIZE * BITS_PER_UNIT) | |
1111 #endif | |
1112 | |
1113 #if FROM_TYPE == 4 /* Fixed-point. */ | |
1114 #define FROM_FIXED_C_TYPE FIXED_C_TYPE2(FROM_MODE_NAME) | |
1115 #define FROM_FBITS FBITS2(FROM_MODE_NAME) | |
1116 #define FROM_FIXED_WIDTH (FROM_FIXED_SIZE * BITS_PER_UNIT) | |
1117 #define FROM_FBITS FBITS2(FROM_MODE_NAME) | |
1118 #define FROM_IBITS IBITS2(FROM_MODE_NAME) | |
1119 #define FROM_I_F_BITS (FROM_FBITS + FROM_IBITS) | |
1120 | |
1121 #if FROM_MODE_UNSIGNED == 0 /* Signed types. */ | |
1122 #define FROM_PADDING_BITS (FROM_FIXED_WIDTH - 1 - FROM_I_F_BITS) | |
1123 #define FROM_NONPADDING_BITS (1 + FROM_I_F_BITS) | |
1124 #else /* Unsigned types. */ | |
1125 #define FROM_PADDING_BITS (FROM_FIXED_WIDTH - FROM_I_F_BITS) | |
1126 #define FROM_NONPADDING_BITS (FROM_I_F_BITS) | |
1127 #endif | |
1128 #define FROM_HAVE_PADDING_BITS (FROM_PADDING_BITS > 0) | |
1129 #endif /* FROM_TYPE == 4 */ | |
1130 | |
1131 #if TO_TYPE == 4 /* Fixed-point. */ | |
1132 #define TO_FIXED_C_TYPE FIXED_C_TYPE2(TO_MODE_NAME) | |
1133 #define TO_FBITS FBITS2(TO_MODE_NAME) | |
1134 #define TO_FIXED_WIDTH (TO_FIXED_SIZE * BITS_PER_UNIT) | |
1135 #define TO_FBITS FBITS2(TO_MODE_NAME) | |
1136 #define TO_IBITS IBITS2(TO_MODE_NAME) | |
1137 #define TO_I_F_BITS (TO_FBITS + TO_IBITS) | |
1138 | |
1139 #if TO_MODE_UNSIGNED == 0 /* Signed types. */ | |
1140 #define TO_PADDING_BITS (TO_FIXED_WIDTH - 1 - TO_I_F_BITS) | |
1141 #define TO_NONPADDING_BITS (1 + TO_I_F_BITS) | |
1142 #else /* Unsigned types. */ | |
1143 #define TO_PADDING_BITS (TO_FIXED_WIDTH - TO_I_F_BITS) | |
1144 #define TO_NONPADDING_BITS (TO_I_F_BITS) | |
1145 #endif | |
1146 #define TO_HAVE_PADDING_BITS (TO_PADDING_BITS > 0) | |
1147 #endif /* TO_TYPE == 4 */ | |
1148 | |
1149 #define FIXED_CONVERT_OP(OP,FROM,TO) OP ## FROM ## TO | |
1150 #define FIXED_CONVERT_OP2(OP,FROM,TO) OP ## FROM ## TO ## 2 | |
1151 #define FRACT_TEMP(N1,N2) FIXED_CONVERT_OP(__fract,N1,N2) | |
1152 #define FRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(__fract,N1,N2) | |
1153 #define SATFRACT_TEMP(N1,N2) FIXED_CONVERT_OP(__satfract,N1,N2) | |
1154 #define SATFRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(__satfract,N1,N2) | |
1155 #define FRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(__fractuns,N1,N2) | |
1156 #define SATFRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(__satfractuns,N1,N2) | |
1157 | |
1158 /* Define conversions from fixed-point to fixed-point. */ | |
1159 #if FROM_TYPE == 4 && TO_TYPE == 4 | |
1160 | |
1161 #if FROM_FIXED_SIZE > TO_FIXED_SIZE | |
1162 #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE | |
1163 #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE | |
1164 #define BIG_WIDTH FROM_FIXED_WIDTH | |
1165 #else | |
1166 #define BIG_SINT_C_TYPE TO_SINT_C_TYPE | |
1167 #define BIG_UINT_C_TYPE TO_UINT_C_TYPE | |
1168 #define BIG_WIDTH TO_FIXED_WIDTH | |
1169 #endif | |
1170 | |
1171 /* Check if FROM* and TO* are in the same machine class. */ | |
1172 #if ((FROM_MODE_UNSIGNED == TO_MODE_UNSIGNED) \ | |
1173 && ((FROM_IBITS == 0) == (TO_IBITS == 0))) | |
1174 /* Same modes: append '2' to conversion function names */ | |
1175 #define FRACT FRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1176 #define SATFRACT SATFRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1177 #else | |
1178 /* Different modes: don't append '2' to conversion function names */ | |
1179 #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1180 #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1181 #endif | |
1182 | |
1183 extern TO_FIXED_C_TYPE FRACT (FROM_FIXED_C_TYPE); | |
1184 extern TO_FIXED_C_TYPE SATFRACT (FROM_FIXED_C_TYPE); | |
1185 #endif /* FROM_TYPE == 4 && TO_TYPE == 4 */ | |
1186 | |
1187 /* Define conversions from fixed-point to signed integer. */ | |
1188 #if FROM_TYPE == 4 && TO_TYPE == 1 | |
1189 #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1190 extern TO_INT_C_TYPE FRACT (FROM_FIXED_C_TYPE); | |
1191 #endif /* FROM_TYPE == 4 && TO_TYPE == 1 */ | |
1192 | |
1193 /* Define conversions from fixed-point to unsigned integer. */ | |
1194 #if FROM_TYPE == 4 && TO_TYPE == 2 | |
1195 #define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1196 extern TO_INT_C_TYPE FRACTUNS (FROM_FIXED_C_TYPE); | |
1197 #endif /* FROM_TYPE == 4 && TO_TYPE == 2 */ | |
1198 | |
1199 /* Define conversions from fixed-point to floating-point. */ | |
1200 #if FROM_TYPE == 4 && TO_TYPE == 3 | |
1201 #define BASE1(NUM) 0x1.0p ## NUM | |
1202 #define BASE2(NUM) BASE1(NUM) | |
1203 #define BASE BASE2(FROM_FBITS) | |
1204 #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1205 extern TO_FLOAT_C_TYPE FRACT (FROM_FIXED_C_TYPE); | |
1206 #endif /* FROM_TYPE == 4 && TO_TYPE == 3 */ | |
1207 | |
1208 /* Define conversions from signed integer to fixed-point. */ | |
1209 #if FROM_TYPE == 1 && TO_TYPE == 4 | |
1210 | |
1211 #if FROM_INT_SIZE > TO_FIXED_SIZE | |
1212 #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE | |
1213 #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE | |
1214 #define BIG_WIDTH FROM_INT_WIDTH | |
1215 #else | |
1216 #define BIG_SINT_C_TYPE TO_SINT_C_TYPE | |
1217 #define BIG_UINT_C_TYPE TO_UINT_C_TYPE | |
1218 #define BIG_WIDTH TO_FIXED_WIDTH | |
1219 #endif | |
1220 | |
1221 #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1222 #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1223 extern TO_FIXED_C_TYPE FRACT (FROM_INT_C_TYPE); | |
1224 extern TO_FIXED_C_TYPE SATFRACT (FROM_INT_C_TYPE); | |
1225 #endif /* FROM_TYPE == 1 && TO_TYPE == 4 */ | |
1226 | |
1227 /* Define conversions from unsigned integer to fixed-point. */ | |
1228 #if FROM_TYPE == 2 && TO_TYPE == 4 | |
1229 | |
1230 #if FROM_INT_SIZE > TO_FIXED_SIZE | |
1231 #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE | |
1232 #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE | |
1233 #define BIG_WIDTH FROM_INT_WIDTH | |
1234 #else | |
1235 #define BIG_SINT_C_TYPE TO_SINT_C_TYPE | |
1236 #define BIG_UINT_C_TYPE TO_UINT_C_TYPE | |
1237 #define BIG_WIDTH TO_FIXED_WIDTH | |
1238 #endif | |
1239 | |
1240 #define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1241 #define SATFRACTUNS SATFRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1242 extern TO_FIXED_C_TYPE FRACTUNS (FROM_INT_C_TYPE); | |
1243 extern TO_FIXED_C_TYPE SATFRACTUNS (FROM_INT_C_TYPE); | |
1244 #endif /* FROM_TYPE == 2 && TO_TYPE == 4 */ | |
1245 | |
1246 /* Define conversions from floating-point to fixed-point. */ | |
1247 #if FROM_TYPE == 3 && TO_TYPE == 4 | |
1248 | |
1249 #define BASE1(NUM) (0x1.0p ## NUM) | |
1250 #define BASE2(NUM) BASE1(NUM) | |
1251 #define BASE BASE2(TO_FBITS) | |
1252 | |
1253 #define FIXED_MAX1(NUM1,NUM2) (0x1.0p ## NUM1 - 0x1.0p- ## NUM2) | |
1254 #define FIXED_MAX2(NUM1,NUM2) FIXED_MAX1(NUM1,NUM2) | |
1255 #define FIXED_MAX FIXED_MAX2(TO_IBITS,TO_FBITS) | |
1256 | |
1257 #define FIXED_MIN1(NUM) (-0x1.0p ## NUM) | |
1258 #define FIXED_MIN2(NUM) FIXED_MIN1(NUM) | |
1259 #if TO_MODE_UNSIGNED == 0 | |
1260 #define FIXED_MIN FIXED_MIN2(TO_IBITS) | |
1261 #else | |
1262 #define FIXED_MIN 0.0 | |
1263 #endif | |
1264 | |
1265 #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1266 #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) | |
1267 extern TO_FIXED_C_TYPE FRACT (FROM_FLOAT_C_TYPE); | |
1268 extern TO_FIXED_C_TYPE SATFRACT (FROM_FLOAT_C_TYPE); | |
1269 #endif /* FROM_TYPE == 3 && TO_TYPE == 4 */ | |
1270 | |
1271 #endif /* defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) */ | |
1272 | |
1273 #endif /* _FIXED_BIT_H */ |