]> git.proxmox.com Git - rustc.git/blame - src/compiler-rt/lib/builtins/arm/aeabi_dcmp.S
Imported Upstream version 1.6.0+dfsg1
[rustc.git] / src / compiler-rt / lib / builtins / arm / aeabi_dcmp.S
CommitLineData
1a4d82fc
JJ
1//===-- aeabi_dcmp.S - EABI dcmp* implementation ---------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "../assembly.h"
11
12// int __aeabi_dcmp{eq,lt,le,ge,gt}(double a, double b) {
13// int result = __{eq,lt,le,ge,gt}df2(a, b);
14// if (result {==,<,<=,>=,>} 0) {
15// return 1;
16// } else {
17// return 0;
18// }
19// }
20
21#define DEFINE_AEABI_DCMP(cond) \
22 .syntax unified SEPARATOR \
92a42be0 23 .p2align 2 SEPARATOR \
1a4d82fc
JJ
24DEFINE_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond) \
25 push { r4, lr } SEPARATOR \
26 bl SYMBOL_NAME(__ ## cond ## df2) SEPARATOR \
27 cmp r0, #0 SEPARATOR \
28 b ## cond 1f SEPARATOR \
29 mov r0, #0 SEPARATOR \
30 pop { r4, pc } SEPARATOR \
311: SEPARATOR \
32 mov r0, #1 SEPARATOR \
33 pop { r4, pc } SEPARATOR \
34END_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond)
35
36DEFINE_AEABI_DCMP(eq)
37DEFINE_AEABI_DCMP(lt)
38DEFINE_AEABI_DCMP(le)
39DEFINE_AEABI_DCMP(ge)
40DEFINE_AEABI_DCMP(gt)