blob: 852668c6651eef45c5c6882b10ccbc0ec4902154 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/* FPU control word bits. OpenRISC version.
Copyright (C) 2024-2025 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<https://www.gnu.org/licenses/>. */
#ifndef _FPU_CONTROL_H
#define _FPU_CONTROL_H
#ifndef __or1k_hard_float__
# define _FPU_RESERVED 0xffffffff
# define _FPU_DEFAULT 0x00000000
# define _FPU_GETCW(cw) (cw) = 0
# define _FPU_SETCW(cw) (void) (cw)
#else /* __or1k_hard_float__ */
/* Layout of FPCSR:
The bits of the FPCSR are defined as follows, this should help
explain how the masks below have come to be.
+-----------+----------------------------+-----+----+
| 32 - 12 | 11 10 9 8 7 6 5 4 3 | 2-1 | 0 |
+-----------+----------------------------+-----+----+
| Reserved | DZ IN IV IX Z QN SN UN OV | RM | EE |
+-----------+----------------------------+-----+----+
Exception flags:
DZ - divide by zero flag.
IN - infinite flag.
IV - invalid flag.
IX - inexact flag.
Z - zero flag.
QN - qnan flag.
SN - snan flag.
UN - underflow flag.
OV - overflow flag.
Rounding modes:
The FPCSR bits 2-1 labeled above as RM specify the rounding mode.
00 - round to nearest
01 - round to zero
10 - round to positive infinity
11 - round to negative infinity
Enabling exceptions:
EE - set to enable FPU exceptions.
*/
# define _FPU_RESERVED 0xfffff000
/* Default: rounding to nearest with exceptions disabled. */
# define _FPU_DEFAULT 0
/* IEEE: Same as above with exceptions enabled. */
# define _FPU_IEEE (_FPU_DEFAULT | 1)
# define _FPU_FPCSR_RM_MASK (0x3 << 1)
/* Macros for accessing the hardware control word. */
# define _FPU_GETCW(cw) __asm__ volatile ("l.mfspr %0,r0,20" : "=r" (cw))
# define _FPU_SETCW(cw) __asm__ volatile ("l.mtspr r0,%0,20" : : "r" (cw))
#endif /* __or1k_hard_float__ */
/* Type of the control word. */
typedef unsigned int fpu_control_t;
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
#endif /* fpu_control.h */
|