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