1*9d5a6349SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 21da177e4SLinus Torvalds /* IEEE754 floating point arithmetic 31da177e4SLinus Torvalds * double precision: common utilities 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 "ieee754dp.h" 111da177e4SLinus Torvalds ieee754dp_neg(union ieee754dp x)122209bcb1SRalf Baechleunion ieee754dp ieee754dp_neg(union ieee754dp x) 131da177e4SLinus Torvalds { 14232b6ec5SMaciej W. Rozycki union ieee754dp y; 151da177e4SLinus Torvalds 16198f7058SMaciej W. Rozycki if (ieee754_csr.abs2008) { 17198f7058SMaciej W. Rozycki y = x; 18198f7058SMaciej W. Rozycki DPSIGN(y) = !DPSIGN(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 = ieee754dp_sub(ieee754dp_zero(0), x); 25232b6ec5SMaciej W. Rozycki ieee754_csr.rm = oldrm; 26198f7058SMaciej W. Rozycki } 27232b6ec5SMaciej W. Rozycki return y; 281da177e4SLinus Torvalds } 291da177e4SLinus Torvalds ieee754dp_abs(union ieee754dp x)302209bcb1SRalf Baechleunion ieee754dp ieee754dp_abs(union ieee754dp x) 311da177e4SLinus Torvalds { 32232b6ec5SMaciej W. Rozycki union ieee754dp y; 331da177e4SLinus Torvalds 34198f7058SMaciej W. Rozycki if (ieee754_csr.abs2008) { 35198f7058SMaciej W. Rozycki y = x; 36198f7058SMaciej W. Rozycki DPSIGN(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 (DPSIGN(x)) 43232b6ec5SMaciej W. Rozycki y = ieee754dp_sub(ieee754dp_zero(0), x); 44232b6ec5SMaciej W. Rozycki else 45232b6ec5SMaciej W. Rozycki y = ieee754dp_add(ieee754dp_zero(0), x); 46232b6ec5SMaciej W. Rozycki ieee754_csr.rm = oldrm; 47198f7058SMaciej W. Rozycki } 48232b6ec5SMaciej W. Rozycki return y; 491da177e4SLinus Torvalds } 50