1/* Copy a sign bit between floating-point values. 2 IBM extended format long double version. 3 Copyright (C) 2004-2021 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 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, see 18 <https://www.gnu.org/licenses/>. */ 19 20#include <sysdep.h> 21#include <math_ldbl_opt.h> 22 23ENTRY(__fabsl) 24/* long double [f1,f2] fabs (long double [f1,f2] x); 25 fabs(x,y) returns a value with the magnitude of x and 26 with the sign bit of y. */ 27#ifdef _ARCH_PPCGR 28 /* fsel available. */ 29 fmr fp0,fp1 30#else 31 /* Use integer operations to test sign of high part to avoid 32 exceptions on sNaNs. */ 33 stwu r1,-16(r1) 34 cfi_adjust_cfa_offset (16) 35 stfd fp1,8(r1) 36#endif 37 fabs fp1,fp1 38#ifdef _ARCH_PPCGR 39 fneg fp3,fp2 40 fsel fp2,fp0,fp2,fp3 41#else 42 lwz r3,8+HIWORD(r1) 43 cmpwi cr6,r3,0 44 addi r1,r1,16 45 cfi_adjust_cfa_offset (-16) 46 bgelr cr6 47 fneg fp2,fp2 48#endif 49 blr 50END (__fabsl) 51 52long_double_symbol (libm, __fabsl, fabsl) 53