1 // SPDX-License-Identifier: GPL-2.0-only 2 /* IEEE754 floating point arithmetic 3 * double precision: common utilities 4 */ 5 /* 6 * MIPS floating point support 7 * Copyright (C) 1994-2000 Algorithmics Ltd. 8 */ 9 10 #include "ieee754dp.h" 11 ieee754dp_neg(union ieee754dp x)12union ieee754dp ieee754dp_neg(union ieee754dp x) 13 { 14 union ieee754dp y; 15 16 if (ieee754_csr.abs2008) { 17 y = x; 18 DPSIGN(y) = !DPSIGN(x); 19 } else { 20 unsigned int oldrm; 21 22 oldrm = ieee754_csr.rm; 23 ieee754_csr.rm = FPU_CSR_RD; 24 y = ieee754dp_sub(ieee754dp_zero(0), x); 25 ieee754_csr.rm = oldrm; 26 } 27 return y; 28 } 29 ieee754dp_abs(union ieee754dp x)30union ieee754dp ieee754dp_abs(union ieee754dp x) 31 { 32 union ieee754dp y; 33 34 if (ieee754_csr.abs2008) { 35 y = x; 36 DPSIGN(y) = 0; 37 } else { 38 unsigned int oldrm; 39 40 oldrm = ieee754_csr.rm; 41 ieee754_csr.rm = FPU_CSR_RD; 42 if (DPSIGN(x)) 43 y = ieee754dp_sub(ieee754dp_zero(0), x); 44 else 45 y = ieee754dp_add(ieee754dp_zero(0), x); 46 ieee754_csr.rm = oldrm; 47 } 48 return y; 49 } 50