aeabi_fcmp.S revision 2d1fdb26e458c4ddc04155c1d421bced3ba90cd0
19ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//===-- aeabi_fcmp.S - EABI fcmp* implementation ---------------------------===//
29ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//
39ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//                     The LLVM Compiler Infrastructure
49ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//
59ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open
69ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org// Source Licenses. See LICENSE.TXT for details.
79ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//
89ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org//===----------------------------------------------------------------------===//
99ee1e40e50f3148f691965a0829709f0d25b0412chrisha@chromium.org
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 \
24DEFINE_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 \
311:                                               SEPARATOR \
32        mov       r0, #1                         SEPARATOR \
33        pop       { r4, pc }                     SEPARATOR \
34END_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)
35
36DEFINE_AEABI_FCMP(eq)
37DEFINE_AEABI_FCMP(lt)
38DEFINE_AEABI_FCMP(le)
39DEFINE_AEABI_FCMP(ge)
40DEFINE_AEABI_FCMP(gt)
41