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