1276789Sdim//===-- aeabi_dcmp.S - EABI dcmp* implementation ---------------------------===// 2276789Sdim// 3276789Sdim// The LLVM Compiler Infrastructure 4276789Sdim// 5276789Sdim// This file is dual licensed under the MIT and the University of Illinois Open 6276789Sdim// Source Licenses. See LICENSE.TXT for details. 7276789Sdim// 8276789Sdim//===----------------------------------------------------------------------===// 9276789Sdim 10276789Sdim#include "../assembly.h" 11276789Sdim 12276789Sdim// int __aeabi_dcmp{eq,lt,le,ge,gt}(double a, double b) { 13276789Sdim// int result = __{eq,lt,le,ge,gt}df2(a, b); 14276789Sdim// if (result {==,<,<=,>=,>} 0) { 15276789Sdim// return 1; 16276789Sdim// } else { 17276789Sdim// return 0; 18276789Sdim// } 19276789Sdim// } 20276789Sdim 21276789Sdim#define DEFINE_AEABI_DCMP(cond) \ 22276789Sdim .syntax unified SEPARATOR \ 23276789Sdim .p2align 2 SEPARATOR \ 24276789SdimDEFINE_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond) \ 25276789Sdim push { r4, lr } SEPARATOR \ 26276789Sdim bl SYMBOL_NAME(__ ## cond ## df2) SEPARATOR \ 27276789Sdim cmp r0, #0 SEPARATOR \ 28276789Sdim b ## cond 1f SEPARATOR \ 29276789Sdim mov r0, #0 SEPARATOR \ 30276789Sdim pop { r4, pc } SEPARATOR \ 31276789Sdim1: SEPARATOR \ 32276789Sdim mov r0, #1 SEPARATOR \ 33276789Sdim pop { r4, pc } SEPARATOR \ 34276789SdimEND_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond) 35276789Sdim 36276789SdimDEFINE_AEABI_DCMP(eq) 37276789SdimDEFINE_AEABI_DCMP(lt) 38276789SdimDEFINE_AEABI_DCMP(le) 39276789SdimDEFINE_AEABI_DCMP(ge) 40276789SdimDEFINE_AEABI_DCMP(gt) 41