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