linux/arch/mips/math-emu/dp_simple.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/* IEEE754 floating point arithmetic
   3 * double precision: common utilities
   4 */
   5/*
   6 * MIPS floating point support
   7 * Copyright (C) 1994-2000 Algorithmics Ltd.
   8 */
   9
  10#include "ieee754dp.h"
  11
  12union ieee754dp ieee754dp_neg(union ieee754dp x)
  13{
  14        union ieee754dp y;
  15
  16        if (ieee754_csr.abs2008) {
  17                y = x;
  18                DPSIGN(y) = !DPSIGN(x);
  19        } else {
  20                unsigned int oldrm;
  21
  22                oldrm = ieee754_csr.rm;
  23                ieee754_csr.rm = FPU_CSR_RD;
  24                y = ieee754dp_sub(ieee754dp_zero(0), x);
  25                ieee754_csr.rm = oldrm;
  26        }
  27        return y;
  28}
  29
  30union ieee754dp ieee754dp_abs(union ieee754dp x)
  31{
  32        union ieee754dp y;
  33
  34        if (ieee754_csr.abs2008) {
  35                y = x;
  36                DPSIGN(y) = 0;
  37        } else {
  38                unsigned int oldrm;
  39
  40                oldrm = ieee754_csr.rm;
  41                ieee754_csr.rm = FPU_CSR_RD;
  42                if (DPSIGN(x))
  43                        y = ieee754dp_sub(ieee754dp_zero(0), x);
  44                else
  45                        y = ieee754dp_add(ieee754dp_zero(0), x);
  46                ieee754_csr.rm = oldrm;
  47        }
  48        return y;
  49}
  50