1; RUN: llc -mcpu=pwr4 -mattr=-altivec -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \
2; RUN: -stop-after=machine-cp < %s | FileCheck \
3; RUN: --check-prefix=32BIT %s
4
5; RUN: llc -mcpu=pwr4 -mattr=-altivec -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \
6; RUN: -stop-after=machine-cp < %s | FileCheck \
7; RUN: --check-prefix=64BIT %s
8
9define i64 @call_divdi3(i64 %p, i64 %num) {
10entry:
11  %div = sdiv i64 %p, %num
12  ret i64 %div
13}
14
15; 32BIT: BL_NOP <mcsymbol .__divdi3>
16
17define i64 @call_fixunsdfdi(double %p) {
18entry:
19  %conv = fptoui double %p to i64
20  ret i64 %conv
21}
22
23; 32BIT: BL_NOP <mcsymbol .__fixunsdfdi>
24
25define double @call_floatundidf(i64 %p) {
26entry:
27  %conv = uitofp i64 %p to double
28  ret double %conv
29}
30
31; 32BIT: BL_NOP <mcsymbol .__floatundidf>
32
33define float @call_floatundisf(i64 %p) {
34entry:
35  %conv = uitofp i64 %p to float
36  ret float %conv
37}
38
39; 32BIT: BL_NOP <mcsymbol .__floatundisf>
40
41define i64 @call_moddi3(i64 %p, i64 %num) {
42entry:
43  %rem = srem i64 %p, %num
44  ret i64 %rem
45}
46
47; 32BIT: BL_NOP <mcsymbol .__moddi3>
48
49define i64 @call_udivdi3(i64 %p, i64 %q) {
50  %1 = udiv i64 %p, %q
51  ret i64 %1
52}
53
54; 32BIT: BL_NOP <mcsymbol .__udivdi3>
55
56define i64 @call_umoddi3(i64 %p, i64 %num) {
57entry:
58  %rem = urem i64 %p, %num
59  ret i64 %rem
60}
61
62; 32BIT: BL_NOP <mcsymbol .__umoddi3>
63
64define double @call_ceil(double %n) {
65entry:
66  %0 = call double @llvm.ceil.f64(double %n)
67  ret double %0
68}
69
70declare double @llvm.ceil.f64(double)
71
72; 32BIT: BL_NOP <mcsymbol .ceil>
73; 64BIT: BL8_NOP <mcsymbol .ceil>
74
75define double @call_floor(double %n) {
76entry:
77  %0 = call double @llvm.floor.f64(double %n)
78  ret double %0
79}
80
81declare double @llvm.floor.f64(double)
82
83; 32BIT: BL_NOP <mcsymbol .floor>
84; 64BIT: BL8_NOP <mcsymbol .floor>
85
86define void @call_memcpy(i8* %p, i8* %q, i32 %n) {
87entry:
88  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false)
89  ret void
90}
91
92declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1)
93
94; 32BIT: BL_NOP <mcsymbol .memcpy>
95; 64BIT: BL8_NOP <mcsymbol .memcpy>
96
97define void @call_memmove(i8* %p, i8* %q, i32 %n) {
98entry:
99  call void @llvm.memmove.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i1 false)
100  ret void
101}
102
103declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1)
104
105; 32BIT: BL_NOP <mcsymbol .memmove>
106; 64BIT: BL8_NOP <mcsymbol .memmove>
107
108define void @call_memset(i8* %p, i8 %q, i32 %n) #0 {
109entry:
110  call void @llvm.memset.p0i8.i32(i8* %p, i8 %q, i32 %n, i1 false)
111  ret void
112}
113
114declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1)
115
116; 32BIT: BL_NOP <mcsymbol .memset>
117; 64BIT: BL8_NOP <mcsymbol .memset>
118
119define double @call_round(double %n) {
120entry:
121  %0 = call double @llvm.round.f64(double %n)
122  ret double %0
123}
124
125declare double @llvm.round.f64(double)
126
127; 32BIT: BL_NOP <mcsymbol .round>
128; 64BIT: BL8_NOP <mcsymbol .round>
129