Path: blob/main/contrib/llvm-project/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
35291 views
//===-- aeabi_dcmp.S - EABI dcmp* 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_dcmp{eq,lt,le,ge,gt}(double a, double b) {11// int result = __{eq,lt,le,ge,gt}df2(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_DCMP_ARGS_TO_DF2_ARGS \21vmov d0, r0, r1 SEPARATOR \22vmov d1, r2, r323#else24# define CONVERT_DCMP_ARGS_TO_DF2_ARGS25#endif2627#define DEFINE_AEABI_DCMP(cond) \28.syntax unified SEPARATOR \29.p2align 2 SEPARATOR \30DEFINE_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond) \31push { r4, lr } SEPARATOR \32CONVERT_DCMP_ARGS_TO_DF2_ARGS SEPARATOR \33bl SYMBOL_NAME(__ ## cond ## df2) 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_dcmp ## cond)4243DEFINE_AEABI_DCMP(eq)44DEFINE_AEABI_DCMP(lt)45DEFINE_AEABI_DCMP(le)46DEFINE_AEABI_DCMP(ge)47DEFINE_AEABI_DCMP(gt)4849NO_EXEC_STACK_DIRECTIVE50515253