1 // RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +cmpccxadd \
2 // RUN: -emit-llvm -o - -Wall -Werror -pedantic -Wno-gnu-statement-expression | FileCheck %s
7 int test_cmpbexadd32(void *__A
, int __B
, int __C
) {
8 // CHECK-LABEL: @test_cmpbexadd32(
9 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 0)
10 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_O
);
13 long long test_cmpbexadd64(void *__A
, long long __B
, long long __C
) {
14 // CHECK-LABEL: @test_cmpbexadd64(
15 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 0)
16 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_O
);
19 int test_cmpbxadd32(void *__A
, int __B
, int __C
) {
20 // CHECK-LABEL: @test_cmpbxadd32(
21 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 1)
22 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NO
);
25 long long test_cmpbxadd64(void *__A
, long long __B
, long long __C
) {
26 // CHECK-LABEL: @test_cmpbxadd64(
27 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 1)
28 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NO
);
31 int test_cmplexadd32(void *__A
, int __B
, int __C
) {
32 // CHECK-LABEL: @test_cmplexadd32(
33 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 2)
34 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_B
);
37 long long test_cmplexadd64(void *__A
, long long __B
, long long __C
) {
38 // CHECK-LABEL: @test_cmplexadd64(
39 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 2)
40 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_B
);
43 int test_cmplxadd32(void *__A
, int __B
, int __C
) {
44 // CHECK-LABEL: @test_cmplxadd32(
45 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 3)
46 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NB
);
49 long long test_cmplxadd64(void *__A
, long long __B
, long long __C
) {
50 // CHECK-LABEL: @test_cmplxadd64(
51 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 3)
52 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NB
);
55 int test_cmpaxadd32(void *__A
, int __B
, int __C
) {
56 // CHECK-LABEL: @test_cmpaxadd32(
57 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 4)
58 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_Z
);
61 long long test_cmpaxadd64(void *__A
, long long __B
, long long __C
) {
62 // CHECK-LABEL: @test_cmpaxadd64(
63 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 4)
64 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_Z
);
67 int test_cmpaexadd32(void *__A
, int __B
, int __C
) {
68 // CHECK-LABEL: @test_cmpaexadd32(
69 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 5)
70 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NZ
);
73 long long test_cmpaexadd64(void *__A
, long long __B
, long long __C
) {
74 // CHECK-LABEL: @test_cmpaexadd64(
75 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 5)
76 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NZ
);
79 int test_cmpgxadd32(void *__A
, int __B
, int __C
) {
80 // CHECK-LABEL: @test_cmpgxadd32(
81 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 6)
82 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_BE
);
85 long long test_cmpgxadd64(void *__A
, long long __B
, long long __C
) {
86 // CHECK-LABEL: @test_cmpgxadd64(
87 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 6)
88 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_BE
);
91 int test_cmpgexadd32(void *__A
, int __B
, int __C
) {
92 // CHECK-LABEL: @test_cmpgexadd32(
93 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 7)
94 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NBE
);
97 long long test_cmpgexadd64(void *__A
, long long __B
, long long __C
) {
98 // CHECK-LABEL: @test_cmpgexadd64(
99 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 7)
100 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NBE
);
103 int test_cmpnoxadd32(void *__A
, int __B
, int __C
) {
104 // CHECK-LABEL: @test_cmpnoxadd32(
105 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 8)
106 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_S
);
109 long long test_cmpnoxadd64(void *__A
, long long __B
, long long __C
) {
110 // CHECK-LABEL: @test_cmpnoxadd64(
111 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 8)
112 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_S
);
115 int test_cmpnpxadd32(void *__A
, int __B
, int __C
) {
116 // CHECK-LABEL: @test_cmpnpxadd32(
117 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 9)
118 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NS
);
121 long long test_cmpnpxadd64(void *__A
, long long __B
, long long __C
) {
122 // CHECK-LABEL: @test_cmpnpxadd64(
123 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 9)
124 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NS
);
127 int test_cmpnsxadd32(void *__A
, int __B
, int __C
) {
128 // CHECK-LABEL: @test_cmpnsxadd32(
129 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 10)
130 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_P
);
133 long long test_cmpnsxadd64(void *__A
, long long __B
, long long __C
) {
134 // CHECK-LABEL: @test_cmpnsxadd64(
135 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 10)
136 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_P
);
139 int test_cmpnexadd32(void *__A
, int __B
, int __C
) {
140 // CHECK-LABEL: @test_cmpnexadd32(
141 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 11)
142 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NP
);
145 long long test_cmpnexadd64(void *__A
, long long __B
, long long __C
) {
146 // CHECK-LABEL: @test_cmpnexadd64(
147 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 11)
148 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NP
);
151 int test_cmpoxadd32(void *__A
, int __B
, int __C
) {
152 // CHECK-LABEL: @test_cmpoxadd32(
153 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 12)
154 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_L
);
157 long long test_cmpoxadd64(void *__A
, long long __B
, long long __C
) {
158 // CHECK-LABEL: @test_cmpoxadd64(
159 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 12)
160 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_L
);
163 int test_cmppxadd32(void *__A
, int __B
, int __C
) {
164 // CHECK-LABEL: @test_cmppxadd32(
165 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 13)
166 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NL
);
169 long long test_cmppxadd64(void *__A
, long long __B
, long long __C
) {
170 // CHECK-LABEL: @test_cmppxadd64(
171 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 13)
172 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NL
);
175 int test_cmpsxadd32(void *__A
, int __B
, int __C
) {
176 // CHECK-LABEL: @test_cmpsxadd32(
177 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 14)
178 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_LE
);
181 long long test_cmpsxadd64(void *__A
, long long __B
, long long __C
) {
182 // CHECK-LABEL: @test_cmpsxadd64(
183 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 14)
184 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_LE
);
187 int test_cmpexadd32(void *__A
, int __B
, int __C
) {
188 // CHECK-LABEL: @test_cmpexadd32(
189 // CHECK: call i32 @llvm.x86.cmpccxadd32(ptr %{{.*}}, i32 %{{.*}}, i32 %{{.*}}, i32 15)
190 return _cmpccxadd_epi32(__A
, __B
, __C
, _CMPCCX_NLE
);
193 long long test_cmpexadd64(void *__A
, long long __B
, long long __C
) {
194 // CHECK-LABEL: @test_cmpexadd64(
195 // CHECK: call i64 @llvm.x86.cmpccxadd64(ptr %{{.*}}, i64 %{{.*}}, i64 %{{.*}}, i32 15)
196 return _cmpccxadd_epi64(__A
, __B
, __C
, _CMPCCX_NLE
);