125428Speter//===-- fixunssfsivfp.S - Implement fixunssfsivfp -------------------------===// 250477Speter// 325428Speter// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 425428Speter// See https://llvm.org/LICENSE.txt for license information. 525428Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 625428Speter// 725428Speter//===----------------------------------------------------------------------===// 825428Speter 925428Speter#include "../assembly.h" 1025428Speter 1125428Speter// 1225428Speter// extern unsigned int __fixunssfsivfp(float a); 1325428Speter// 1425428Speter// Converts single precision float to a 32-bit unsigned int rounding towards 1525428Speter// zero. All negative values become zero. 1625428Speter// Uses Darwin calling convention where a single precision parameter is 1725428Speter// passed in a GPR.. 1825428Speter// 1925428Speter .syntax unified 2025428Speter .p2align 2 2125428SpeterDEFINE_COMPILERRT_FUNCTION(__fixunssfsivfp) 2225428Speter#if defined(COMPILER_RT_ARMHF_TARGET) 2325428Speter vcvt.u32.f32 s0, s0 2425428Speter vmov r0, s0 2525428Speter#else 2625428Speter vmov s15, r0 // load float register from R0 2725428Speter vcvt.u32.f32 s15, s15 // convert single to 32-bit unsigned into s15 2825428Speter vmov r0, s15 // move s15 to result register 2925428Speter#endif 3025428Speter bx lr 3125428SpeterEND_COMPILERRT_FUNCTION(__fixunssfsivfp) 3225428Speter 3325428SpeterNO_EXEC_STACK_DIRECTIVE 3425428Speter 3525428Speter