Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s
      2 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s
      3 
      4 ; Check all soft floating point library function calls.
      5 
      6 @vf64 = common global double 0.000000e+00, align 8
      7 @vf128 = common global fp128 0xL00000000000000000000000000000000, align 16
      8 
      9 define void @Test128Add(fp128 %d1, fp128 %d2) {
     10 entry:
     11   %add = fadd fp128 %d1, %d2
     12   store fp128 %add, fp128* @vf128, align 16
     13   ret void
     14 ; CHECK-LABEL: Test128Add:
     15 ; CHECK:       callq __addtf3
     16 ; CHECK-NEXT:  movaps %xmm0, vf128(%rip)
     17 ; CHECK:       retq
     18 }
     19 
     20 define void @Test128_1Add(fp128 %d1){
     21 entry:
     22   %0 = load fp128, fp128* @vf128, align 16
     23   %add = fadd fp128 %0, %d1
     24   store fp128 %add, fp128* @vf128, align 16
     25   ret void
     26 ; CHECK-LABEL: Test128_1Add:
     27 ; CHECK:       movaps  %xmm0, %xmm1
     28 ; CHECK-NEXT:  movaps  vf128(%rip), %xmm0
     29 ; CHECK-NEXT:  callq   __addtf3
     30 ; CHECK-NEXT:  movaps  %xmm0, vf128(%rip)
     31 ; CHECK:       retq
     32 }
     33 
     34 define void @Test128Sub(fp128 %d1, fp128 %d2){
     35 entry:
     36   %sub = fsub fp128 %d1, %d2
     37   store fp128 %sub, fp128* @vf128, align 16
     38   ret void
     39 ; CHECK-LABEL: Test128Sub:
     40 ; CHECK:       callq __subtf3
     41 ; CHECK-NEXT:  movaps %xmm0, vf128(%rip)
     42 ; CHECK:       retq
     43 }
     44 
     45 define void @Test128_1Sub(fp128 %d1){
     46 entry:
     47   %0 = load fp128, fp128* @vf128, align 16
     48   %sub = fsub fp128 %0, %d1
     49   store fp128 %sub, fp128* @vf128, align 16
     50   ret void
     51 ; CHECK-LABEL: Test128_1Sub:
     52 ; CHECK:       movaps  %xmm0, %xmm1
     53 ; CHECK-NEXT:  movaps  vf128(%rip), %xmm0
     54 ; CHECK-NEXT:  callq   __subtf3
     55 ; CHECK-NEXT:  movaps  %xmm0, vf128(%rip)
     56 ; CHECK:       retq
     57 }
     58 
     59 define void @Test128Mul(fp128 %d1, fp128 %d2){
     60 entry:
     61   %mul = fmul fp128 %d1, %d2
     62   store fp128 %mul, fp128* @vf128, align 16
     63   ret void
     64 ; CHECK-LABEL: Test128Mul:
     65 ; CHECK:       callq __multf3
     66 ; CHECK-NEXT:  movaps %xmm0, vf128(%rip)
     67 ; CHECK:       retq
     68 }
     69 
     70 define void @Test128_1Mul(fp128 %d1){
     71 entry:
     72   %0 = load fp128, fp128* @vf128, align 16
     73   %mul = fmul fp128 %0, %d1
     74   store fp128 %mul, fp128* @vf128, align 16
     75   ret void
     76 ; CHECK-LABEL: Test128_1Mul:
     77 ; CHECK:       movaps  %xmm0, %xmm1
     78 ; CHECK-NEXT:  movaps  vf128(%rip), %xmm0
     79 ; CHECK-NEXT:  callq   __multf3
     80 ; CHECK-NEXT:  movaps  %xmm0, vf128(%rip)
     81 ; CHECK:       retq
     82 }
     83 
     84 define void @Test128Div(fp128 %d1, fp128 %d2){
     85 entry:
     86   %div = fdiv fp128 %d1, %d2
     87   store fp128 %div, fp128* @vf128, align 16
     88   ret void
     89 ; CHECK-LABEL: Test128Div:
     90 ; CHECK:       callq __divtf3
     91 ; CHECK-NEXT:  movaps %xmm0, vf128(%rip)
     92 ; CHECK:       retq
     93 }
     94 
     95 define void @Test128_1Div(fp128 %d1){
     96 entry:
     97   %0 = load fp128, fp128* @vf128, align 16
     98   %div = fdiv fp128 %0, %d1
     99   store fp128 %div, fp128* @vf128, align 16
    100   ret void
    101 ; CHECK-LABEL: Test128_1Div:
    102 ; CHECK:       movaps  %xmm0, %xmm1
    103 ; CHECK-NEXT:  movaps  vf128(%rip), %xmm0
    104 ; CHECK-NEXT:  callq   __divtf3
    105 ; CHECK-NEXT:  movaps  %xmm0, vf128(%rip)
    106 ; CHECK:       retq
    107 }
    108