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 3 4 #include <immintrin.h> 5 #include <stddef.h> 6 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); 11 } 12 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); 17 } 18 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); 23 } 24 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); 29 } 30 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); 35 } 36 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); 41 } 42 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); 47 } 48 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); 53 } 54 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); 59 } 60 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); 65 } 66 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); 71 } 72 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); 77 } 78 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); 83 } 84 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); 89 } 90 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); 95 } 96 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); 101 } 102 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); 107 } 108 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); 113 } 114 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); 119 } 120 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); 125 } 126 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); 131 } 132 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); 137 } 138 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); 143 } 144 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); 149 } 150 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); 155 } 156 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); 161 } 162 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); 167 } 168 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); 173 } 174 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); 179 } 180 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); 185 } 186 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); 191 } 192 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); 197 } 198