Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux
[platform/kernel/linux-starfive.git] / arch / mips / math-emu / sp_2008class.c
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
14 int 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 }