Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/math-emu/dp_simple.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/* IEEE754 floating point arithmetic
3
* double precision: common utilities
4
*/
5
/*
6
* MIPS floating point support
7
* Copyright (C) 1994-2000 Algorithmics Ltd.
8
*/
9
10
#include "ieee754dp.h"
11
12
union ieee754dp ieee754dp_neg(union ieee754dp x)
13
{
14
union ieee754dp y;
15
16
if (ieee754_csr.abs2008) {
17
y = x;
18
DPSIGN(y) = !DPSIGN(x);
19
} else {
20
unsigned int oldrm;
21
22
oldrm = ieee754_csr.rm;
23
ieee754_csr.rm = FPU_CSR_RD;
24
y = ieee754dp_sub(ieee754dp_zero(0), x);
25
ieee754_csr.rm = oldrm;
26
}
27
return y;
28
}
29
30
union ieee754dp ieee754dp_abs(union ieee754dp x)
31
{
32
union ieee754dp y;
33
34
if (ieee754_csr.abs2008) {
35
y = x;
36
DPSIGN(y) = 0;
37
} else {
38
unsigned int oldrm;
39
40
oldrm = ieee754_csr.rm;
41
ieee754_csr.rm = FPU_CSR_RD;
42
if (DPSIGN(x))
43
y = ieee754dp_sub(ieee754dp_zero(0), x);
44
else
45
y = ieee754dp_add(ieee754dp_zero(0), x);
46
ieee754_csr.rm = oldrm;
47
}
48
return y;
49
}
50
51