Commit | Line | Data |
---|---|---|
9d5a6349 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
1da177e4 LT |
2 | /* IEEE754 floating point arithmetic |
3 | * double precision: common utilities | |
4 | */ | |
5 | /* | |
6 | * MIPS floating point support | |
7 | * Copyright (C) 1994-2000 Algorithmics Ltd. | |
1da177e4 LT |
8 | */ |
9 | ||
1da177e4 LT |
10 | #include "ieee754dp.h" |
11 | ||
2209bcb1 | 12 | union ieee754dp ieee754dp_neg(union ieee754dp x) |
1da177e4 | 13 | { |
232b6ec5 MR |
14 | union ieee754dp y; |
15 | ||
198f7058 MR |
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 | } | |
232b6ec5 | 27 | return y; |
1da177e4 LT |
28 | } |
29 | ||
2209bcb1 | 30 | union ieee754dp ieee754dp_abs(union ieee754dp x) |
1da177e4 | 31 | { |
232b6ec5 MR |
32 | union ieee754dp y; |
33 | ||
198f7058 MR |
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 | } | |
232b6ec5 | 48 | return y; |
1da177e4 | 49 | } |