Path: blob/main/contrib/llvm-project/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
35291 views
//===-- aeabi_fcmp.S - EABI fcmp* implementation ---------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "../assembly.h"910// int __aeabi_fcmp{eq,lt,le,ge,gt}(float a, float b) {11// int result = __{eq,lt,le,ge,gt}sf2(a, b);12// if (result {==,<,<=,>=,>} 0) {13// return 1;14// } else {15// return 0;16// }17// }1819#if defined(COMPILER_RT_ARMHF_TARGET)20# define CONVERT_FCMP_ARGS_TO_SF2_ARGS \21vmov s0, r0 SEPARATOR \22vmov s1, r123#else24# define CONVERT_FCMP_ARGS_TO_SF2_ARGS25#endif2627#define DEFINE_AEABI_FCMP(cond) \28.syntax unified SEPARATOR \29.p2align 2 SEPARATOR \30DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond) \31push { r4, lr } SEPARATOR \32CONVERT_FCMP_ARGS_TO_SF2_ARGS SEPARATOR \33bl SYMBOL_NAME(__ ## cond ## sf2) SEPARATOR \34cmp r0, #0 SEPARATOR \35b ## cond 1f SEPARATOR \36movs r0, #0 SEPARATOR \37pop { r4, pc } SEPARATOR \381: SEPARATOR \39movs r0, #1 SEPARATOR \40pop { r4, pc } SEPARATOR \41END_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)4243DEFINE_AEABI_FCMP(eq)44DEFINE_AEABI_FCMP(lt)45DEFINE_AEABI_FCMP(le)46DEFINE_AEABI_FCMP(ge)47DEFINE_AEABI_FCMP(gt)4849NO_EXEC_STACK_DIRECTIVE50515253