Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * IEEE754 floating point arithmetic
0004  * single precision: CLASS.f
0005  * FPR[fd] = class(FPR[fs])
0006  *
0007  * MIPS floating point support
0008  * Copyright (C) 2015 Imagination Technologies, Ltd.
0009  * Author: Markos Chandras <markos.chandras@imgtec.com>
0010  */
0011 
0012 #include "ieee754sp.h"
0013 
0014 int ieee754sp_2008class(union ieee754sp x)
0015 {
0016     COMPXSP;
0017 
0018     EXPLODEXSP;
0019 
0020     /*
0021      * 10 bit mask as follows:
0022      *
0023      * bit0 = SNAN
0024      * bit1 = QNAN
0025      * bit2 = -INF
0026      * bit3 = -NORM
0027      * bit4 = -DNORM
0028      * bit5 = -ZERO
0029      * bit6 = INF
0030      * bit7 = NORM
0031      * bit8 = DNORM
0032      * bit9 = ZERO
0033      */
0034 
0035     switch(xc) {
0036     case IEEE754_CLASS_SNAN:
0037         return 0x01;
0038     case IEEE754_CLASS_QNAN:
0039         return 0x02;
0040     case IEEE754_CLASS_INF:
0041         return 0x04 << (xs ? 0 : 4);
0042     case IEEE754_CLASS_NORM:
0043         return 0x08 << (xs ? 0 : 4);
0044     case IEEE754_CLASS_DNORM:
0045         return 0x10 << (xs ? 0 : 4);
0046     case IEEE754_CLASS_ZERO:
0047         return 0x20 << (xs ? 0 : 4);
0048     default:
0049         pr_err("Unknown class: %d\n", xc);
0050         return 0;
0051     }
0052 }