Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* IEEE754 floating point arithmetic |
2 | * single precision | |
3 | */ | |
4 | /* | |
5 | * MIPS floating point support | |
6 | * Copyright (C) 1994-2000 Algorithmics Ltd. | |
1da177e4 | 7 | * |
1da177e4 LT |
8 | * This program is free software; you can distribute it and/or modify it |
9 | * under the terms of the GNU General Public License (Version 2) as | |
10 | * published by the Free Software Foundation. | |
11 | * | |
12 | * This program is distributed in the hope it will be useful, but WITHOUT | |
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | * for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License along | |
18 | * with this program; if not, write to the Free Software Foundation, Inc., | |
3f7cac41 | 19 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
1da177e4 LT |
20 | */ |
21 | ||
1da177e4 LT |
22 | #include "ieee754sp.h" |
23 | ||
2209bcb1 | 24 | union ieee754sp ieee754sp_neg(union ieee754sp x) |
1da177e4 | 25 | { |
232b6ec5 MR |
26 | union ieee754sp y; |
27 | ||
198f7058 MR |
28 | if (ieee754_csr.abs2008) { |
29 | y = x; | |
30 | SPSIGN(y) = !SPSIGN(x); | |
31 | } else { | |
32 | unsigned int oldrm; | |
33 | ||
34 | oldrm = ieee754_csr.rm; | |
35 | ieee754_csr.rm = FPU_CSR_RD; | |
36 | y = ieee754sp_sub(ieee754sp_zero(0), x); | |
37 | ieee754_csr.rm = oldrm; | |
38 | } | |
232b6ec5 | 39 | return y; |
1da177e4 LT |
40 | } |
41 | ||
2209bcb1 | 42 | union ieee754sp ieee754sp_abs(union ieee754sp x) |
1da177e4 | 43 | { |
232b6ec5 MR |
44 | union ieee754sp y; |
45 | ||
198f7058 MR |
46 | if (ieee754_csr.abs2008) { |
47 | y = x; | |
48 | SPSIGN(y) = 0; | |
49 | } else { | |
50 | unsigned int oldrm; | |
51 | ||
52 | oldrm = ieee754_csr.rm; | |
53 | ieee754_csr.rm = FPU_CSR_RD; | |
54 | if (SPSIGN(x)) | |
55 | y = ieee754sp_sub(ieee754sp_zero(0), x); | |
56 | else | |
57 | y = ieee754sp_add(ieee754sp_zero(0), x); | |
58 | ieee754_csr.rm = oldrm; | |
59 | } | |
232b6ec5 | 60 | return y; |
1da177e4 | 61 | } |