Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/libc/include/fpmath.h
39530 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2003 Mike Barcroft <[email protected]>
5
* Copyright (c) 2002 David Schultz <[email protected]>
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
30
#ifndef _FPMATH_H_
31
#define _FPMATH_H_
32
33
#include <sys/endian.h>
34
#include "_fpmath.h"
35
36
#ifndef _IEEE_WORD_ORDER
37
#define _IEEE_WORD_ORDER _BYTE_ORDER
38
#endif
39
40
union IEEEf2bits {
41
float f;
42
struct {
43
#if _BYTE_ORDER == _LITTLE_ENDIAN
44
unsigned int man :23;
45
unsigned int exp :8;
46
unsigned int sign :1;
47
#else /* _BIG_ENDIAN */
48
unsigned int sign :1;
49
unsigned int exp :8;
50
unsigned int man :23;
51
#endif
52
} bits;
53
};
54
55
#define DBL_MANH_SIZE 20
56
#define DBL_MANL_SIZE 32
57
58
union IEEEd2bits {
59
double d;
60
struct {
61
#if _BYTE_ORDER == _LITTLE_ENDIAN
62
#if _IEEE_WORD_ORDER == _LITTLE_ENDIAN
63
unsigned int manl :32;
64
#endif
65
unsigned int manh :20;
66
unsigned int exp :11;
67
unsigned int sign :1;
68
#if _IEEE_WORD_ORDER == _BIG_ENDIAN
69
unsigned int manl :32;
70
#endif
71
#else /* _BIG_ENDIAN */
72
unsigned int sign :1;
73
unsigned int exp :11;
74
unsigned int manh :20;
75
unsigned int manl :32;
76
#endif
77
} bits;
78
};
79
80
#endif /* !_FPMATH_H */
81
82