1 ; RUN: llc < %s -O0 -fast-isel-abort -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARM
2 ; RUN: llc < %s -O0 -fast-isel-abort -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB
6 define void @sitofp_single_i32(i32 %a, float %b) nounwind ssp {
8 ; ARM: sitofp_single_i32
10 ; ARM: vcvt.f32.s32 s0, s0
11 ; THUMB: sitofp_single_i32
13 ; THUMB: vcvt.f32.s32 s0, s0
14 %b.addr = alloca float, align 4
15 %conv = sitofp i32 %a to float
16 store float %conv, float* %b.addr, align 4
20 define void @sitofp_single_i16(i16 %a, float %b) nounwind ssp {
22 ; ARM: sitofp_single_i16
25 ; ARM: vcvt.f32.s32 s0, s0
26 ; THUMB: sitofp_single_i16
29 ; THUMB: vcvt.f32.s32 s0, s0
30 %b.addr = alloca float, align 4
31 %conv = sitofp i16 %a to float
32 store float %conv, float* %b.addr, align 4
36 define void @sitofp_single_i8(i8 %a) nounwind ssp {
38 ; ARM: sitofp_single_i8
41 ; ARM: vcvt.f32.s32 s0, s0
42 ; THUMB: sitofp_single_i8
45 ; THUMB: vcvt.f32.s32 s0, s0
46 %b.addr = alloca float, align 4
47 %conv = sitofp i8 %a to float
48 store float %conv, float* %b.addr, align 4
52 define void @sitofp_double_i32(i32 %a, double %b) nounwind ssp {
54 ; ARM: sitofp_double_i32
56 ; ARM: vcvt.f64.s32 d16, s0
57 ; THUMB: sitofp_double_i32
59 ; THUMB: vcvt.f64.s32 d16, s0
60 %b.addr = alloca double, align 8
61 %conv = sitofp i32 %a to double
62 store double %conv, double* %b.addr, align 8
66 define void @sitofp_double_i16(i16 %a, double %b) nounwind ssp {
68 ; ARM: sitofp_double_i16
71 ; ARM: vcvt.f64.s32 d16, s0
72 ; THUMB: sitofp_double_i16
75 ; THUMB: vcvt.f64.s32 d16, s0
76 %b.addr = alloca double, align 8
77 %conv = sitofp i16 %a to double
78 store double %conv, double* %b.addr, align 8
82 define void @sitofp_double_i8(i8 %a, double %b) nounwind ssp {
84 ; ARM: sitofp_double_i8
87 ; ARM: vcvt.f64.s32 d16, s0
88 ; THUMB: sitofp_double_i8
91 ; THUMB: vcvt.f64.s32 d16, s0
92 %b.addr = alloca double, align 8
93 %conv = sitofp i8 %a to double
94 store double %conv, double* %b.addr, align 8
100 define void @uitofp_single_i32(i32 %a, float %b) nounwind ssp {
102 ; ARM: uitofp_single_i32
104 ; ARM: vcvt.f32.u32 s0, s0
105 ; THUMB: uitofp_single_i32
107 ; THUMB: vcvt.f32.u32 s0, s0
108 %b.addr = alloca float, align 4
109 %conv = uitofp i32 %a to float
110 store float %conv, float* %b.addr, align 4
114 define void @uitofp_single_i16(i16 %a, float %b) nounwind ssp {
116 ; ARM: uitofp_single_i16
119 ; ARM: vcvt.f32.u32 s0, s0
120 ; THUMB: uitofp_single_i16
123 ; THUMB: vcvt.f32.u32 s0, s0
124 %b.addr = alloca float, align 4
125 %conv = uitofp i16 %a to float
126 store float %conv, float* %b.addr, align 4
130 define void @uitofp_single_i8(i8 %a) nounwind ssp {
132 ; ARM: uitofp_single_i8
135 ; ARM: vcvt.f32.u32 s0, s0
136 ; THUMB: uitofp_single_i8
139 ; THUMB: vcvt.f32.u32 s0, s0
140 %b.addr = alloca float, align 4
141 %conv = uitofp i8 %a to float
142 store float %conv, float* %b.addr, align 4
146 define void @uitofp_double_i32(i32 %a, double %b) nounwind ssp {
148 ; ARM: uitofp_double_i32
150 ; ARM: vcvt.f64.u32 d16, s0
151 ; THUMB: uitofp_double_i32
153 ; THUMB: vcvt.f64.u32 d16, s0
154 %b.addr = alloca double, align 8
155 %conv = uitofp i32 %a to double
156 store double %conv, double* %b.addr, align 8
160 define void @uitofp_double_i16(i16 %a, double %b) nounwind ssp {
162 ; ARM: uitofp_double_i16
165 ; ARM: vcvt.f64.u32 d16, s0
166 ; THUMB: uitofp_double_i16
169 ; THUMB: vcvt.f64.u32 d16, s0
170 %b.addr = alloca double, align 8
171 %conv = uitofp i16 %a to double
172 store double %conv, double* %b.addr, align 8
176 define void @uitofp_double_i8(i8 %a, double %b) nounwind ssp {
178 ; ARM: uitofp_double_i8
181 ; ARM: vcvt.f64.u32 d16, s0
182 ; THUMB: uitofp_double_i8
185 ; THUMB: vcvt.f64.u32 d16, s0
186 %b.addr = alloca double, align 8
187 %conv = uitofp i8 %a to double
188 store double %conv, double* %b.addr, align 8
194 define void @fptosi_float(float %a) nounwind ssp {
197 ; ARM: vcvt.s32.f32 s0, s0
198 ; THUMB: fptosi_float
199 ; THUMB: vcvt.s32.f32 s0, s0
200 %b.addr = alloca i32, align 4
201 %conv = fptosi float %a to i32
202 store i32 %conv, i32* %b.addr, align 4
206 define void @fptosi_double(double %a) nounwind ssp {
209 ; ARM: vcvt.s32.f64 s0, d16
210 ; THUMB: fptosi_double
211 ; THUMB: vcvt.s32.f64 s0, d16
212 %b.addr = alloca i32, align 8
213 %conv = fptosi double %a to i32
214 store i32 %conv, i32* %b.addr, align 8
220 define void @fptoui_float(float %a) nounwind ssp {
223 ; ARM: vcvt.u32.f32 s0, s0
224 ; THUMB: fptoui_float
225 ; THUMB: vcvt.u32.f32 s0, s0
226 %b.addr = alloca i32, align 4
227 %conv = fptoui float %a to i32
228 store i32 %conv, i32* %b.addr, align 4
232 define void @fptoui_double(double %a) nounwind ssp {
235 ; ARM: vcvt.u32.f64 s0, d16
236 ; THUMB: fptoui_double
237 ; THUMB: vcvt.u32.f64 s0, d16
238 %b.addr = alloca i32, align 8
239 %conv = fptoui double %a to i32
240 store i32 %conv, i32* %b.addr, align 8