/* { dg-do compile } */ /* { dg-options "-O0 -Werror-implicit-function-declaration -march=x86-64 -madx -mbmi -mbmi2 -mcldemote -mclflushopt -mclwb -mclzero -menqcmd -mfsgsbase -mfxsr -mhreset -mlzcnt -mlwp -mmovdiri -mmwaitx -mpconfig -mpopcnt -mpku -mptwrite -mrdpid -mrdrnd -mrdseed -mrtm -mserialize -msgx -mshstk -mtbm -mtsxldtrk -mwaitpkg -mwbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mraoint -mno-sse -mno-mmx" } */ /* { dg-add-options bind_pic_locally } */ /* { dg-additional-options "-musermsr -mcmpccxadd -mprefetchi -muintr" { target { ! ia32 } } } */ /* Test that the intrinsics in compile without optimization. All of them are defined as inline functions that reference the proper builtin functions. Defining away "extern" and "__inline" results in all of them being compiled as proper functions. */ #define extern #define __inline #include #define _CONCAT(x,y) x ## y #define test_0(func, type, imm) \ type _CONCAT(_0,func) (int const I) \ { return func (imm); } #define test_1(func, type, op1_type) \ type _CONCAT(_1,func) (op1_type A) \ { return func (A); } #define test_1r(func, type, op1_type, imm) \ type _CONCAT(_1r,func) (op1_type A, int const I) \ { return func (imm, A); } #define test_2(func, type, op1_type, op2_type) \ type _CONCAT(_2,func) (op1_type A, op2_type B) \ { return func (A, B); } /* usermsrintrin.h */ #ifdef __x86_64__ test_0 (_urdmsr, unsigned long long, 1) test_1 (_urdmsr, unsigned long long, unsigned long long) test_1r (_uwrmsr, void, unsigned long long, 1) test_2 (_uwrmsr, void, unsigned long long, unsigned long long) #endif