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_2008class.c (974B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * IEEE754 floating point arithmetic
      4 * single precision: CLASS.f
      5 * FPR[fd] = class(FPR[fs])
      6 *
      7 * MIPS floating point support
      8 * Copyright (C) 2015 Imagination Technologies, Ltd.
      9 * Author: Markos Chandras <markos.chandras@imgtec.com>
     10 */
     11
     12#include "ieee754sp.h"
     13
     14int ieee754sp_2008class(union ieee754sp x)
     15{
     16	COMPXSP;
     17
     18	EXPLODEXSP;
     19
     20	/*
     21	 * 10 bit mask as follows:
     22	 *
     23	 * bit0 = SNAN
     24	 * bit1 = QNAN
     25	 * bit2 = -INF
     26	 * bit3 = -NORM
     27	 * bit4 = -DNORM
     28	 * bit5 = -ZERO
     29	 * bit6 = INF
     30	 * bit7 = NORM
     31	 * bit8 = DNORM
     32	 * bit9 = ZERO
     33	 */
     34
     35	switch(xc) {
     36	case IEEE754_CLASS_SNAN:
     37		return 0x01;
     38	case IEEE754_CLASS_QNAN:
     39		return 0x02;
     40	case IEEE754_CLASS_INF:
     41		return 0x04 << (xs ? 0 : 4);
     42	case IEEE754_CLASS_NORM:
     43		return 0x08 << (xs ? 0 : 4);
     44	case IEEE754_CLASS_DNORM:
     45		return 0x10 << (xs ? 0 : 4);
     46	case IEEE754_CLASS_ZERO:
     47		return 0x20 << (xs ? 0 : 4);
     48	default:
     49		pr_err("Unknown class: %d\n", xc);
     50		return 0;
     51	}
     52}