Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /* IEEE754 floating point arithmetic
0003  * double precision: common utilities
0004  */
0005 /*
0006  * MIPS floating point support
0007  * Copyright (C) 1994-2000 Algorithmics Ltd.
0008  */
0009 
0010 #include "ieee754dp.h"
0011 
0012 union ieee754dp ieee754dp_neg(union ieee754dp x)
0013 {
0014     union ieee754dp y;
0015 
0016     if (ieee754_csr.abs2008) {
0017         y = x;
0018         DPSIGN(y) = !DPSIGN(x);
0019     } else {
0020         unsigned int oldrm;
0021 
0022         oldrm = ieee754_csr.rm;
0023         ieee754_csr.rm = FPU_CSR_RD;
0024         y = ieee754dp_sub(ieee754dp_zero(0), x);
0025         ieee754_csr.rm = oldrm;
0026     }
0027     return y;
0028 }
0029 
0030 union ieee754dp ieee754dp_abs(union ieee754dp x)
0031 {
0032     union ieee754dp y;
0033 
0034     if (ieee754_csr.abs2008) {
0035         y = x;
0036         DPSIGN(y) = 0;
0037     } else {
0038         unsigned int oldrm;
0039 
0040         oldrm = ieee754_csr.rm;
0041         ieee754_csr.rm = FPU_CSR_RD;
0042         if (DPSIGN(x))
0043             y = ieee754dp_sub(ieee754dp_zero(0), x);
0044         else
0045             y = ieee754dp_add(ieee754dp_zero(0), x);
0046         ieee754_csr.rm = oldrm;
0047     }
0048     return y;
0049 }