1 /* Software floating-point emulation. 2 Return !a 3 Copyright (C) 1997,1999 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 5 Contributed by Richard Henderson (rth@cygnus.com) and 6 Jakub Jelinek (jj@ultra.linux.cz). 7 8 The GNU C Library is free software; you can redistribute it and/or 9 modify it under the terms of the GNU Lesser General Public 10 License as published by the Free Software Foundation; either 11 version 2.1 of the License, or (at your option) any later version. 12 13 The GNU C Library is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 Lesser General Public License for more details. 17 18 You should have received a copy of the GNU Lesser General Public 19 License along with the GNU C Library; if not, see 20 <http://www.gnu.org/licenses/>. */ 21 22 #include "soft-fp.h" 23 #include "quad.h" 24 _Q_neg(const long double a)25long double _Q_neg(const long double a) 26 { 27 FP_DECL_EX; 28 long double c = a; 29 30 #if (__BYTE_ORDER == __BIG_ENDIAN) 31 ((UWtype *)&c)[0] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); 32 #elif (__BYTE_ORDER == __LITTLE_ENDIAN) && (W_TYPE_SIZE == 64) 33 ((UWtype *)&c)[1] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); 34 #elif (__BYTE_ORDER == __LITTLE_ENDIAN) && (W_TYPE_SIZE == 32) 35 ((UWtype *)&c)[3] ^= (((UWtype)1) << (W_TYPE_SIZE - 1)); 36 #else 37 FP_DECL_Q(A); FP_DECL_Q(C); 38 39 FP_UNPACK_Q(A, a); 40 FP_NEG_Q(C, A); 41 FP_PACK_Q(c, C); 42 #endif 43 FP_CLEAR_EXCEPTIONS; 44 FP_HANDLE_EXCEPTIONS; 45 return c; 46 } 47