19d5a6349SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 21da177e4SLinus Torvalds /* IEEE754 floating point arithmetic 31da177e4SLinus Torvalds * single precision 41da177e4SLinus Torvalds */ 51da177e4SLinus Torvalds /* 61da177e4SLinus Torvalds * MIPS floating point support 71da177e4SLinus Torvalds * Copyright (C) 1994-2000 Algorithmics Ltd. 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #include "ieee754sp.h" 111da177e4SLinus Torvalds ieee754sp_neg(union ieee754sp x)122209bcb1SRalf Baechleunion ieee754sp ieee754sp_neg(union ieee754sp x) 131da177e4SLinus Torvalds { 14232b6ec5SMaciej W. Rozycki union ieee754sp y; 151da177e4SLinus Torvalds 16198f7058SMaciej W. Rozycki if (ieee754_csr.abs2008) { 17198f7058SMaciej W. Rozycki y = x; 18198f7058SMaciej W. Rozycki SPSIGN(y) = !SPSIGN(x); 19198f7058SMaciej W. Rozycki } else { 20198f7058SMaciej W. Rozycki unsigned int oldrm; 21198f7058SMaciej W. Rozycki 22232b6ec5SMaciej W. Rozycki oldrm = ieee754_csr.rm; 23232b6ec5SMaciej W. Rozycki ieee754_csr.rm = FPU_CSR_RD; 24232b6ec5SMaciej W. Rozycki y = ieee754sp_sub(ieee754sp_zero(0), x); 25232b6ec5SMaciej W. Rozycki ieee754_csr.rm = oldrm; 26198f7058SMaciej W. Rozycki } 27232b6ec5SMaciej W. Rozycki return y; 281da177e4SLinus Torvalds } 291da177e4SLinus Torvalds ieee754sp_abs(union ieee754sp x)302209bcb1SRalf Baechleunion ieee754sp ieee754sp_abs(union ieee754sp x) 311da177e4SLinus Torvalds { 32232b6ec5SMaciej W. Rozycki union ieee754sp y; 331da177e4SLinus Torvalds 34198f7058SMaciej W. Rozycki if (ieee754_csr.abs2008) { 35198f7058SMaciej W. Rozycki y = x; 36198f7058SMaciej W. Rozycki SPSIGN(y) = 0; 37198f7058SMaciej W. Rozycki } else { 38198f7058SMaciej W. Rozycki unsigned int oldrm; 39198f7058SMaciej W. Rozycki 40232b6ec5SMaciej W. Rozycki oldrm = ieee754_csr.rm; 41232b6ec5SMaciej W. Rozycki ieee754_csr.rm = FPU_CSR_RD; 42232b6ec5SMaciej W. Rozycki if (SPSIGN(x)) 43232b6ec5SMaciej W. Rozycki y = ieee754sp_sub(ieee754sp_zero(0), x); 44232b6ec5SMaciej W. Rozycki else 45232b6ec5SMaciej W. Rozycki y = ieee754sp_add(ieee754sp_zero(0), x); 46232b6ec5SMaciej W. Rozycki ieee754_csr.rm = oldrm; 47198f7058SMaciej W. Rozycki } 48232b6ec5SMaciej W. Rozycki return y; 491da177e4SLinus Torvalds } 50