1
/* Complex cosine function. m68k fpu version
2
Copyright (C) 1997, 1999, 2010 Free Software Foundation, Inc.
3
This file is part of the GNU C Library.
4
Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
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.
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.
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
29
#define float_type double
32
#define CONCATX(a,b) __CONCAT(a,b)
33
#define s(name) CONCATX(name,SUFF)
34
#define m81(func) __m81_u(s(func))
36
__complex__ float_type
37
s(__ccos) (__complex__ float_type x)
39
__complex__ float_type retval;
40
unsigned long rx_cond = __m81_test (__real__ x);
42
if ((rx_cond & (__M81_COND_INF|__M81_COND_NAN)) == 0)
44
/* Real part is finite. */
45
float_type sin_rx, cos_rx;
47
__asm ("fsincos%.x %2,%1:%0" : "=f" (sin_rx), "=f" (cos_rx)
49
__real__ retval = cos_rx * m81(__ieee754_cosh) (__imag__ x);
50
if (rx_cond & __M81_COND_ZERO)
51
__imag__ retval = (signbit (__imag__ x)
52
? __real__ x : -__real__ x);
54
__imag__ retval = -sin_rx * m81(__ieee754_sinh) (__imag__ x);
58
unsigned long ix_cond = __m81_test (__imag__ x);
60
if (ix_cond & __M81_COND_INF)
61
__real__ retval = s(fabs) (__imag__ x);
63
__real__ retval = __real__ x - __real__ x;
64
if (ix_cond & __M81_COND_ZERO)
65
__imag__ retval = __imag__ x;
67
__imag__ retval = __real__ x - __real__ x;
72
#define weak_aliasx(a,b) weak_alias(a,b)
73
weak_aliasx (s(__ccos), s(ccos))