2 /* { dg-options "-std=gnu99" } */
4 /* N1169 6.5.7 - Bitwise shift operands.
5 C99 6.5.5 Multiplicative operators.
6 C99 6.5.6 Additive operators.
7 C99 6.5.7 Bitwise shift operators.
8 C99 6.5.8 Relational operators.
9 C99 6.5.9 Equality operators.
10 C99 6.5.16 Assignment operators.
12 Check binary operators + - * / << >> < <= >= > == != += -= *= /= <<= >>=. */
14 extern void abort (void);
16 #define BINARY(TYPE,POSTFIX) \
17 { TYPE a = 0.5 ## POSTFIX; \
18 TYPE b = 0.25 ## POSTFIX; \
19 if (a + b != 0.75 ## POSTFIX) \
21 if (a - b != 0.25 ## POSTFIX) \
23 if (a * b != 0.125 ## POSTFIX) \
25 if (b / a != 0.5 ## POSTFIX) \
44 if (a != 0.75 ## POSTFIX) \
47 if (a != 0.5 ## POSTFIX) \
50 if (a != 0.125 ## POSTFIX) \
53 if (a != 0.5 ## POSTFIX) \
56 if (a != 0.125 ## POSTFIX) \
59 if (a != 0.25 ## POSTFIX) \
63 #define FRACT_SAT_BINARY(TYPE,POSTFIX) \
64 { TYPE a = 0.7 ## POSTFIX; \
65 TYPE b = 0.9 ## POSTFIX; \
66 if (a + b != 1.0 ## POSTFIX) \
68 a = -0.7 ## POSTFIX; \
69 b = -0.9 ## POSTFIX; \
70 if (a + b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
73 b = -0.9 ## POSTFIX; \
74 if (a - b != 1.0 ## POSTFIX) \
76 a = -0.7 ## POSTFIX; \
78 if (a - b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
80 a = -0.5 ## POSTFIX - 0.5 ## POSTFIX; \
81 if (a * a != 1.0 ## POSTFIX) \
85 if (a / b != 1.0 ## POSTFIX) \
87 a = -0.8 ## POSTFIX; \
89 if (a / b != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
92 if (a << 4 != 1.0 ## POSTFIX) \
94 a = -0.8 ## POSTFIX; \
95 if (a << 4 != -0.5 ## POSTFIX - 0.5 ## POSTFIX) \
99 #define FRACT_SAT_UNS_BINARY(TYPE,POSTFIX) \
100 { TYPE a = 0.7 ## POSTFIX; \
101 TYPE b = 0.9 ## POSTFIX; \
102 if (a + b != 1.0 ## POSTFIX) \
104 if (a - b != 0.0 ## POSTFIX) \
106 if (b / a != 1.0 ## POSTFIX) \
108 if (a << 1 != 1.0 ## POSTFIX) \
114 BINARY(short _Fract, hr);
116 BINARY(long _Fract, lr);
117 BINARY(long long _Fract, llr);
118 BINARY(unsigned short _Fract, uhr);
119 BINARY(unsigned _Fract, ur);
120 BINARY(unsigned long _Fract, ulr);
121 BINARY(unsigned long long _Fract, ullr);
122 BINARY(_Sat short _Fract, hr);
123 BINARY(_Sat _Fract, r);
124 BINARY(_Sat long _Fract, lr);
125 BINARY(_Sat long long _Fract, llr);
126 BINARY(_Sat unsigned short _Fract, uhr);
127 BINARY(_Sat unsigned _Fract, ur);
128 BINARY(_Sat unsigned long _Fract, ulr);
129 BINARY(_Sat unsigned long long _Fract, ullr);
130 BINARY(short _Accum, hk);
132 BINARY(long _Accum, lk);
133 BINARY(long long _Accum, llk);
134 BINARY(unsigned short _Accum, uhk);
135 BINARY(unsigned _Accum, uk);
136 BINARY(unsigned long _Accum, ulk);
137 BINARY(unsigned long long _Accum, ullk);
138 BINARY(_Sat short _Accum, hk);
139 BINARY(_Sat _Accum, k);
140 BINARY(_Sat long _Accum, lk);
141 BINARY(_Sat long long _Accum, llk);
142 BINARY(_Sat unsigned short _Accum, uhk);
143 BINARY(_Sat unsigned _Accum, uk);
144 BINARY(_Sat unsigned long _Accum, ulk);
145 BINARY(_Sat unsigned long long _Accum, ullk);
147 FRACT_SAT_BINARY(_Sat short _Fract, hr);
148 FRACT_SAT_BINARY(_Sat _Fract, r);
149 FRACT_SAT_BINARY(_Sat long _Fract, lr);
150 FRACT_SAT_BINARY(_Sat long long _Fract, llr);
152 FRACT_SAT_UNS_BINARY(_Sat unsigned short _Fract, uhr);
153 FRACT_SAT_UNS_BINARY(_Sat unsigned _Fract, ur);
154 FRACT_SAT_UNS_BINARY(_Sat unsigned long _Fract, ulr);
155 FRACT_SAT_UNS_BINARY(_Sat unsigned long long _Fract, ullr);