1 ; RUN: llc < %s -verify-machineinstrs -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARM
2 ; RUN: llc < %s -verify-machineinstrs -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=ARM
3 ; RUN: llc < %s -verify-machineinstrs -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB
7 define void @sitofp_single_i32(i32 %a, float %b) nounwind ssp {
9 ; ARM: sitofp_single_i32
11 ; ARM: vcvt.f32.s32 s0, s0
12 ; THUMB: sitofp_single_i32
14 ; THUMB: vcvt.f32.s32 s0, s0
15 %b.addr = alloca float, align 4
16 %conv = sitofp i32 %a to float
17 store float %conv, float* %b.addr, align 4
21 define void @sitofp_single_i16(i16 %a, float %b) nounwind ssp {
23 ; ARM: sitofp_single_i16
26 ; ARM: vcvt.f32.s32 s0, s0
27 ; THUMB: sitofp_single_i16
30 ; THUMB: vcvt.f32.s32 s0, s0
31 %b.addr = alloca float, align 4
32 %conv = sitofp i16 %a to float
33 store float %conv, float* %b.addr, align 4
37 define void @sitofp_single_i8(i8 %a) nounwind ssp {
39 ; ARM: sitofp_single_i8
42 ; ARM: vcvt.f32.s32 s0, s0
43 ; THUMB: sitofp_single_i8
46 ; THUMB: vcvt.f32.s32 s0, s0
47 %b.addr = alloca float, align 4
48 %conv = sitofp i8 %a to float
49 store float %conv, float* %b.addr, align 4
53 define void @sitofp_double_i32(i32 %a, double %b) nounwind ssp {
55 ; ARM: sitofp_double_i32
57 ; ARM: vcvt.f64.s32 d16, s0
58 ; THUMB: sitofp_double_i32
60 ; THUMB: vcvt.f64.s32 d16, s0
61 %b.addr = alloca double, align 8
62 %conv = sitofp i32 %a to double
63 store double %conv, double* %b.addr, align 8
67 define void @sitofp_double_i16(i16 %a, double %b) nounwind ssp {
69 ; ARM: sitofp_double_i16
72 ; ARM: vcvt.f64.s32 d16, s0
73 ; THUMB: sitofp_double_i16
76 ; THUMB: vcvt.f64.s32 d16, s0
77 %b.addr = alloca double, align 8
78 %conv = sitofp i16 %a to double
79 store double %conv, double* %b.addr, align 8
83 define void @sitofp_double_i8(i8 %a, double %b) nounwind ssp {
85 ; ARM: sitofp_double_i8
88 ; ARM: vcvt.f64.s32 d16, s0
89 ; THUMB: sitofp_double_i8
92 ; THUMB: vcvt.f64.s32 d16, s0
93 %b.addr = alloca double, align 8
94 %conv = sitofp i8 %a to double
95 store double %conv, double* %b.addr, align 8
101 define void @uitofp_single_i32(i32 %a, float %b) nounwind ssp {
103 ; ARM: uitofp_single_i32
105 ; ARM: vcvt.f32.u32 s0, s0
106 ; THUMB: uitofp_single_i32
108 ; THUMB: vcvt.f32.u32 s0, s0
109 %b.addr = alloca float, align 4
110 %conv = uitofp i32 %a to float
111 store float %conv, float* %b.addr, align 4
115 define void @uitofp_single_i16(i16 %a, float %b) nounwind ssp {
117 ; ARM: uitofp_single_i16
120 ; ARM: vcvt.f32.u32 s0, s0
121 ; THUMB: uitofp_single_i16
124 ; THUMB: vcvt.f32.u32 s0, s0
125 %b.addr = alloca float, align 4
126 %conv = uitofp i16 %a to float
127 store float %conv, float* %b.addr, align 4
131 define void @uitofp_single_i8(i8 %a) nounwind ssp {
133 ; ARM: uitofp_single_i8
134 ; ARM: and r0, r0, #255
136 ; ARM: vcvt.f32.u32 s0, s0
137 ; THUMB: uitofp_single_i8
138 ; THUMB: and r0, r0, #255
140 ; THUMB: vcvt.f32.u32 s0, s0
141 %b.addr = alloca float, align 4
142 %conv = uitofp i8 %a to float
143 store float %conv, float* %b.addr, align 4
147 define void @uitofp_double_i32(i32 %a, double %b) nounwind ssp {
149 ; ARM: uitofp_double_i32
151 ; ARM: vcvt.f64.u32 d16, s0
152 ; THUMB: uitofp_double_i32
154 ; THUMB: vcvt.f64.u32 d16, s0
155 %b.addr = alloca double, align 8
156 %conv = uitofp i32 %a to double
157 store double %conv, double* %b.addr, align 8
161 define void @uitofp_double_i16(i16 %a, double %b) nounwind ssp {
163 ; ARM: uitofp_double_i16
166 ; ARM: vcvt.f64.u32 d16, s0
167 ; THUMB: uitofp_double_i16
170 ; THUMB: vcvt.f64.u32 d16, s0
171 %b.addr = alloca double, align 8
172 %conv = uitofp i16 %a to double
173 store double %conv, double* %b.addr, align 8
177 define void @uitofp_double_i8(i8 %a, double %b) nounwind ssp {
179 ; ARM: uitofp_double_i8
180 ; ARM: and r0, r0, #255
182 ; ARM: vcvt.f64.u32 d16, s0
183 ; THUMB: uitofp_double_i8
184 ; THUMB: and r0, r0, #255
186 ; THUMB: vcvt.f64.u32 d16, s0
187 %b.addr = alloca double, align 8
188 %conv = uitofp i8 %a to double
189 store double %conv, double* %b.addr, align 8
195 define void @fptosi_float(float %a) nounwind ssp {
198 ; ARM: vcvt.s32.f32 s0, s0
199 ; THUMB: fptosi_float
200 ; THUMB: vcvt.s32.f32 s0, s0
201 %b.addr = alloca i32, align 4
202 %conv = fptosi float %a to i32
203 store i32 %conv, i32* %b.addr, align 4
207 define void @fptosi_double(double %a) nounwind ssp {
210 ; ARM: vcvt.s32.f64 s0, d16
211 ; THUMB: fptosi_double
212 ; THUMB: vcvt.s32.f64 s0, d16
213 %b.addr = alloca i32, align 8
214 %conv = fptosi double %a to i32
215 store i32 %conv, i32* %b.addr, align 8
221 define void @fptoui_float(float %a) nounwind ssp {
224 ; ARM: vcvt.u32.f32 s0, s0
225 ; THUMB: fptoui_float
226 ; THUMB: vcvt.u32.f32 s0, s0
227 %b.addr = alloca i32, align 4
228 %conv = fptoui float %a to i32
229 store i32 %conv, i32* %b.addr, align 4
233 define void @fptoui_double(double %a) nounwind ssp {
236 ; ARM: vcvt.u32.f64 s0, d16
237 ; THUMB: fptoui_double
238 ; THUMB: vcvt.u32.f64 s0, d16
239 %b.addr = alloca i32, align 8
240 %conv = fptoui double %a to i32
241 store i32 %conv, i32* %b.addr, align 8