1 /* { dg-do run } */
2 /* { dg-options "-O2 -fno-inline" } */
3
4 extern void abort (void);
5
6 #define force_simd_si(v) asm volatile ("mov %s0, %1.s[0]" :"=w" (v) :"w" (v) :)
7
8 unsigned int
9 shft_add (unsigned int a, unsigned int b)
10 {
11 unsigned int c;
12
13 force_simd_si (a);
14 force_simd_si (b);
15 c = a >> b;
16 force_simd_si (c);
17
18 return c + b;
19 }
20
21 int
22 main (void)
23 {
24 unsigned int i = 0;
25 unsigned int a = 0xdeadbeef;
26
27 for (i = 0; i < 32; i++)
28 {
29 unsigned int exp = (a / (1 << i) + i);
30 unsigned int got = shft_add (a, i);
31
32 if (exp != got)
33 abort ();
34 }
35
36 return 0;
37 }
38