Back to home page

OSCL-LXR

 
 

    


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