linux/arch/mips/math-emu/sp_simple.c
<<
>>
Prefs
   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
  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
  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