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