1/* Compute the hypothenuse of X and Y.
2   Copyright (C) 1998 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
5
6   The GNU C Library is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Lesser General Public
8   License as published by the Free Software Foundation; either
9   version 2.1 of the License, or (at your option) any later version.
10
11   The GNU C Library is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with the GNU C Library; if not, write to the Free
18   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19   02111-1307 USA.  */
20
21#include <sysdep.h>
22
23	.text
24ENTRY(__ieee754_hypot)
25	fldl	4(%esp)		// x
26	fxam
27	fnstsw
28	fldl	12(%esp)	// y : x
29	movb	%ah, %ch
30	fxam
31	fnstsw
32	movb	%ah, %al
33	orb	%ch, %ah
34	sahf
35	jc	1f
36	fmul	%st(0)		// y * y : x
37	fxch			// x : y * y
38	fmul	%st(0)		// x * x : y * y
39	faddp			// x * x + y * y
40	fsqrt
412:	ret
42
43	// We have to test whether any of the parameters is Inf.
44	// In this case the result is infinity.
451:	andb	$0x45, %al
46	cmpb	$5, %al
47	je	3f		// jump if y is Inf
48	andb	$0x45, %ch
49	cmpb	$5, %ch
50	jne	4f		// jump if x is not Inf
51	fxch
523:	fstp	%st(1)
53	fabs
54	jmp	2b
55
564:	testb	$1, %al
57	jnz	5f		// y is NaN
58	fxch
595:	fstp	%st(1)
60	jmp	2b
61
62END(__ieee754_hypot)
63