]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/powerpc/powerpc64/fpu/s_copysign.S
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / powerpc / powerpc64 / fpu / s_copysign.S
CommitLineData
cfc91acd 1/* Copy a sign bit between floating-point values. PowerPC64 version.
d4697bc9 2 Copyright (C) 1997-2014 Free Software Foundation, Inc.
cfc91acd
RM
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
cfc91acd
RM
18
19/* This has been coded in assembler because GCC makes such a mess of it
20 when it's coded in C. */
21
22#include <sysdep.h>
f964490f 23#include <math_ldbl_opt.h>
cfc91acd
RM
24
25ENTRY(__copysign)
d7d06f79 26 CALL_MCOUNT 0
cfc91acd
RM
27/* double [f1] copysign (double [f1] x, double [f2] y);
28 copysign(x,y) returns a value with the magnitude of x and
29 with the sign bit of y. */
bebff237 30 stfd fp2,56(r1)
a7e91561
UD
31 nop
32 nop
33 nop
bebff237 34 ld r3,56(r1)
cfc91acd 35 cmpdi r3,0
cfc91acd
RM
36 blt L(0)
37 fabs fp1,fp1
38 blr
39L(0): fnabs fp1,fp1
40 blr
41 END (__copysign)
42
1ab18a5b 43weak_alias (__copysign,copysign)
cfc91acd
RM
44
45/* It turns out that it's safe to use this code even for single-precision. */
1ab18a5b 46weak_alias (__copysign,copysignf)
cfc91acd
RM
47strong_alias(__copysign,__copysignf)
48
49#ifdef NO_LONG_DOUBLE
1ab18a5b 50weak_alias (__copysign,copysignl)
cfc91acd
RM
51strong_alias(__copysign,__copysignl)
52#endif
f964490f
RM
53#ifdef IS_IN_libm
54# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
55compat_symbol (libm, __copysign, copysignl, GLIBC_2_0)
56# endif
57#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
58compat_symbol (libc, __copysign, copysignl, GLIBC_2_0)
59#endif