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
4 ; Check all soft floating point library function calls.
6 @vf64 = common global double 0.000000e+00, align 8
7 @vf128 = common global fp128 0xL00000000000000000000000000000000, align 16
9 define void @Test128Add(fp128 %d1, fp128 %d2) {
11 %add = fadd fp128 %d1, %d2
12 store fp128 %add, fp128* @vf128, align 16
14 ; CHECK-LABEL: Test128Add:
15 ; CHECK: callq __addtf3
16 ; CHECK-NEXT: movaps %xmm0, vf128(%rip)
20 define void @Test128_1Add(fp128 %d1){
22 %0 = load fp128, fp128* @vf128, align 16
23 %add = fadd fp128 %0, %d1
24 store fp128 %add, fp128* @vf128, align 16
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)
34 define void @Test128Sub(fp128 %d1, fp128 %d2){
36 %sub = fsub fp128 %d1, %d2
37 store fp128 %sub, fp128* @vf128, align 16
39 ; CHECK-LABEL: Test128Sub:
40 ; CHECK: callq __subtf3
41 ; CHECK-NEXT: movaps %xmm0, vf128(%rip)
45 define void @Test128_1Sub(fp128 %d1){
47 %0 = load fp128, fp128* @vf128, align 16
48 %sub = fsub fp128 %0, %d1
49 store fp128 %sub, fp128* @vf128, align 16
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)
59 define void @Test128Mul(fp128 %d1, fp128 %d2){
61 %mul = fmul fp128 %d1, %d2
62 store fp128 %mul, fp128* @vf128, align 16
64 ; CHECK-LABEL: Test128Mul:
65 ; CHECK: callq __multf3
66 ; CHECK-NEXT: movaps %xmm0, vf128(%rip)
70 define void @Test128_1Mul(fp128 %d1){
72 %0 = load fp128, fp128* @vf128, align 16
73 %mul = fmul fp128 %0, %d1
74 store fp128 %mul, fp128* @vf128, align 16
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)
84 define void @Test128Div(fp128 %d1, fp128 %d2){
86 %div = fdiv fp128 %d1, %d2
87 store fp128 %div, fp128* @vf128, align 16
89 ; CHECK-LABEL: Test128Div:
90 ; CHECK: callq __divtf3
91 ; CHECK-NEXT: movaps %xmm0, vf128(%rip)
95 define void @Test128_1Div(fp128 %d1){
97 %0 = load fp128, fp128* @vf128, align 16
98 %div = fdiv fp128 %0, %d1
99 store fp128 %div, fp128* @vf128, align 16
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)