11902Swollman//===-- nedf2vfp.S - Implement nedf2vfp -----------------------------------===// 21902Swollman// 31902Swollman// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41902Swollman// See https://llvm.org/LICENSE.txt for license information. 51902Swollman// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61902Swollman// 71902Swollman//===----------------------------------------------------------------------===// 88870Srgrimes 91902Swollman#include "../assembly.h" 101902Swollman 111902Swollman// extern double __nedf2vfp(double a, double b); 128870Srgrimes// 131902Swollman// Returns zero if a and b are unequal and neither is NaN. 141902Swollman// Uses Darwin calling convention where double precision arguments are passsed 151902Swollman// like in GPR pairs. 168870Srgrimes 171902Swollman .syntax unified 181902Swollman .p2align 2 191902SwollmanDEFINE_COMPILERRT_FUNCTION(__nedf2vfp) 208870Srgrimes#if defined(COMPILER_RT_ARMHF_TARGET) 211902Swollman vcmp.f64 d0, d1 221902Swollman#else 231902Swollman vmov d6, r0, r1 // load r0/r1 pair in double register 248870Srgrimes vmov d7, r2, r3 // load r2/r3 pair in double register 251902Swollman vcmp.f64 d6, d7 261902Swollman#endif 271902Swollman vmrs apsr_nzcv, fpscr 281902Swollman ITE(ne) 298870Srgrimes movne r0, #1 // set result register to 0 if unequal 301902Swollman moveq r0, #0 311902Swollman bx lr 3221062SpeterEND_COMPILERRT_FUNCTION(__nedf2vfp) 331902Swollman 341902SwollmanNO_EXEC_STACK_DIRECTIVE 351902Swollman 361902Swollman