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

dp_simple.c (909B)


      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}