Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / x86 / ieee.h @ 13

History | View | Annotate | Download (3.88 KB)

1 13 up20180614
/*        $NetBSD: ieee.h,v 1.11 2010/09/15 16:11:28 christos Exp $ */
2
3
/*
4
 * Copyright (c) 1992, 1993
5
 *        The Regents of the University of California.  All rights reserved.
6
 *
7
 * This software was developed by the Computer Systems Engineering group
8
 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9
 * contributed to Berkeley.
10
 *
11
 * All advertising materials mentioning features or use of this software
12
 * must display the following acknowledgement:
13
 *        This product includes software developed by the University of
14
 *        California, Lawrence Berkeley Laboratory.
15
 *
16
 * Redistribution and use in source and binary forms, with or without
17
 * modification, are permitted provided that the following conditions
18
 * are met:
19
 * 1. Redistributions of source code must retain the above copyright
20
 *    notice, this list of conditions and the following disclaimer.
21
 * 2. Redistributions in binary form must reproduce the above copyright
22
 *    notice, this list of conditions and the following disclaimer in the
23
 *    documentation and/or other materials provided with the distribution.
24
 * 3. Neither the name of the University nor the names of its contributors
25
 *    may be used to endorse or promote products derived from this software
26
 *    without specific prior written permission.
27
 *
28
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38
 * SUCH DAMAGE.
39
 *
40
 *        @(#)ieee.h        8.1 (Berkeley) 6/11/93
41
 */
42
43
/*
44
 * ieee.h defines the machine-dependent layout of the machine's IEEE
45
 * floating point.  It does *not* define (yet?) any of the rounding
46
 * mode bits, exceptions, and so forth.
47
 */
48
49
#include <sys/ieee754.h>
50
51
#define        EXT_EXPBITS        15
52
#define EXT_FRACHBITS        32
53
#define        EXT_FRACLBITS        32
54
#define        EXT_FRACBITS        (EXT_FRACLBITS + EXT_FRACHBITS)
55
56
#define        EXT_TO_ARRAY32(u, a) do {                        \
57
        (a)[0] = (uint32_t)(u).extu_ext.ext_fracl;        \
58
        (a)[1] = (uint32_t)(u).extu_ext.ext_frach;        \
59
} while(/*CONSTCOND*/0)
60
61
/*
62
 * struct ieee_ext is the raw storage layout of the 80-bit
63
 * extended-precision type as implemented by the FPU.  Per the
64
 * respective ABI specifications, it is followed by a tail padding of
65
 *
66
 *   amd64: 48 bits,
67
 *   i386:  16 bits.
68
 */
69
struct ieee_ext {
70
        u_int        ext_fracl:EXT_FRACLBITS;
71
        u_int        ext_frach:EXT_FRACHBITS;
72
#if 0
73
        u_int        ext_int:1;
74
#endif
75
        u_int        ext_exp:EXT_EXPBITS;
76
        u_int        ext_sign:1;
77
};
78
79
/*
80
 * Floats whose exponent is in [1..INFNAN) (of whatever type) are
81
 * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
82
 * Floats whose exponent is zero are either zero (iff all fraction
83
 * bits are zero) or subnormal values.
84
 *
85
 * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
86
 * high fraction; if the bit is set, it is a `quiet NaN'.
87
 */
88
#define        EXT_EXP_INFNAN        0x7fff
89
#define        EXT_EXP_INF        0x7fff
90
#define        EXT_EXP_NAN        0x7fff
91
92
#if 0
93
#define        SNG_QUIETNAN        (1 << 22)
94
#define        DBL_QUIETNAN        (1 << 19)
95
#define        EXT_QUIETNAN        (1 << 30)
96
#endif
97
98
/*
99
 * Exponent biases.
100
 */
101
#define        EXT_EXP_BIAS        16383
102
103
/*
104
 * Convenience data structures.
105
 */
106
union ieee_ext_u {
107
        long double                extu_ld;
108
        struct ieee_ext                extu_ext;
109
};
110
111
#define extu_exp        extu_ext.ext_exp
112
#define extu_sign        extu_ext.ext_sign
113
#define extu_fracl        extu_ext.ext_fracl
114
#define extu_frach        extu_ext.ext_frach
115
116
#define LDBL_NBIT        0x80000000
117
#define mask_nbit_l(u)        ((u).extu_frach &= ~LDBL_NBIT)