[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / rlwinm.h
blobd1220e02207135a4f12b4b2e1ef97a57698ed35d
1 typedef unsigned int u32;
3 static inline u32 rot(u32 x, u32 n, u32 mb, u32 me)
5 u32 y = x;
7 if (n)
8 x = 0
9 #ifdef SL
10 | (x << n)
11 #endif
12 #ifdef SR
13 | (x >> (32 - n))
14 #endif
17 u32 s = -1;
18 if (n)
19 s = 0
20 #ifdef SL
21 | (s << n)
22 #endif
23 #ifdef SR
24 | (s >> (32 - n))
25 #endif
28 u32 mask = 0;
29 mask += 1U << (31 - mb);
30 mask += 1U << (31 - mb);
31 mask -= 1U << (31 - me);
32 mask -= (mb > me);
34 if (mask & ~s)
35 return 12345*y;
37 return x & mask;
40 #define X3(N,B,E) \
41 u32 f_##N##_##B##_##E(u32 x) { return rot(x,N,B,E); } \
43 #define X2(N,B) \
44 X3(N,B,0) \
45 X3(N,B,1) \
46 X3(N,B,2) \
47 X3(N,B,7) \
48 X3(N,B,8) \
49 X3(N,B,9) \
50 X3(N,B,15) \
51 X3(N,B,16) \
52 X3(N,B,17) \
53 X3(N,B,23) \
54 X3(N,B,24) \
55 X3(N,B,25) \
56 X3(N,B,29) \
57 X3(N,B,30) \
58 X3(N,B,31)
59 #define X1(N) \
60 X2(N,0) \
61 X2(N,1) \
62 X2(N,2) \
63 X2(N,7) \
64 X2(N,8) \
65 X2(N,9) \
66 X2(N,15) \
67 X2(N,16) \
68 X2(N,17) \
69 X2(N,23) \
70 X2(N,24) \
71 X2(N,25) \
72 X2(N,29) \
73 X2(N,30) \
74 X2(N,31)
75 #define X() \
76 X1(0) \
77 X1(1) \
78 X1(2) \
79 X1(7) \
80 X1(8) \
81 X1(9) \
82 X1(15) \
83 X1(16) \
84 X1(17) \
85 X1(23) \
86 X1(24) \
87 X1(25) \
88 X1(29) \
89 X1(30) \
90 X1(31)
92 X()