//===----------------------Hexagon builtin routine ------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#define A r1:0
#define B r3:2
#define ATMP r5:4


#define Q6_ALIAS(TAG) .global __qdsp_##TAG ; .set __qdsp_##TAG, __hexagon_##TAG
#define END(TAG) .size TAG,.-TAG

/*
 * Min and Max return A if B is NaN, or B if A is NaN
 * Otherwise, they return the smaller or bigger value
 *
 * If values are equal, we want to favor -0.0 for min and +0.0 for max.
 */

/*
 * Compares always return false for NaN
 * if (isnan(A)) A = B; if (A > B) A = B will only trigger at most one of those options.
 */
	.text
	.global __hexagon_mindf3
	.global __hexagon_maxdf3
	.global fmin
	.type fmin,@function
	.global fmax
	.type fmax,@function
	.type __hexagon_mindf3,@function
	.type __hexagon_maxdf3,@function
	Q6_ALIAS(mindf3)
	Q6_ALIAS(maxdf3)
	.p2align 5
__hexagon_mindf3:
fmin:
	{
		p0 = dfclass(A,#0x10)		// If A is a number
		p1 = dfcmp.gt(A,B)		// AND B > A, don't swap
		ATMP = A
	}
	{
		if (p0) A = B			// if A is NaN use B
		if (p1) A = B			// gt is always false if either is NaN
		p2 = dfcmp.eq(A,B)		// if A == B
		if (!p2.new) jumpr:t r31
	}
	/* A == B, return A|B to select -0.0 over 0.0 */
	{
		A = or(ATMP,B)
		jumpr r31
	}
END(__hexagon_mindf3)
	.falign
__hexagon_maxdf3:
fmax:
	{
		p0 = dfclass(A,#0x10)
		p1 = dfcmp.gt(B,A)
		ATMP = A
	}
	{
		if (p0) A = B
		if (p1) A = B
		p2 = dfcmp.eq(A,B)
		if (!p2.new) jumpr:t r31
	}
	/* A == B, return A&B to select 0.0 over -0.0 */
	{
		A = and(ATMP,B)
		jumpr r31
	}
END(__hexagon_maxdf3)
