1 /* This file tests shifts in various integral modes. */
5 #define CAT(A, B) A ## B
47 /* Define 8-bit shifts. */
49 typedef unsigned int u8
__attribute__((mode(QI
)));
50 typedef signed int s8
__attribute__((mode(QI
)));
52 #define REPEAT_FN(COUNT) \
53 u8 CAT (ashift_qi_, COUNT) (u8 n) { return n << COUNT; }
57 #define REPEAT_FN(COUNT) \
58 u8 CAT (lshiftrt_qi_, COUNT) (u8 n) { return n >> COUNT; }
62 #define REPEAT_FN(COUNT) \
63 s8 CAT (ashiftrt_qi_, COUNT) (s8 n) { return n >> COUNT; }
66 #endif /* CHAR_BIT == 8 */
68 /* Define 16-bit shifts. */
69 #if CHAR_BIT == 8 || CHAR_BIT == 16
71 typedef unsigned int u16
__attribute__((mode(HI
)));
72 typedef signed int s16
__attribute__((mode(HI
)));
74 typedef unsigned int u16
__attribute__((mode(QI
)));
75 typedef signed int s16
__attribute__((mode(QI
)));
78 #define REPEAT_FN(COUNT) \
79 u16 CAT (ashift_hi_, COUNT) (u16 n) { return n << COUNT; }
83 #define REPEAT_FN(COUNT) \
84 u16 CAT (lshiftrt_hi_, COUNT) (u16 n) { return n >> COUNT; }
88 #define REPEAT_FN(COUNT) \
89 s16 CAT (ashiftrt_hi_, COUNT) (s16 n) { return n >> COUNT; }
92 #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
94 /* Define 32-bit shifts. */
95 #if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
97 typedef unsigned int u32
__attribute__((mode(SI
)));
98 typedef signed int s32
__attribute__((mode(SI
)));
100 typedef unsigned int u32
__attribute__((mode(HI
)));
101 typedef signed int s32
__attribute__((mode(HI
)));
103 typedef unsigned int u32
__attribute__((mode(QI
)));
104 typedef signed int s32
__attribute__((mode(QI
)));
107 #define REPEAT_FN(COUNT) \
108 u32 CAT (ashift_si_, COUNT) (u32 n) { return n << COUNT; }
112 #define REPEAT_FN(COUNT) \
113 u32 CAT (lshiftrt_si_, COUNT) (u32 n) { return n >> COUNT; }
117 #define REPEAT_FN(COUNT) \
118 s32 CAT (ashiftrt_si_, COUNT) (s32 n) { return n >> COUNT; }
121 #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */
123 extern void abort (void);
124 extern void exit (int);
129 /* Test 8-bit shifts. */
131 # define REPEAT_FN(COUNT) \
132 if (CAT (ashift_qi_, COUNT) (0xff) != (u8) ((u8)0xff << COUNT)) abort ();
136 # define REPEAT_FN(COUNT) \
137 if (CAT (lshiftrt_qi_, COUNT) (0xff) != (u8) ((u8)0xff >> COUNT)) abort ();
141 # define REPEAT_FN(COUNT) \
142 if (CAT (ashiftrt_qi_, COUNT) (-1) != -1) abort ();
146 # define REPEAT_FN(COUNT) \
147 if (CAT (ashiftrt_qi_, COUNT) (0) != 0) abort ();
150 #endif /* CHAR_BIT == 8 */
152 /* Test 16-bit shifts. */
153 #if CHAR_BIT == 8 || CHAR_BIT == 16
154 # define REPEAT_FN(COUNT) \
155 if (CAT (ashift_hi_, COUNT) (0xffff) \
156 != (u16) ((u16) 0xffff << COUNT)) abort ();
160 # define REPEAT_FN(COUNT) \
161 if (CAT (lshiftrt_hi_, COUNT) (0xffff) \
162 != (u16) ((u16) 0xffff >> COUNT)) abort ();
166 # define REPEAT_FN(COUNT) \
167 if (CAT (ashiftrt_hi_, COUNT) (-1) != -1) abort ();
171 # define REPEAT_FN(COUNT) \
172 if (CAT (ashiftrt_hi_, COUNT) (0) != 0) abort ();
175 #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 */
177 /* Test 32-bit shifts. */
178 #if CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32
179 # define REPEAT_FN(COUNT) \
180 if (CAT (ashift_si_, COUNT) (0xffffffff) \
181 != (u32) ((u32) 0xffffffff << COUNT)) abort ();
185 # define REPEAT_FN(COUNT) \
186 if (CAT (lshiftrt_si_, COUNT) (0xffffffff) \
187 != (u32) ((u32) 0xffffffff >> COUNT)) abort ();
191 # define REPEAT_FN(COUNT) \
192 if (CAT (ashiftrt_si_, COUNT) (-1) != -1) abort ();
196 # define REPEAT_FN(COUNT) \
197 if (CAT (ashiftrt_si_, COUNT) (0) != 0) abort ();
200 #endif /* CHAR_BIT == 8 || CHAR_BIT == 16 || CHAR_BIT == 32 */