blob: 793b771ac4fb853de11772377356f414fbbde56b [file] [log] [blame]
Reed Kotler515e9372013-05-16 02:17:42 +00001; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static < %s | FileCheck %s -check-prefix=stel
2
3@x = external global float
4@xd = external global double
5@y = external global float
6@yd = external global double
7@ret_sf = external global float
8@ret_df = external global double
9@ret_sc = external global { float, float }
10@ret_dc = external global { double, double }
11
12; Function Attrs: nounwind
13define void @v_sf(float %p) #0 {
14entry:
15 %p.addr = alloca float, align 4
16 store float %p, float* %p.addr, align 4
17 %0 = load float* %p.addr, align 4
18 store float %0, float* @x, align 4
19 ret void
20}
21; stel: .section .mips16.fn.v_sf,"ax",@progbits
22; stel: .ent __fn_stub_v_sf
23; stel: la $25, v_sf
24; stel: mfc1 $4,$f12
25; stel: jr $25
26; stel: __fn_local_v_sf = v_sf
27; stel: .end __fn_stub_v_sf
28
29declare i32 @printf(i8*, ...) #1
30
31; Function Attrs: nounwind
32define void @v_df(double %p) #0 {
33entry:
34 %p.addr = alloca double, align 8
35 store double %p, double* %p.addr, align 8
36 %0 = load double* %p.addr, align 8
37 store double %0, double* @xd, align 8
38 ret void
39}
40
41; stel: .section .mips16.fn.v_df,"ax",@progbits
42; stel: .ent __fn_stub_v_df
43; stel: la $25, v_df
44; stel: mfc1 $4,$f12
45; stel: mfc1 $5,$f13
46; stel: jr $25
47; stel: __fn_local_v_df = v_df
48; stel: .end __fn_stub_v_df
49
50; Function Attrs: nounwind
51define void @v_sf_sf(float %p1, float %p2) #0 {
52entry:
53 %p1.addr = alloca float, align 4
54 %p2.addr = alloca float, align 4
55 store float %p1, float* %p1.addr, align 4
56 store float %p2, float* %p2.addr, align 4
57 %0 = load float* %p1.addr, align 4
58 store float %0, float* @x, align 4
59 %1 = load float* %p2.addr, align 4
60 store float %1, float* @y, align 4
61 ret void
62}
63
64; stel: .section .mips16.fn.v_sf_sf,"ax",@progbits
65; stel: .ent __fn_stub_v_sf_sf
66; stel: la $25, v_sf_sf
67; stel: mfc1 $4,$f12
68; stel: mfc1 $5,$f14
69; stel: jr $25
70; stel: __fn_local_v_sf_sf = v_sf_sf
71; stel: .end __fn_stub_v_sf_sf
72
73; Function Attrs: nounwind
74define void @v_sf_df(float %p1, double %p2) #0 {
75entry:
76 %p1.addr = alloca float, align 4
77 %p2.addr = alloca double, align 8
78 store float %p1, float* %p1.addr, align 4
79 store double %p2, double* %p2.addr, align 8
80 %0 = load float* %p1.addr, align 4
81 store float %0, float* @x, align 4
82 %1 = load double* %p2.addr, align 8
83 store double %1, double* @yd, align 8
84 ret void
85}
86
87; stel: .section .mips16.fn.v_sf_df,"ax",@progbits
88; stel: .ent __fn_stub_v_sf_df
89; stel: la $25, v_sf_df
90; stel: mfc1 $4,$f12
91; stel: mfc1 $6,$f14
92; stel: mfc1 $7,$f15
93; stel: jr $25
94; stel: __fn_local_v_sf_df = v_sf_df
95; stel: .end __fn_stub_v_sf_df
96
97; Function Attrs: nounwind
98define void @v_df_sf(double %p1, float %p2) #0 {
99entry:
100 %p1.addr = alloca double, align 8
101 %p2.addr = alloca float, align 4
102 store double %p1, double* %p1.addr, align 8
103 store float %p2, float* %p2.addr, align 4
104 %0 = load double* %p1.addr, align 8
105 store double %0, double* @xd, align 8
106 %1 = load float* %p2.addr, align 4
107 store float %1, float* @y, align 4
108 ret void
109}
110
111; stel: .section .mips16.fn.v_df_sf,"ax",@progbits
112; stel: .ent __fn_stub_v_df_sf
113; stel: la $25, v_df_sf
114; stel: mfc1 $4,$f12
115; stel: mfc1 $5,$f13
116; stel: mfc1 $6,$f14
117; stel: jr $25
118; stel: __fn_local_v_df_sf = v_df_sf
119; stel: .end __fn_stub_v_df_sf
120
121; Function Attrs: nounwind
122define void @v_df_df(double %p1, double %p2) #0 {
123entry:
124 %p1.addr = alloca double, align 8
125 %p2.addr = alloca double, align 8
126 store double %p1, double* %p1.addr, align 8
127 store double %p2, double* %p2.addr, align 8
128 %0 = load double* %p1.addr, align 8
129 store double %0, double* @xd, align 8
130 %1 = load double* %p2.addr, align 8
131 store double %1, double* @yd, align 8
132 ret void
133}
134
135; stel: .section .mips16.fn.v_df_df,"ax",@progbits
136; stel: .ent __fn_stub_v_df_df
137; stel: la $25, v_df_df
138; stel: mfc1 $4,$f12
139; stel: mfc1 $5,$f13
140; stel: mfc1 $6,$f14
141; stel: mfc1 $7,$f15
142; stel: jr $25
143; stel: __fn_local_v_df_df = v_df_df
144; stel: .end __fn_stub_v_df_df
145
146; Function Attrs: nounwind
147define float @sf_v() #0 {
148entry:
149 %0 = load float* @ret_sf, align 4
150 ret float %0
151}
152
153; Function Attrs: nounwind
154define float @sf_sf(float %p) #0 {
155entry:
156 %p.addr = alloca float, align 4
157 store float %p, float* %p.addr, align 4
158 %0 = load float* %p.addr, align 4
159 store float %0, float* @x, align 4
160 %1 = load float* @ret_sf, align 4
161 ret float %1
162}
163
164
165; stel: .section .mips16.fn.sf_sf,"ax",@progbits
166; stel: .ent __fn_stub_sf_sf
167; stel: la $25, sf_sf
168; stel: mfc1 $4,$f12
169; stel: jr $25
170; stel: __fn_local_sf_sf = sf_sf
171; stel: .end __fn_stub_sf_sf
172
173
174; Function Attrs: nounwind
175define float @sf_df(double %p) #0 {
176entry:
177 %p.addr = alloca double, align 8
178 store double %p, double* %p.addr, align 8
179 %0 = load double* %p.addr, align 8
180 store double %0, double* @xd, align 8
181 %1 = load float* @ret_sf, align 4
182 ret float %1
183}
184
185; stel: .section .mips16.fn.sf_df,"ax",@progbits
186; stel: .ent __fn_stub_sf_df
187; stel: la $25, sf_df
188; stel: mfc1 $4,$f12
189; stel: mfc1 $5,$f13
190; stel: jr $25
191; stel: __fn_local_sf_df = sf_df
192; stel: .end __fn_stub_sf_df
193
194; Function Attrs: nounwind
195define float @sf_sf_sf(float %p1, float %p2) #0 {
196entry:
197 %p1.addr = alloca float, align 4
198 %p2.addr = alloca float, align 4
199 store float %p1, float* %p1.addr, align 4
200 store float %p2, float* %p2.addr, align 4
201 %0 = load float* %p1.addr, align 4
202 store float %0, float* @x, align 4
203 %1 = load float* %p2.addr, align 4
204 store float %1, float* @y, align 4
205 %2 = load float* @ret_sf, align 4
206 ret float %2
207}
208
209; stel: .section .mips16.fn.sf_sf_sf,"ax",@progbits
210; stel: .ent __fn_stub_sf_sf_sf
211; stel: la $25, sf_sf_sf
212; stel: mfc1 $4,$f12
213; stel: mfc1 $5,$f14
214; stel: jr $25
215; stel: __fn_local_sf_sf_sf = sf_sf_sf
216; stel: .end __fn_stub_sf_sf_sf
217
218; Function Attrs: nounwind
219define float @sf_sf_df(float %p1, double %p2) #0 {
220entry:
221 %p1.addr = alloca float, align 4
222 %p2.addr = alloca double, align 8
223 store float %p1, float* %p1.addr, align 4
224 store double %p2, double* %p2.addr, align 8
225 %0 = load float* %p1.addr, align 4
226 store float %0, float* @x, align 4
227 %1 = load double* %p2.addr, align 8
228 store double %1, double* @yd, align 8
229 %2 = load float* @ret_sf, align 4
230 ret float %2
231}
232
233; stel: .section .mips16.fn.sf_sf_df,"ax",@progbits
234; stel: .ent __fn_stub_sf_sf_df
235; stel: la $25, sf_sf_df
236; stel: mfc1 $4,$f12
237; stel: mfc1 $6,$f14
238; stel: mfc1 $7,$f15
239; stel: jr $25
240; stel: __fn_local_sf_sf_df = sf_sf_df
241; stel: .end __fn_stub_sf_sf_df
242
243; Function Attrs: nounwind
244define float @sf_df_sf(double %p1, float %p2) #0 {
245entry:
246 %p1.addr = alloca double, align 8
247 %p2.addr = alloca float, align 4
248 store double %p1, double* %p1.addr, align 8
249 store float %p2, float* %p2.addr, align 4
250 %0 = load double* %p1.addr, align 8
251 store double %0, double* @xd, align 8
252 %1 = load float* %p2.addr, align 4
253 store float %1, float* @y, align 4
254 %2 = load float* @ret_sf, align 4
255 ret float %2
256}
257
258; stel: .section .mips16.fn.sf_df_sf,"ax",@progbits
259; stel: .ent __fn_stub_sf_df_sf
260; stel: la $25, sf_df_sf
261; stel: mfc1 $4,$f12
262; stel: mfc1 $5,$f13
263; stel: mfc1 $6,$f14
264; stel: jr $25
265; stel: __fn_local_sf_df_sf = sf_df_sf
266; stel: .end __fn_stub_sf_df_sf
267
268; Function Attrs: nounwind
269define float @sf_df_df(double %p1, double %p2) #0 {
270entry:
271 %p1.addr = alloca double, align 8
272 %p2.addr = alloca double, align 8
273 store double %p1, double* %p1.addr, align 8
274 store double %p2, double* %p2.addr, align 8
275 %0 = load double* %p1.addr, align 8
276 store double %0, double* @xd, align 8
277 %1 = load double* %p2.addr, align 8
278 store double %1, double* @yd, align 8
279 %2 = load float* @ret_sf, align 4
280 ret float %2
281}
282
283; stel: .section .mips16.fn.sf_df_df,"ax",@progbits
284; stel: .ent __fn_stub_sf_df_df
285; stel: la $25, sf_df_df
286; stel: mfc1 $4,$f12
287; stel: mfc1 $5,$f13
288; stel: mfc1 $6,$f14
289; stel: mfc1 $7,$f15
290; stel: jr $25
291; stel: __fn_local_sf_df_df = sf_df_df
292; stel: .end __fn_stub_sf_df_df
293
294attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }