1//===-- extendsfdf2vfp.S - Implement extendsfdf2vfp -----------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "../assembly.h" 10 11// 12// extern double __extendsfdf2vfp(float a); 13// 14// Converts single precision float to double precision result. 15// Uses Darwin calling convention where a single precision parameter is 16// passed in a GPR and a double precision result is returned in R0/R1 pair. 17// 18 .syntax unified 19 .p2align 2 20DEFINE_COMPILERRT_FUNCTION(__extendsfdf2vfp) 21#if defined(COMPILER_RT_ARMHF_TARGET) 22 vcvt.f64.f32 d0, s0 23#else 24 vmov s15, r0 // load float register from R0 25 vcvt.f64.f32 d7, s15 // convert single to double 26 vmov r0, r1, d7 // return result in r0/r1 pair 27#endif 28 bx lr 29END_COMPILERRT_FUNCTION(__extendsfdf2vfp) 30 31NO_EXEC_STACK_DIRECTIVE 32 33