Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/math-emu/dp_2008class.c
26442 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* IEEE754 floating point arithmetic
4
* double 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 <[email protected]>
10
*/
11
12
#include "ieee754dp.h"
13
14
int ieee754dp_2008class(union ieee754dp x)
15
{
16
COMPXDP;
17
18
EXPLODEXDP;
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
54