cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sp_simple.c (891B)


      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}