]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/compiler-rt/lib/builtins/arm/aeabi_fcmp.S
Merge ACPICA 20160930.
[FreeBSD/FreeBSD.git] / contrib / compiler-rt / lib / builtins / arm / aeabi_fcmp.S
1 //===-- aeabi_fcmp.S - EABI fcmp* 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_fcmp{eq,lt,le,ge,gt}(float a, float b) {
13 //   int result = __{eq,lt,le,ge,gt}sf2(a, b);
14 //   if (result {==,<,<=,>=,>} 0) {
15 //     return 1;
16 //   } else {
17 //     return 0;
18 //   }
19 // }
20
21 #define DEFINE_AEABI_FCMP(cond)                            \
22         .syntax unified                          SEPARATOR \
23         .p2align 2                               SEPARATOR \
24 DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)           \
25         push      { r4, lr }                     SEPARATOR \
26         bl        SYMBOL_NAME(__ ## cond ## sf2) SEPARATOR \
27         cmp       r0, #0                         SEPARATOR \
28         b ## cond 1f                             SEPARATOR \
29         mov       r0, #0                         SEPARATOR \
30         pop       { r4, pc }                     SEPARATOR \
31 1:                                               SEPARATOR \
32         mov       r0, #1                         SEPARATOR \
33         pop       { r4, pc }                     SEPARATOR \
34 END_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)
35
36 DEFINE_AEABI_FCMP(eq)
37 DEFINE_AEABI_FCMP(lt)
38 DEFINE_AEABI_FCMP(le)
39 DEFINE_AEABI_FCMP(ge)
40 DEFINE_AEABI_FCMP(gt)