1*9880d681SAndroid Build Coastguard Worker; 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*9880d681SAndroid Build Coastguard Worker; 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*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Test sitofp 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_single_i32(i32 %a, float %b) nounwind ssp { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_single_i32 10*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 11*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.s32 s0, s0 12*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_single_i32 13*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 14*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.s32 s0, s0 15*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 16*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %a to float 17*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_single_i16(i16 %a, float %b) nounwind ssp { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_single_i16 24*9880d681SAndroid Build Coastguard Worker; ARM: sxth r0, r0 25*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 26*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.s32 s0, s0 27*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_single_i16 28*9880d681SAndroid Build Coastguard Worker; THUMB: sxth r0, r0 29*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 30*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.s32 s0, s0 31*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 32*9880d681SAndroid Build Coastguard Worker %conv = sitofp i16 %a to float 33*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_single_i8(i8 %a) nounwind ssp { 38*9880d681SAndroid Build Coastguard Workerentry: 39*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_single_i8 40*9880d681SAndroid Build Coastguard Worker; ARM: sxtb r0, r0 41*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 42*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.s32 s0, s0 43*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_single_i8 44*9880d681SAndroid Build Coastguard Worker; THUMB: sxtb r0, r0 45*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 46*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.s32 s0, s0 47*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 48*9880d681SAndroid Build Coastguard Worker %conv = sitofp i8 %a to float 49*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_double_i32(i32 %a, double %b) nounwind ssp { 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_double_i32 56*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 57*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.s32 d16, s0 58*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_double_i32 59*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 60*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.s32 d16, s0 61*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 62*9880d681SAndroid Build Coastguard Worker %conv = sitofp i32 %a to double 63*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_double_i16(i16 %a, double %b) nounwind ssp { 68*9880d681SAndroid Build Coastguard Workerentry: 69*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_double_i16 70*9880d681SAndroid Build Coastguard Worker; ARM: sxth r0, r0 71*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 72*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.s32 d16, s0 73*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_double_i16 74*9880d681SAndroid Build Coastguard Worker; THUMB: sxth r0, r0 75*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 76*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.s32 d16, s0 77*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 78*9880d681SAndroid Build Coastguard Worker %conv = sitofp i16 %a to double 79*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 80*9880d681SAndroid Build Coastguard Worker ret void 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine void @sitofp_double_i8(i8 %a, double %b) nounwind ssp { 84*9880d681SAndroid Build Coastguard Workerentry: 85*9880d681SAndroid Build Coastguard Worker; ARM: sitofp_double_i8 86*9880d681SAndroid Build Coastguard Worker; ARM: sxtb r0, r0 87*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 88*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.s32 d16, s0 89*9880d681SAndroid Build Coastguard Worker; THUMB: sitofp_double_i8 90*9880d681SAndroid Build Coastguard Worker; THUMB: sxtb r0, r0 91*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 92*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.s32 d16, s0 93*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 94*9880d681SAndroid Build Coastguard Worker %conv = sitofp i8 %a to double 95*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 96*9880d681SAndroid Build Coastguard Worker ret void 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; Test uitofp 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_single_i32(i32 %a, float %b) nounwind ssp { 102*9880d681SAndroid Build Coastguard Workerentry: 103*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_single_i32 104*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 105*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.u32 s0, s0 106*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_single_i32 107*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 108*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.u32 s0, s0 109*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 110*9880d681SAndroid Build Coastguard Worker %conv = uitofp i32 %a to float 111*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 112*9880d681SAndroid Build Coastguard Worker ret void 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_single_i16(i16 %a, float %b) nounwind ssp { 116*9880d681SAndroid Build Coastguard Workerentry: 117*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_single_i16 118*9880d681SAndroid Build Coastguard Worker; ARM: uxth r0, r0 119*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 120*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.u32 s0, s0 121*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_single_i16 122*9880d681SAndroid Build Coastguard Worker; THUMB: uxth r0, r0 123*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 124*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.u32 s0, s0 125*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 126*9880d681SAndroid Build Coastguard Worker %conv = uitofp i16 %a to float 127*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 128*9880d681SAndroid Build Coastguard Worker ret void 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_single_i8(i8 %a) nounwind ssp { 132*9880d681SAndroid Build Coastguard Workerentry: 133*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_single_i8 134*9880d681SAndroid Build Coastguard Worker; ARM: and r0, r0, #255 135*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 136*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f32.u32 s0, s0 137*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_single_i8 138*9880d681SAndroid Build Coastguard Worker; THUMB: and r0, r0, #255 139*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 140*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f32.u32 s0, s0 141*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 142*9880d681SAndroid Build Coastguard Worker %conv = uitofp i8 %a to float 143*9880d681SAndroid Build Coastguard Worker store float %conv, float* %b.addr, align 4 144*9880d681SAndroid Build Coastguard Worker ret void 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_double_i32(i32 %a, double %b) nounwind ssp { 148*9880d681SAndroid Build Coastguard Workerentry: 149*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_double_i32 150*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 151*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.u32 d16, s0 152*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_double_i32 153*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 154*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.u32 d16, s0 155*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 156*9880d681SAndroid Build Coastguard Worker %conv = uitofp i32 %a to double 157*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 158*9880d681SAndroid Build Coastguard Worker ret void 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_double_i16(i16 %a, double %b) nounwind ssp { 162*9880d681SAndroid Build Coastguard Workerentry: 163*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_double_i16 164*9880d681SAndroid Build Coastguard Worker; ARM: uxth r0, r0 165*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 166*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.u32 d16, s0 167*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_double_i16 168*9880d681SAndroid Build Coastguard Worker; THUMB: uxth r0, r0 169*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 170*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.u32 d16, s0 171*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 172*9880d681SAndroid Build Coastguard Worker %conv = uitofp i16 %a to double 173*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 174*9880d681SAndroid Build Coastguard Worker ret void 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Workerdefine void @uitofp_double_i8(i8 %a, double %b) nounwind ssp { 178*9880d681SAndroid Build Coastguard Workerentry: 179*9880d681SAndroid Build Coastguard Worker; ARM: uitofp_double_i8 180*9880d681SAndroid Build Coastguard Worker; ARM: and r0, r0, #255 181*9880d681SAndroid Build Coastguard Worker; ARM: vmov s0, r0 182*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.f64.u32 d16, s0 183*9880d681SAndroid Build Coastguard Worker; THUMB: uitofp_double_i8 184*9880d681SAndroid Build Coastguard Worker; THUMB: and r0, r0, #255 185*9880d681SAndroid Build Coastguard Worker; THUMB: vmov s0, r0 186*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.f64.u32 d16, s0 187*9880d681SAndroid Build Coastguard Worker %b.addr = alloca double, align 8 188*9880d681SAndroid Build Coastguard Worker %conv = uitofp i8 %a to double 189*9880d681SAndroid Build Coastguard Worker store double %conv, double* %b.addr, align 8 190*9880d681SAndroid Build Coastguard Worker ret void 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker; Test fptosi 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine void @fptosi_float(float %a) nounwind ssp { 196*9880d681SAndroid Build Coastguard Workerentry: 197*9880d681SAndroid Build Coastguard Worker; ARM: fptosi_float 198*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.s32.f32 s0, s0 199*9880d681SAndroid Build Coastguard Worker; THUMB: fptosi_float 200*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.s32.f32 s0, s0 201*9880d681SAndroid Build Coastguard Worker %b.addr = alloca i32, align 4 202*9880d681SAndroid Build Coastguard Worker %conv = fptosi float %a to i32 203*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %b.addr, align 4 204*9880d681SAndroid Build Coastguard Worker ret void 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine void @fptosi_double(double %a) nounwind ssp { 208*9880d681SAndroid Build Coastguard Workerentry: 209*9880d681SAndroid Build Coastguard Worker; ARM: fptosi_double 210*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.s32.f64 s0, d16 211*9880d681SAndroid Build Coastguard Worker; THUMB: fptosi_double 212*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.s32.f64 s0, d16 213*9880d681SAndroid Build Coastguard Worker %b.addr = alloca i32, align 8 214*9880d681SAndroid Build Coastguard Worker %conv = fptosi double %a to i32 215*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %b.addr, align 8 216*9880d681SAndroid Build Coastguard Worker ret void 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; Test fptoui 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine void @fptoui_float(float %a) nounwind ssp { 222*9880d681SAndroid Build Coastguard Workerentry: 223*9880d681SAndroid Build Coastguard Worker; ARM: fptoui_float 224*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.u32.f32 s0, s0 225*9880d681SAndroid Build Coastguard Worker; THUMB: fptoui_float 226*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.u32.f32 s0, s0 227*9880d681SAndroid Build Coastguard Worker %b.addr = alloca i32, align 4 228*9880d681SAndroid Build Coastguard Worker %conv = fptoui float %a to i32 229*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %b.addr, align 4 230*9880d681SAndroid Build Coastguard Worker ret void 231*9880d681SAndroid Build Coastguard Worker} 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Workerdefine void @fptoui_double(double %a) nounwind ssp { 234*9880d681SAndroid Build Coastguard Workerentry: 235*9880d681SAndroid Build Coastguard Worker; ARM: fptoui_double 236*9880d681SAndroid Build Coastguard Worker; ARM: vcvt.u32.f64 s0, d16 237*9880d681SAndroid Build Coastguard Worker; THUMB: fptoui_double 238*9880d681SAndroid Build Coastguard Worker; THUMB: vcvt.u32.f64 s0, d16 239*9880d681SAndroid Build Coastguard Worker %b.addr = alloca i32, align 8 240*9880d681SAndroid Build Coastguard Worker %conv = fptoui double %a to i32 241*9880d681SAndroid Build Coastguard Worker store i32 %conv, i32* %b.addr, align 8 242*9880d681SAndroid Build Coastguard Worker ret void 243*9880d681SAndroid Build Coastguard Worker} 244