1 /* Check conversions involving fixed-point.
2  * Break up use-site into into manageable parts so that even embedded
3  * targets with restrictive resources can run them.  */
4 
5 /* Fixed-point to fixed-point.  */
6 #define CONV(TYPE1,POSTFIX1,TYPE2,POSTFIX2) \
7   { \
8     TYPE1 a = 0.5 ## POSTFIX1; \
9     TYPE2 b = a; \
10     if (b != 0.5 ## POSTFIX2) \
11       abort(); \
12   }
13 
14 /* TYPE1 with VALUE1 to TYPE2 with VALUE2.  */
15 #define CONV2(TYPE1,VALUE1,TYPE2,VALUE2) \
16   { \
17     TYPE1 a = VALUE1; \
18     TYPE2 b = a; \
19     if (b != VALUE2) \
20       abort(); \
21   }
22 
23 /* Fixed-point to integer, and integer to fixed-point.  */
24 #define CONV_INT(TYPE1,POSTFIX1,TYPE2) \
25   { \
26     TYPE1 a = 0.5 ## POSTFIX1; \
27     TYPE2 b = a; \
28     TYPE2 c = 0; \
29     TYPE1 d = c; \
30     if (b != 0) \
31       abort(); \
32     if (d != 0.0 ## POSTFIX1) \
33       abort(); \
34   }
35 
36 /* Signed fixed-point to integer.  */
37 #define CONV_INT2(TYPE1,POSTFIX1,TYPE2) \
38   { \
39     TYPE1 a = -0.5 ## POSTFIX1; \
40     TYPE2 b = a; \
41     if (b != 0) \
42       abort(); \
43     a = -0.0 ## POSTFIX1; \
44     b = a; \
45     if (b != 0) \
46       abort(); \
47     a = +0.0 ## POSTFIX1; \
48     b = a; \
49     if (b != 0) \
50       abort(); \
51     a = +0.1 ## POSTFIX1; \
52     b = a; \
53     if (b != 0) \
54       abort(); \
55     a = -0.1 ## POSTFIX1; \
56     b = a; \
57     if (b != 0) \
58       abort(); \
59   }
60 
61 /* Signed fixed-point to signed integer.  */
62 #define CONV_INT3(TYPE1,POSTFIX1,TYPE2) \
63   { \
64     TYPE1 a = -0.5 ## POSTFIX1 - 0.5 ## POSTFIX1; \
65     TYPE2 b = a; \
66     if (b != -1) \
67       abort(); \
68   }
69 
70 /* Fixed-point to floating-point, and floating-point to fixed-point.  */
71 #define CONV_FLOAT(TYPE1,POSTFIX1,TYPE2) \
72   { \
73     TYPE1 a = 0.5 ## POSTFIX1; \
74     TYPE2 b = a; \
75     TYPE2 c = 0.25; \
76     TYPE1 d = c; \
77     if (b != 0.5) \
78       abort(); \
79     if (d != 0.25 ## POSTFIX1) \
80       abort(); \
81   }
82 
83 /* Accum to integer, and integer to accum.  */
84 #define CONV_ACCUM_INT(TYPE1,POSTFIX1,TYPE2) \
85   { \
86     TYPE1 a = 99.12345 ## POSTFIX1; \
87     TYPE2 b = a; \
88     TYPE2 c = 123; \
89     TYPE1 d = c; \
90     if (b != 99) \
91       abort(); \
92     if (d != 123.0 ## POSTFIX1) \
93       abort(); \
94   }
95 
96 #define ALL_CONV(TYPE,POSTFIX) \
97   CONV(TYPE, POSTFIX, short _Fract, hr) \
98   CONV(TYPE, POSTFIX, _Fract, r) \
99   CONV(TYPE, POSTFIX, long _Fract, lr) \
100   CONV(TYPE, POSTFIX, long long _Fract, llr) \
101   CONV(TYPE, POSTFIX, unsigned short _Fract, uhr) \
102   CONV(TYPE, POSTFIX, unsigned _Fract, ur) \
103   CONV(TYPE, POSTFIX, unsigned long _Fract, ulr) \
104   CONV(TYPE, POSTFIX, unsigned long long _Fract, ullr) \
105   CONV(TYPE, POSTFIX, short _Accum, hk) \
106   CONV(TYPE, POSTFIX, _Accum, k) \
107   CONV(TYPE, POSTFIX, long _Accum, lk) \
108   CONV(TYPE, POSTFIX, long long _Accum, llk) \
109   CONV(TYPE, POSTFIX, unsigned short _Accum, uhk) \
110   CONV(TYPE, POSTFIX, unsigned _Accum, uk) \
111   CONV(TYPE, POSTFIX, unsigned long _Accum, ulk) \
112   CONV(TYPE, POSTFIX, unsigned long long _Accum, ullk) \
113   CONV(_Sat TYPE, POSTFIX, short _Fract, hr) \
114   CONV(_Sat TYPE, POSTFIX, _Fract, r) \
115   CONV(_Sat TYPE, POSTFIX, long _Fract, lr) \
116   CONV(_Sat TYPE, POSTFIX, long long _Fract, llr) \
117   CONV(_Sat TYPE, POSTFIX, unsigned short _Fract, uhr) \
118   CONV(_Sat TYPE, POSTFIX, unsigned _Fract, ur) \
119   CONV(_Sat TYPE, POSTFIX, unsigned long _Fract, ulr) \
120   CONV(_Sat TYPE, POSTFIX, unsigned long long _Fract, ullr) \
121   CONV(_Sat TYPE, POSTFIX, short _Accum, hk) \
122   CONV(_Sat TYPE, POSTFIX, _Accum, k) \
123   CONV(_Sat TYPE, POSTFIX, long _Accum, lk) \
124   CONV(_Sat TYPE, POSTFIX, long long _Accum, llk) \
125   CONV(_Sat TYPE, POSTFIX, unsigned short _Accum, uhk) \
126   CONV(_Sat TYPE, POSTFIX, unsigned _Accum, uk) \
127   CONV(_Sat TYPE, POSTFIX, unsigned long _Accum, ulk) \
128   CONV(_Sat TYPE, POSTFIX, unsigned long long _Accum, ullk) \
129   CONV(TYPE, POSTFIX, _Sat short _Fract, hr)                \
130   CONV(TYPE, POSTFIX, _Sat _Fract, r) \
131   CONV(TYPE, POSTFIX, _Sat long _Fract, lr) \
132   CONV(TYPE, POSTFIX, _Sat long long _Fract, llr) \
133   CONV(TYPE, POSTFIX, _Sat unsigned short _Fract, uhr) \
134   CONV(TYPE, POSTFIX, _Sat unsigned _Fract, ur) \
135   CONV(TYPE, POSTFIX, _Sat unsigned long _Fract, ulr) \
136   CONV(TYPE, POSTFIX, _Sat unsigned long long _Fract, ullr) \
137   CONV(TYPE, POSTFIX, _Sat short _Accum, hk) \
138   CONV(TYPE, POSTFIX, _Sat _Accum, k) \
139   CONV(TYPE, POSTFIX, _Sat long _Accum, lk) \
140   CONV(TYPE, POSTFIX, _Sat long long _Accum, llk) \
141   CONV(TYPE, POSTFIX, _Sat unsigned short _Accum, uhk) \
142   CONV(TYPE, POSTFIX, _Sat unsigned _Accum, uk) \
143   CONV(TYPE, POSTFIX, _Sat unsigned long _Accum, ulk) \
144   CONV(TYPE, POSTFIX, _Sat unsigned long long _Accum, ullk) \
145   CONV_INT(TYPE, POSTFIX, signed char)                      \
146   CONV_INT(TYPE, POSTFIX, short) \
147   CONV_INT(TYPE, POSTFIX, int) \
148   CONV_INT(TYPE, POSTFIX, long) \
149   CONV_INT(TYPE, POSTFIX, long long) \
150   CONV_INT(TYPE, POSTFIX, unsigned char) \
151   CONV_INT(TYPE, POSTFIX, unsigned short) \
152   CONV_INT(TYPE, POSTFIX, unsigned int) \
153   CONV_INT(TYPE, POSTFIX, unsigned long) \
154   CONV_INT(TYPE, POSTFIX, unsigned long long) \
155   CONV_INT(_Sat TYPE, POSTFIX, signed char) \
156   CONV_INT(_Sat TYPE, POSTFIX, short) \
157   CONV_INT(_Sat TYPE, POSTFIX, int) \
158   CONV_INT(_Sat TYPE, POSTFIX, long) \
159   CONV_INT(_Sat TYPE, POSTFIX, long long) \
160   CONV_INT(_Sat TYPE, POSTFIX, unsigned char) \
161   CONV_INT(_Sat TYPE, POSTFIX, unsigned short) \
162   CONV_INT(_Sat TYPE, POSTFIX, unsigned int) \
163   CONV_INT(_Sat TYPE, POSTFIX, unsigned long) \
164   CONV_INT(_Sat TYPE, POSTFIX, unsigned long long)
165 
166 #define ALL_CONV_FLOAT(TYPE,POSTFIX) \
167   CONV_FLOAT(TYPE, POSTFIX, float)    \
168   CONV_FLOAT(TYPE, POSTFIX, double) \
169   CONV_FLOAT(_Sat TYPE, POSTFIX, float) \
170   CONV_FLOAT(_Sat TYPE, POSTFIX, double)
171 
172 #define ALL_ACCUM_CONV(TYPE,POSTFIX) \
173   CONV_ACCUM_INT(TYPE, POSTFIX, signed char) \
174   CONV_ACCUM_INT(TYPE, POSTFIX, short) \
175   CONV_ACCUM_INT(TYPE, POSTFIX, int) \
176   CONV_ACCUM_INT(TYPE, POSTFIX, long) \
177   CONV_ACCUM_INT(TYPE, POSTFIX, long long) \
178   CONV_ACCUM_INT(TYPE, POSTFIX, unsigned char) \
179   CONV_ACCUM_INT(TYPE, POSTFIX, unsigned short) \
180   CONV_ACCUM_INT(TYPE, POSTFIX, unsigned int) \
181   CONV_ACCUM_INT(TYPE, POSTFIX, unsigned long) \
182   CONV_ACCUM_INT(TYPE, POSTFIX, unsigned long long) \
183   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, signed char) \
184   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, short) \
185   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, int) \
186   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, long) \
187   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, long long) \
188   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned char) \
189   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned short) \
190   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned int) \
191   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned long) \
192   CONV_ACCUM_INT(_Sat TYPE, POSTFIX, unsigned long long)
193 
194 #define NEG_CONV(TYPE,POSTFIX) \
195   CONV_INT2(TYPE, POSTFIX, signed char) \
196   CONV_INT2(TYPE, POSTFIX, short) \
197   CONV_INT2(TYPE, POSTFIX, int) \
198   CONV_INT2(TYPE, POSTFIX, long) \
199   CONV_INT2(TYPE, POSTFIX, long long) \
200   CONV_INT2(TYPE, POSTFIX, unsigned char) \
201   CONV_INT2(TYPE, POSTFIX, unsigned short) \
202   CONV_INT2(TYPE, POSTFIX, unsigned int) \
203   CONV_INT2(TYPE, POSTFIX, unsigned long) \
204   CONV_INT2(TYPE, POSTFIX, unsigned long long) \
205   CONV_INT3(TYPE, POSTFIX, signed char) \
206   CONV_INT3(TYPE, POSTFIX, short) \
207   CONV_INT3(TYPE, POSTFIX, int) \
208   CONV_INT3(TYPE, POSTFIX, long) \
209   CONV_INT3(TYPE, POSTFIX, long long)
210 
211 /* Signed accum to _Sat unsigned/signed fract.  */
212 #define SAT_CONV1(TYPE, POSTFIX) \
213   CONV2(TYPE, 3.2 ## POSTFIX, _Sat short _Fract, 1.0hr) \
214   CONV2(TYPE, -3.2 ## POSTFIX, _Sat short _Fract, -0.5hr - 0.5hr) \
215   CONV2(TYPE, 3.2 ## POSTFIX, _Sat _Fract, 1.0r) \
216   CONV2(TYPE, -3.2 ## POSTFIX, _Sat _Fract, -0.5r - 0.5r) \
217   CONV2(TYPE, 3.2 ## POSTFIX, _Sat long _Fract, 1.0lr) \
218   CONV2(TYPE, -3.2 ## POSTFIX, _Sat long _Fract, -0.5lr - 0.5lr) \
219   CONV2(TYPE, 3.2 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
220   CONV2(TYPE, -3.2 ## POSTFIX, _Sat long long _Fract, -0.5llr - 0.5llr) \
221   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
222   CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
223   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
224   CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned _Fract, 0.0ur) \
225   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
226   CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
227   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
228   CONV2(TYPE, -3.2 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr) \
229   CONV2(TYPE, 1.0 ## POSTFIX, _Sat short _Fract, 1.0hr) \
230   CONV2(TYPE, -1.0 ## POSTFIX, _Sat short _Fract, -0.5hr - 0.5hr) \
231   CONV2(TYPE, 1.0 ## POSTFIX, _Sat _Fract, 1.0r) \
232   CONV2(TYPE, -1.0 ## POSTFIX, _Sat _Fract, -0.5r - 0.5r) \
233   CONV2(TYPE, 1.0 ## POSTFIX, _Sat long _Fract, 1.0lr) \
234   CONV2(TYPE, -1.0 ## POSTFIX, _Sat long _Fract, -0.5lr - 0.5lr) \
235   CONV2(TYPE, 1.0 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
236   CONV2(TYPE, -1.0 ## POSTFIX, _Sat long long _Fract, -0.5llr - 0.5llr) \
237   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
238   CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
239   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
240   CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned _Fract, 0.0ur) \
241   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
242   CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
243   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
244   CONV2(TYPE, -1.0 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr)
245 
246 /* Unsigned accum to _Sat unsigned/signed fract.  */
247 #define SAT_CONV2(TYPE, POSTFIX) \
248   CONV2(TYPE, 3.2 ## POSTFIX, _Sat short _Fract, 1.0hr) \
249   CONV2(TYPE, 3.2 ## POSTFIX, _Sat _Fract, 1.0r) \
250   CONV2(TYPE, 3.2 ## POSTFIX, _Sat long _Fract, 1.0lr) \
251   CONV2(TYPE, 3.2 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
252   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
253   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
254   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
255   CONV2(TYPE, 3.2 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr) \
256   CONV2(TYPE, 1.0 ## POSTFIX, _Sat short _Fract, 1.0hr) \
257   CONV2(TYPE, 1.0 ## POSTFIX, _Sat _Fract, 1.0r) \
258   CONV2(TYPE, 1.0 ## POSTFIX, _Sat long _Fract, 1.0lr) \
259   CONV2(TYPE, 1.0 ## POSTFIX, _Sat long long _Fract, 1.0llr) \
260   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned short _Fract, 1.0uhr) \
261   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned _Fract, 1.0ur) \
262   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long _Fract, 1.0ulr) \
263   CONV2(TYPE, 1.0 ## POSTFIX, _Sat unsigned long long _Fract, 1.0ullr)
264 
265 /* Signed fract to _Sat unsigned fract.  */
266 #define SAT_CONV3(TYPE, POSTFIX) \
267   CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned short _Fract, 0.0uhr) \
268   CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned  _Fract, 0.0ur) \
269   CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned long _Fract, 0.0ulr) \
270   CONV2(TYPE, -0.5 ## POSTFIX, _Sat unsigned long long _Fract, 0.0ullr)
271 
272 /* Signed integer to _Sat signed/unsigned fract.  */
273 #define SAT_CONV4(TYPE) \
274   CONV2(TYPE, 100, _Sat short _Fract, 1.0hr) \
275   CONV2(TYPE, -100, _Sat short _Fract, -0.5hr - 0.5hr) \
276   CONV2(TYPE, 100, _Sat _Fract, 1.0r) \
277   CONV2(TYPE, -100, _Sat _Fract, -0.5r - 0.5r) \
278   CONV2(TYPE, 100, _Sat long _Fract, 1.0lr) \
279   CONV2(TYPE, -100, _Sat long _Fract, -0.5lr - 0.5lr) \
280   CONV2(TYPE, 100, _Sat long long _Fract, 1.0llr) \
281   CONV2(TYPE, -100, _Sat long long _Fract, -0.5llr - 0.5llr) \
282   CONV2(TYPE, 100, _Sat unsigned short _Fract, 1.0uhr) \
283   CONV2(TYPE, -100, _Sat unsigned short _Fract, 0.0uhr) \
284   CONV2(TYPE, 100, _Sat unsigned _Fract, 1.0ur) \
285   CONV2(TYPE, -100, _Sat unsigned _Fract, 0.0ur) \
286   CONV2(TYPE, 100, _Sat unsigned long _Fract, 1.0ulr) \
287   CONV2(TYPE, -100, _Sat unsigned long _Fract, 0.0ulr) \
288   CONV2(TYPE, 100, _Sat unsigned long long _Fract, 1.0ullr) \
289   CONV2(TYPE, -100, _Sat unsigned long long _Fract, 0.0ullr) \
290   CONV2(TYPE, 1, _Sat short _Fract, 1.0hr) \
291   CONV2(TYPE, -1, _Sat short _Fract, -0.5hr - 0.5hr) \
292   CONV2(TYPE, 1, _Sat _Fract, 1.0r) \
293   CONV2(TYPE, -1, _Sat _Fract, -0.5r - 0.5r) \
294   CONV2(TYPE, 1, _Sat long _Fract, 1.0lr) \
295   CONV2(TYPE, -1, _Sat long _Fract, -0.5lr - 0.5lr) \
296   CONV2(TYPE, 1, _Sat long long _Fract, 1.0llr) \
297   CONV2(TYPE, -1, _Sat long long _Fract, -0.5llr - 0.5llr) \
298   CONV2(TYPE, 1, _Sat unsigned short _Fract, 1.0uhr) \
299   CONV2(TYPE, -1, _Sat unsigned short _Fract, 0.0uhr) \
300   CONV2(TYPE, 1, _Sat unsigned _Fract, 1.0ur) \
301   CONV2(TYPE, -1, _Sat unsigned _Fract, 0.0ur) \
302   CONV2(TYPE, 1, _Sat unsigned long _Fract, 1.0ulr) \
303   CONV2(TYPE, -1, _Sat unsigned long _Fract, 0.0ulr) \
304   CONV2(TYPE, 1, _Sat unsigned long long _Fract, 1.0ullr) \
305   CONV2(TYPE, -1, _Sat unsigned long long _Fract, 0.0ullr)
306 
307 /* Unsigned integer to _Sat signed/unsigned fract.  */
308 #define SAT_CONV5(TYPE) \
309   CONV2(TYPE, 100, _Sat short _Fract, 1.0hr) \
310   CONV2(TYPE, 100, _Sat _Fract, 1.0r) \
311   CONV2(TYPE, 100, _Sat long _Fract, 1.0lr) \
312   CONV2(TYPE, 100, _Sat long long _Fract, 1.0llr) \
313   CONV2(TYPE, 100, _Sat unsigned short _Fract, 1.0uhr) \
314   CONV2(TYPE, 100, _Sat unsigned _Fract, 1.0ur) \
315   CONV2(TYPE, 100, _Sat unsigned long _Fract, 1.0ulr) \
316   CONV2(TYPE, 100, _Sat unsigned long long _Fract, 1.0ullr) \
317   CONV2(TYPE, 1, _Sat short _Fract, 1.0hr) \
318   CONV2(TYPE, 1, _Sat _Fract, 1.0r) \
319   CONV2(TYPE, 1, _Sat long _Fract, 1.0lr) \
320   CONV2(TYPE, 1, _Sat long long _Fract, 1.0llr) \
321   CONV2(TYPE, 1, _Sat unsigned short _Fract, 1.0uhr) \
322   CONV2(TYPE, 1, _Sat unsigned _Fract, 1.0ur) \
323   CONV2(TYPE, 1, _Sat unsigned long _Fract, 1.0ulr) \
324   CONV2(TYPE, 1, _Sat unsigned long long _Fract, 1.0ullr)
325 
326 /* Floating-point to _Sat signed/unsigned fract.  */
327 #define SAT_CONV6(TYPE) \
328   CONV2(TYPE, 100.0, _Sat short _Fract, 1.0hr) \
329   CONV2(TYPE, -100.0, _Sat short _Fract, -0.5hr - 0.5hr) \
330   CONV2(TYPE, 100.0, _Sat _Fract, 1.0r) \
331   CONV2(TYPE, -100.0, _Sat _Fract, -0.5r - 0.5r) \
332   CONV2(TYPE, 100.0, _Sat long _Fract, 1.0lr) \
333   CONV2(TYPE, -100.0, _Sat long _Fract, -0.5lr - 0.5lr) \
334   CONV2(TYPE, 100.0, _Sat long long _Fract, 1.0llr) \
335   CONV2(TYPE, -100.0, _Sat long long _Fract, -0.5llr - 0.5llr) \
336   CONV2(TYPE, 100.0, _Sat unsigned short _Fract, 1.0uhr) \
337   CONV2(TYPE, -100.0, _Sat unsigned short _Fract, 0.0uhr) \
338   CONV2(TYPE, 100.0, _Sat unsigned _Fract, 1.0ur) \
339   CONV2(TYPE, -100.0, _Sat unsigned _Fract, 0.0ur) \
340   CONV2(TYPE, 100.0, _Sat unsigned long _Fract, 1.0ulr) \
341   CONV2(TYPE, -100.0, _Sat unsigned long _Fract, 0.0ulr) \
342   CONV2(TYPE, 100.0, _Sat unsigned long long _Fract, 1.0ullr) \
343   CONV2(TYPE, -100.0, _Sat unsigned long long _Fract, 0.0ullr) \
344   CONV2(TYPE, 1.0, _Sat short _Fract, 1.0hr) \
345   CONV2(TYPE, -1.0, _Sat short _Fract, -0.5hr - 0.5hr) \
346   CONV2(TYPE, 1.0, _Sat _Fract, 1.0r) \
347   CONV2(TYPE, -1.0, _Sat _Fract, -0.5r - 0.5r) \
348   CONV2(TYPE, 1.0, _Sat long _Fract, 1.0lr) \
349   CONV2(TYPE, -1.0, _Sat long _Fract, -0.5lr - 0.5lr) \
350   CONV2(TYPE, 1.0, _Sat long long _Fract, 1.0llr) \
351   CONV2(TYPE, -1.0, _Sat long long _Fract, -0.5llr - 0.5llr) \
352   CONV2(TYPE, 1.0, _Sat unsigned short _Fract, 1.0uhr) \
353   CONV2(TYPE, -1.0, _Sat unsigned short _Fract, 0.0uhr) \
354   CONV2(TYPE, 1.0, _Sat unsigned _Fract, 1.0ur) \
355   CONV2(TYPE, -1.0, _Sat unsigned _Fract, 0.0ur) \
356   CONV2(TYPE, 1.0, _Sat unsigned long _Fract, 1.0ulr) \
357   CONV2(TYPE, -1.0, _Sat unsigned long _Fract, 0.0ulr) \
358   CONV2(TYPE, 1.0, _Sat unsigned long long _Fract, 1.0ullr) \
359   CONV2(TYPE, -1.0, _Sat unsigned long long _Fract, 0.0ullr)
360