1 // RUN: %clang_cc1 -O2 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s 2 3 int test_cca(long nr, volatile long *addr) { 4 //CHECK-LABEL: @test_cca 5 //CHECK: = tail call i32 asm "cmp $2,$1", "={@cca},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 6 int x; 7 asm("cmp %2,%1" 8 : "=@cca"(x), "=m"(*(volatile long *)(addr)) 9 : "r"(nr) 10 : "cc"); 11 if (x) 12 return 0; 13 return 1; 14 } 15 16 int test_ccae(long nr, volatile long *addr) { 17 //CHECK-LABEL: @test_ccae 18 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 19 int x; 20 asm("cmp %2,%1" 21 : "=@ccae"(x), "=m"(*(volatile long *)(addr)) 22 : "r"(nr) 23 : "cc"); 24 if (x) 25 return 0; 26 return 1; 27 } 28 29 int test_ccb(long nr, volatile long *addr) { 30 //CHECK-LABEL: @test_ccb 31 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 32 int x; 33 asm("cmp %2,%1" 34 : "=@ccb"(x), "=m"(*(volatile long *)(addr)) 35 : "r"(nr) 36 : "cc"); 37 if (x) 38 return 0; 39 return 1; 40 } 41 42 int test_ccbe(long nr, volatile long *addr) { 43 //CHECK-LABEL: @test_ccbe 44 //CHECK: tail call i32 asm "cmp $2,$1", "={@ccbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 45 int x; 46 asm("cmp %2,%1" 47 : "=@ccbe"(x), "=m"(*(volatile long *)(addr)) 48 : "r"(nr) 49 : "cc"); 50 if (x) 51 return 0; 52 return 1; 53 } 54 55 int test_ccc(long nr, volatile long *addr) { 56 //CHECK-LABEL: @test_ccc 57 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 58 int x; 59 asm("cmp %2,%1" 60 : "=@ccc"(x), "=m"(*(volatile long *)(addr)) 61 : "r"(nr) 62 : "cc"); 63 if (x) 64 return 0; 65 return 1; 66 } 67 68 int test_cce(long nr, volatile long *addr) { 69 //CHECK-LABEL: @test_cce 70 //CHECK: = tail call i32 asm "cmp $2,$1", "={@cce},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 71 int x; 72 asm("cmp %2,%1" 73 : "=@cce"(x), "=m"(*(volatile long *)(addr)) 74 : "r"(nr) 75 : "cc"); 76 if (x) 77 return 0; 78 return 1; 79 } 80 81 int test_ccz(long nr, volatile long *addr) { 82 //CHECK-LABEL: @test_ccz 83 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 84 int x; 85 asm("cmp %2,%1" 86 : "=@ccz"(x), "=m"(*(volatile long *)(addr)) 87 : "r"(nr) 88 : "cc"); 89 if (x) 90 return 0; 91 return 1; 92 } 93 94 int test_ccg(long nr, volatile long *addr) { 95 //CHECK-LABEL: @test_ccg 96 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccg},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 97 int x; 98 asm("cmp %2,%1" 99 : "=@ccg"(x), "=m"(*(volatile long *)(addr)) 100 : "r"(nr) 101 : "cc"); 102 if (x) 103 return 0; 104 return 1; 105 } 106 107 int test_ccge(long nr, volatile long *addr) { 108 //CHECK-LABEL: @test_ccge 109 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 110 int x; 111 asm("cmp %2,%1" 112 : "=@ccge"(x), "=m"(*(volatile long *)(addr)) 113 : "r"(nr) 114 : "cc"); 115 if (x) 116 return 0; 117 return 1; 118 } 119 120 int test_ccl(long nr, volatile long *addr) { 121 //CHECK-LABEL: @test_ccl 122 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 123 int x; 124 asm("cmp %2,%1" 125 : "=@ccl"(x), "=m"(*(volatile long *)(addr)) 126 : "r"(nr) 127 : "cc"); 128 if (x) 129 return 0; 130 return 1; 131 } 132 133 int test_ccle(long nr, volatile long *addr) { 134 //CHECK-LABEL: @test_ccle 135 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 136 int x; 137 asm("cmp %2,%1" 138 : "=@ccle"(x), "=m"(*(volatile long *)(addr)) 139 : "r"(nr) 140 : "cc"); 141 if (x) 142 return 0; 143 return 1; 144 } 145 146 int test_ccna(long nr, volatile long *addr) { 147 //CHECK-LABEL: @test_ccna 148 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccna},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 149 int x; 150 asm("cmp %2,%1" 151 : "=@ccna"(x), "=m"(*(volatile long *)(addr)) 152 : "r"(nr) 153 : "cc"); 154 if (x) 155 return 0; 156 return 1; 157 } 158 159 int test_ccnae(long nr, volatile long *addr) { 160 //CHECK-LABEL: @test_ccnae 161 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 162 int x; 163 asm("cmp %2,%1" 164 : "=@ccnae"(x), "=m"(*(volatile long *)(addr)) 165 : "r"(nr) 166 : "cc"); 167 if (x) 168 return 0; 169 return 1; 170 } 171 172 int test_ccnb(long nr, volatile long *addr) { 173 //CHECK-LABEL: @test_ccnb 174 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 175 int x; 176 asm("cmp %2,%1" 177 : "=@ccnb"(x), "=m"(*(volatile long *)(addr)) 178 : "r"(nr) 179 : "cc"); 180 if (x) 181 return 0; 182 return 1; 183 } 184 185 int test_ccnbe(long nr, volatile long *addr) { 186 //CHECK-LABEL: @test_ccnbe 187 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 188 int x; 189 asm("cmp %2,%1" 190 : "=@ccnbe"(x), "=m"(*(volatile long *)(addr)) 191 : "r"(nr) 192 : "cc"); 193 if (x) 194 return 0; 195 return 1; 196 } 197 198 int test_ccnc(long nr, volatile long *addr) { 199 //CHECK-LABEL: @test_ccnc 200 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 201 int x; 202 asm("cmp %2,%1" 203 : "=@ccnc"(x), "=m"(*(volatile long *)(addr)) 204 : "r"(nr) 205 : "cc"); 206 if (x) 207 return 0; 208 return 1; 209 } 210 211 int test_ccne(long nr, volatile long *addr) { 212 //CHECK-LABEL: @test_ccne 213 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccne},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 214 int x; 215 asm("cmp %2,%1" 216 : "=@ccne"(x), "=m"(*(volatile long *)(addr)) 217 : "r"(nr) 218 : "cc"); 219 if (x) 220 return 0; 221 return 1; 222 } 223 224 int test_ccnz(long nr, volatile long *addr) { 225 //CHECK-LABEL: @test_ccnz 226 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 227 int x; 228 asm("cmp %2,%1" 229 : "=@ccnz"(x), "=m"(*(volatile long *)(addr)) 230 : "r"(nr) 231 : "cc"); 232 if (x) 233 return 0; 234 return 1; 235 } 236 237 int test_ccng(long nr, volatile long *addr) { 238 //CHECK-LABEL: @test_ccng 239 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccng},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 240 int x; 241 asm("cmp %2,%1" 242 : "=@ccng"(x), "=m"(*(volatile long *)(addr)) 243 : "r"(nr) 244 : "cc"); 245 if (x) 246 return 0; 247 return 1; 248 } 249 250 int test_ccnge(long nr, volatile long *addr) { 251 //CHECK-LABEL: @test_ccnge 252 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 253 int x; 254 asm("cmp %2,%1" 255 : "=@ccnge"(x), "=m"(*(volatile long *)(addr)) 256 : "r"(nr) 257 : "cc"); 258 if (x) 259 return 0; 260 return 1; 261 } 262 263 int test_ccnl(long nr, volatile long *addr) { 264 //CHECK-LABEL: @test_ccnl 265 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 266 int x; 267 asm("cmp %2,%1" 268 : "=@ccnl"(x), "=m"(*(volatile long *)(addr)) 269 : "r"(nr) 270 : "cc"); 271 if (x) 272 return 0; 273 return 1; 274 } 275 276 int test_ccnle(long nr, volatile long *addr) { 277 //CHECK-LABEL: @test_ccnle 278 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 279 int x; 280 asm("cmp %2,%1" 281 : "=@ccnle"(x), "=m"(*(volatile long *)(addr)) 282 : "r"(nr) 283 : "cc"); 284 if (x) 285 return 0; 286 return 1; 287 } 288 289 int test_ccno(long nr, volatile long *addr) { 290 //CHECK-LABEL: @test_ccno 291 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccno},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 292 int x; 293 asm("cmp %2,%1" 294 : "=@ccno"(x), "=m"(*(volatile long *)(addr)) 295 : "r"(nr) 296 : "cc"); 297 if (x) 298 return 0; 299 return 1; 300 } 301 302 int test_ccnp(long nr, volatile long *addr) { 303 //CHECK-LABEL: @test_ccnp 304 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccnp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 305 int x; 306 asm("cmp %2,%1" 307 : "=@ccnp"(x), "=m"(*(volatile long *)(addr)) 308 : "r"(nr) 309 : "cc"); 310 if (x) 311 return 0; 312 return 1; 313 } 314 315 int test_ccns(long nr, volatile long *addr) { 316 //CHECK-LABEL: @test_ccns 317 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccns},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 318 int x; 319 asm("cmp %2,%1" 320 : "=@ccns"(x), "=m"(*(volatile long *)(addr)) 321 : "r"(nr) 322 : "cc"); 323 if (x) 324 return 0; 325 return 1; 326 } 327 328 int test_cco(long nr, volatile long *addr) { 329 //CHECK-LABEL: @test_cco 330 //CHECK: = tail call i32 asm "cmp $2,$1", "={@cco},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 331 int x; 332 asm("cmp %2,%1" 333 : "=@cco"(x), "=m"(*(volatile long *)(addr)) 334 : "r"(nr) 335 : "cc"); 336 if (x) 337 return 0; 338 return 1; 339 } 340 341 int test_ccp(long nr, volatile long *addr) { 342 //CHECK-LABEL: @test_ccp 343 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 344 int x; 345 asm("cmp %2,%1" 346 : "=@ccp"(x), "=m"(*(volatile long *)(addr)) 347 : "r"(nr) 348 : "cc"); 349 if (x) 350 return 0; 351 return 1; 352 } 353 354 int test_ccs(long nr, volatile long *addr) { 355 //CHECK-LABEL: @test_ccs 356 //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccs},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) 357 int x; 358 asm("cmp %2,%1" 359 : "=@ccs"(x), "=m"(*(volatile long *)(addr)) 360 : "r"(nr) 361 : "cc"); 362 if (x) 363 return 0; 364 return 1; 365 } 366 367 _Bool check_no_clobber_conflicts() { 368 //CHECK-LABEL: @check_no_clobber_conflicts 369 //CHECK: = tail call i8 asm "", "={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"() 370 _Bool b; 371 asm("" 372 : "=@cce"(b) 373 : 374 : "cx"); 375 return b; 376 } 377