]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/powerpc/powerpc64/power8/fpu/s_llrint.S
powerpc: Add optimized version of [l]lrintf
[thirdparty/glibc.git] / sysdeps / powerpc / powerpc64 / power8 / fpu / s_llrint.S
CommitLineData
1ad8950a 1/* Round double to long int. POWER8 PowerPC64 version.
bfff8b1b 2 Copyright (C) 2014-2017 Free Software Foundation, Inc.
1ad8950a
AZ
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
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
18
19#include <sysdep.h>
20#include <math_ldbl_opt.h>
21
7110166d 22#define MFVSRD_R3_V1 .long 0x7c230066 /* mfvsrd r3,vs1 */
1ad8950a
AZ
23
24/* long long int[r3] __llrint (double x[fp1]) */
d5b41185 25ENTRY_TOCLESS (__llrint)
1ad8950a
AZ
26 CALL_MCOUNT 0
27 fctid fp1,fp1
28 MFVSRD_R3_V1
29 blr
30END (__llrint)
31
32strong_alias (__llrint, __lrint)
33weak_alias (__llrint, llrint)
34weak_alias (__lrint, lrint)
99c3eb0f
RS
35/* The double version also works for single-precision as both float and
36 double parameters are passed in 64bit FPRs and both versions are expected
37 to return [long] long type. */
38strong_alias (__llrint, __llrintf)
39weak_alias (__llrint, llrintf)
40strong_alias (__lrint, __lrintf)
41weak_alias (__lrint, lrintf)
1ad8950a
AZ
42
43#ifdef NO_LONG_DOUBLE
44strong_alias (__llrint, __llrintl)
45weak_alias (__llrint, llrintl)
46strong_alias (__lrint, __lrintl)
47weak_alias (__lrint, lrintl)
48#endif
49#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
50compat_symbol (libm, __llrint, llrintl, GLIBC_2_1)
51compat_symbol (libm, __lrint, lrintl, GLIBC_2_1)
52#endif