Clang Project

clang_source_code/test/CodeGen/cetintrin.c
1// RUN: %clang_cc1 -ffreestanding %s -triple=i386-unknown-unknown -target-feature +shstk -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=I386 --check-prefix=CHECK
2// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +shstk  -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=X86_64  --check-prefix=CHECK
3
4#include <immintrin.h>
5
6void test_incsspd(int a) {
7  // CHECK-LABEL: @test_incsspd
8  // CHECK:       call void @llvm.x86.incsspd(i32 %{{[0-9]+}})
9  _incsspd(a);
10}
11
12#ifdef __x86_64__
13void test_incsspq(int a) {
14  // X86_64-LABEL: @test_incsspq
15  // X86_64:       call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}})
16  _incsspq(a);
17}
18
19void test_inc_ssp(unsigned int a) {
20  // X86_64-LABEL: @test_inc_ssp
21  // X86_64:       call void @llvm.x86.incsspq(i64 %{{[a-z0-9.]+}})
22  _inc_ssp(a);
23}
24#else
25
26void test_inc_ssp(unsigned int a) {
27  // I386-LABEL: @test_inc_ssp
28  // I386:       call void @llvm.x86.incsspd(i32 %{{[0-9]+}})
29  _inc_ssp(a);
30}
31
32#endif
33
34unsigned int test_rdsspd(unsigned int a) {
35  // CHECK-LABEL: @test_rdsspd
36  // CHECK:       call i32 @llvm.x86.rdsspd(i32 %{{[a-z0-9.]+}})
37  return _rdsspd(a);
38}
39
40#ifdef __x86_64__
41unsigned long long test_rdsspq(unsigned long long a) {
42  // X86_64-LABEL: @test_rdsspq
43  // X86_64:       call i64 @llvm.x86.rdsspq(i64 %{{[a-z0-9.]+}})
44  return _rdsspq(a);
45}
46
47unsigned long long test_get_ssp(void) {
48  // X86_64-LABEL: @test_get_ssp
49  // X86_64:       call i64 @llvm.x86.rdsspq(i64 0)
50  return _get_ssp();
51}
52
53#else
54
55unsigned int test_get_ssp(void) {
56  // I386-LABEL: @test_get_ssp
57  // I386:       call i32 @llvm.x86.rdsspd(i32 0)
58  return _get_ssp();
59}
60
61#endif
62
63void  test_saveprevssp() {
64  // CHECK-LABEL: @test_saveprevssp
65  // CHECK:       call void @llvm.x86.saveprevssp()
66  _saveprevssp();
67}
68
69void test_rstorssp(void * __p) {
70  // CHECK-LABEL: @test_rstorssp
71  // CHECK:       call void @llvm.x86.rstorssp(i8* %{{[a-z0-9.]+}})
72  _rstorssp(__p);
73}
74
75void test_wrssd(unsigned int __a, void * __p) {
76  // CHECK-LABEL: @test_wrssd
77  // CHECK:       call void @llvm.x86.wrssd(i32 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}})
78  _wrssd(__a, __p);
79}
80
81#ifdef __x86_64__
82void test_wrssq(unsigned long long __a, void * __p) {
83  // X86_64-LABEL: @test_wrssq
84  // X86_64:       call void @llvm.x86.wrssq(i64 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}})
85  _wrssq(__a, __p);
86}
87#endif
88
89void test_wrussd(unsigned int __a, void * __p) {
90  // CHECK-LABEL: @test_wrussd
91  // CHECK:       call void @llvm.x86.wrussd(i32 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}})
92  _wrussd(__a, __p);
93}
94
95#ifdef __x86_64__
96void test_wrussq(unsigned long long __a, void * __p) {
97  // X86_64-LABEL: @test_wrussq
98  // X86_64:       call void @llvm.x86.wrussq(i64 %{{[a-z0-9.]+}}, i8* %{{[a-z0-9.]+}})
99  _wrussq(__a, __p);
100}
101#endif
102
103void test_setssbsy() {
104  // CHECK-LABEL: @test_setssbsy
105  // CHECK:       call void @llvm.x86.setssbsy()
106  _setssbsy();
107}
108
109void test_clrssbsy(void * __p) {
110  // CHECK-LABEL: @test_clrssbsy
111  // CHECK:       call void @llvm.x86.clrssbsy(i8* %{{[a-z0-9.]+}})
112  _clrssbsy(__p);
113}
114