1 /* PR middle-end/58670 */
2 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
3
4 #if defined (__i386__) || defined (__x86_64__)
5 #define ASM_STR "btsl $1, %0; jc %l[lab]"
6 #endif
7
8 __attribute__((noinline, noclone)) int
foo(int a,int b)9 foo (int a, int b)
10 {
11 if (a)
12 return -3;
13 #ifdef ASM_STR
14 asm volatile goto (ASM_STR : : "m" (b) : "memory" : lab);
15 return 0;
16 lab:
17 #endif
18 return 0;
19 }
20
21 int
bar(int a,int b)22 bar (int a, int b)
23 {
24 if (a)
25 return -3;
26 #ifdef ASM_STR
27 asm volatile goto (ASM_STR : : "m" (b) : "memory" : lab);
28 return 0;
29 lab:
30 #endif
31 return 0;
32 }
33
34 int
main()35 main ()
36 {
37 if (foo (1, 0) != -3
38 || foo (0, 3) != 0
39 || foo (1, 0) != -3
40 || foo (0, 0) != 0
41 || bar (1, 0) != -3
42 || bar (0, 3) != 0
43 || bar (1, 0) != -3
44 || bar (0, 0) != 0)
45 __builtin_abort ();
46 return 0;
47 }
48