...

Text file src/math/dim_amd64.s

Documentation: math

		 1// Copyright 2010 The Go Authors. All rights reserved.
		 2// Use of this source code is governed by a BSD-style
		 3// license that can be found in the LICENSE file.
		 4
		 5#include "textflag.h"
		 6
		 7#define PosInf 0x7FF0000000000000
		 8#define NaN		0x7FF8000000000001
		 9#define NegInf 0xFFF0000000000000
		10
		11// func ·archMax(x, y float64) float64
		12TEXT ·archMax(SB),NOSPLIT,$0
		13	// +Inf special cases
		14	MOVQ		$PosInf, AX
		15	MOVQ		x+0(FP), R8
		16	CMPQ		AX, R8
		17	JEQ		 isPosInf
		18	MOVQ		y+8(FP), R9
		19	CMPQ		AX, R9
		20	JEQ		 isPosInf
		21	// NaN special cases
		22	MOVQ		$~(1<<63), DX // bit mask
		23	MOVQ		$PosInf, AX
		24	MOVQ		R8, BX
		25	ANDQ		DX, BX // x = |x|
		26	CMPQ		AX, BX
		27	JLT		 isMaxNaN
		28	MOVQ		R9, CX
		29	ANDQ		DX, CX // y = |y|
		30	CMPQ		AX, CX
		31	JLT		 isMaxNaN
		32	// ±0 special cases
		33	ORQ		 CX, BX
		34	JEQ		 isMaxZero
		35
		36	MOVQ		R8, X0
		37	MOVQ		R9, X1
		38	MAXSD	 X1, X0
		39	MOVSD	 X0, ret+16(FP)
		40	RET
		41isMaxNaN: // return NaN
		42	MOVQ	$NaN, AX
		43isPosInf: // return +Inf
		44	MOVQ		AX, ret+16(FP)
		45	RET
		46isMaxZero:
		47	MOVQ		$(1<<63), AX // -0.0
		48	CMPQ		AX, R8
		49	JEQ		 +3(PC)
		50	MOVQ		R8, ret+16(FP) // return 0
		51	RET
		52	MOVQ		R9, ret+16(FP) // return other 0
		53	RET
		54
		55// func archMin(x, y float64) float64
		56TEXT ·archMin(SB),NOSPLIT,$0
		57	// -Inf special cases
		58	MOVQ		$NegInf, AX
		59	MOVQ		x+0(FP), R8
		60	CMPQ		AX, R8
		61	JEQ		 isNegInf
		62	MOVQ		y+8(FP), R9
		63	CMPQ		AX, R9
		64	JEQ		 isNegInf
		65	// NaN special cases
		66	MOVQ		$~(1<<63), DX
		67	MOVQ		$PosInf, AX
		68	MOVQ		R8, BX
		69	ANDQ		DX, BX // x = |x|
		70	CMPQ		AX, BX
		71	JLT		 isMinNaN
		72	MOVQ		R9, CX
		73	ANDQ		DX, CX // y = |y|
		74	CMPQ		AX, CX
		75	JLT		 isMinNaN
		76	// ±0 special cases
		77	ORQ		 CX, BX
		78	JEQ		 isMinZero
		79
		80	MOVQ		R8, X0
		81	MOVQ		R9, X1
		82	MINSD	 X1, X0
		83	MOVSD X0, ret+16(FP)
		84	RET
		85isMinNaN: // return NaN
		86	MOVQ	$NaN, AX
		87isNegInf: // return -Inf
		88	MOVQ		AX, ret+16(FP)
		89	RET
		90isMinZero:
		91	MOVQ		$(1<<63), AX // -0.0
		92	CMPQ		AX, R8
		93	JEQ		 +3(PC)
		94	MOVQ		R9, ret+16(FP) // return other 0
		95	RET
		96	MOVQ		R8, ret+16(FP) // return -0
		97	RET
		98

View as plain text