1 /* { dg-do compile } */
2 /* { dg-options "-O2 -mwaitpkg" } */
3 /* { dg-final { scan-assembler-times "umonitor\[ \\t\]+\[^\{\n\]*%" 3 } } */
4 /* { dg-final { scan-assembler-times "umwait" 3 } } */
5 /* { dg-final { scan-assembler-times "setc\[ \\t\]+\[^\{\n\]*%" 3 } } */
6
7 /* Verify that they work in both 32bit and 64bit. */
8
9 #include <x86intrin.h>
10
11 unsigned char
foo(void * p,unsigned x,unsigned y)12 foo (void *p, unsigned x, unsigned y)
13 {
14 _umonitor (p);
15 return _umwait (x, y);
16 }
17
18 unsigned char
bar(void * p,unsigned x,unsigned long long y)19 bar (void *p, unsigned x, unsigned long long y)
20 {
21 _umonitor (p);
22 return _umwait (x, y);
23 }
24
25 unsigned char
foo1(char * p)26 foo1 (char *p)
27 {
28 _umonitor (p);
29 return _umwait (0, 0);
30 }
31