Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 --show-mc-encoding| FileCheck %s --check-prefix=NOADX --check-prefix=CHECK
      2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=broadwell --show-mc-encoding| FileCheck %s --check-prefix=ADX --check-prefix=CHECK
      3 
      4 declare i8 @llvm.x86.addcarryx.u32(i8, i32, i32, i8*)
      5 
      6 define i8 @test_addcarryx_u32(i8 %c, i32 %a, i32 %b, i8* %ptr) {
      7 ; CHECK-LABEL: test_addcarryx_u32
      8 ; CHECK: addb
      9 ; ADX: adcxl
     10 ; CHECK: setb
     11 ; CHECK: retq
     12   %ret = tail call i8 @llvm.x86.addcarryx.u32(i8 %c, i32 %a, i32 %b, i8* %ptr)
     13   ret i8 %ret;
     14 }
     15 
     16 declare i8 @llvm.x86.addcarryx.u64(i8, i64, i64, i8*)
     17 
     18 define i8 @test_addcarryx_u64(i8 %c, i64 %a, i64 %b, i8* %ptr) {
     19 ; CHECK-LABEL: test_addcarryx_u64
     20 ; CHECK: addb
     21 ; ADX: adcxq
     22 ; CHECK: setb
     23 ; CHECK: retq
     24   %ret = tail call i8 @llvm.x86.addcarryx.u64(i8 %c, i64 %a, i64 %b, i8* %ptr)
     25   ret i8 %ret;
     26 }
     27 
     28 declare i8 @llvm.x86.addcarry.u32(i8, i32, i32, i8*)
     29 
     30 define i8 @test_addcarry_u32(i8 %c, i32 %a, i32 %b, i8* %ptr) {
     31 ; CHECK-LABEL: test_addcarry_u32
     32 ; CHECK: addb
     33 ; ADX: adcxl
     34 ; NOADX: adcl
     35 ; CHECK: setb
     36 ; CHECK: retq
     37   %ret = tail call i8 @llvm.x86.addcarry.u32(i8 %c, i32 %a, i32 %b, i8* %ptr)
     38   ret i8 %ret;
     39 }
     40 
     41 declare i8 @llvm.x86.addcarry.u64(i8, i64, i64, i8*)
     42 
     43 define i8 @test_addcarry_u64(i8 %c, i64 %a, i64 %b, i8* %ptr) {
     44 ; CHECK-LABEL: test_addcarry_u64
     45 ; CHECK: addb
     46 ; ADX: adcxq
     47 ; NOADX: adcq
     48 ; CHECK: setb
     49 ; CHECK: retq
     50   %ret = tail call i8 @llvm.x86.addcarry.u64(i8 %c, i64 %a, i64 %b, i8* %ptr)
     51   ret i8 %ret;
     52 }
     53 
     54 declare i8 @llvm.x86.subborrow.u32(i8, i32, i32, i8*)
     55 
     56 define i8 @test_subborrow_u32(i8 %c, i32 %a, i32 %b, i8* %ptr) {
     57 ; CHECK-LABEL: test_subborrow_u32
     58 ; CHECK: addb
     59 ; CHECK: sbbl
     60 ; CHECK: setb
     61 ; CHECK: retq
     62   %ret = tail call i8 @llvm.x86.subborrow.u32(i8 %c, i32 %a, i32 %b, i8* %ptr)
     63   ret i8 %ret;
     64 }
     65 
     66 declare i8 @llvm.x86.subborrow.u64(i8, i64, i64, i8*)
     67 
     68 define i8 @test_subborrow_u64(i8 %c, i64 %a, i64 %b, i8* %ptr) {
     69 ; CHECK-LABEL: test_subborrow_u64
     70 ; CHECK: addb
     71 ; CHECK: sbbq
     72 ; CHECK: setb
     73 ; CHECK: retq
     74   %ret = tail call i8 @llvm.x86.subborrow.u64(i8 %c, i64 %a, i64 %b, i8* %ptr)
     75   ret i8 %ret;
     76 }
     77 
     78