ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/fpu/fpu_ieee.h
Revision: 1.2
Committed: 2004-01-12T15:29:31Z (20 years, 6 months ago) by cebix
Content type: text/plain
Branch: MAIN
CVS Tags: nigel-build-16, nigel-build-15
Changes since 1.1: +1 -1 lines
Log Message:
Happy New Year! :)

File Contents

# User Rev Content
1 gbeauche 1.1 /*
2     * fpu/fpu_uae.h - Extra Definitions for the old UAE FPU core
3     *
4 cebix 1.2 * Basilisk II (C) 1997-2004 Christian Bauer
5 gbeauche 1.1 *
6     * MC68881/68040 fpu emulation
7     *
8     * Original UAE FPU, copyright 1996 Herman ten Brugge
9     * Rewrite for x86, copyright 1999-2000 Lauri Pesonen
10     * New framework, copyright 2000 Gwenole Beauchesne
11     * Adapted for JIT compilation (c) Bernd Meyer, 2000
12     *
13     * This program is free software; you can redistribute it and/or modify
14     * it under the terms of the GNU General Public License as published by
15     * the Free Software Foundation; either version 2 of the License, or
16     * (at your option) any later version.
17     *
18     * This program is distributed in the hope that it will be useful,
19     * but WITHOUT ANY WARRANTY; without even the implied warranty of
20     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     * GNU General Public License for more details.
22     *
23     * You should have received a copy of the GNU General Public License
24     * along with this program; if not, write to the Free Software
25     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26     */
27    
28     #ifndef FPU_IEEE_H
29     #define FPU_IEEE_H
30    
31     /* NOTE: this file shall be included from fpu/fpu_uae.cpp */
32     #undef PUBLIC
33     #define PUBLIC extern
34    
35     #undef PRIVATE
36     #define PRIVATE static
37    
38     #undef FFPU
39     #define FFPU /**/
40    
41     #undef FPU
42     #define FPU fpu.
43    
44     // Lauri-- full words to avoid partial register stalls.
45     struct double_flags {
46     uae_u32 in_range;
47     uae_u32 zero;
48     uae_u32 infinity;
49     uae_u32 nan;
50     uae_u32 negative;
51     };
52     PRIVATE double_flags fl_source;
53     PRIVATE double_flags fl_dest;
54     PRIVATE inline void FFPU get_dest_flags(fpu_register const & r);
55     PRIVATE inline void FFPU get_source_flags(fpu_register const & r);
56    
57     PRIVATE inline void FFPU make_nan(fpu_register & r);
58     PRIVATE inline void FFPU make_zero_positive(fpu_register & r);
59     PRIVATE inline void FFPU make_zero_negative(fpu_register & r);
60     PRIVATE inline void FFPU make_inf_positive(fpu_register & r);
61     PRIVATE inline void FFPU make_inf_negative(fpu_register & r);
62    
63     PRIVATE inline void FFPU fast_scale(fpu_register & r, int add);
64     PRIVATE inline fpu_register FFPU fast_fgetexp(fpu_register const & r);
65    
66     // May be optimized for particular processors
67     #ifndef FPU_USE_NATIVE_FLAGS
68     PRIVATE inline void FFPU make_fpsr(fpu_register const & r);
69     #endif
70    
71     // Normalize to range 1..2
72     PRIVATE inline void FFPU fast_remove_exponent(fpu_register & r);
73    
74     // The sign of the quotient is the exclusive-OR of the sign bits
75     // of the source and destination operands.
76     PRIVATE inline uae_u32 FFPU get_quotient_sign(
77     fpu_register const & ra, fpu_register const & rb
78     );
79    
80     // Quotient Byte is loaded with the sign and least significant
81     // seven bits of the quotient.
82     PRIVATE inline void FFPU make_quotient(
83     fpu_register const & quotient, uae_u32 sign
84     );
85    
86     // to_single
87     PRIVATE inline fpu_register FFPU make_single(
88     uae_u32 value
89     );
90    
91     // from_single
92     PRIVATE inline uae_u32 FFPU extract_single(
93     fpu_register const & src
94     );
95    
96     // to_exten
97     PRIVATE inline fpu_register FFPU make_extended(
98     uae_u32 wrd1, uae_u32 wrd2, uae_u32 wrd3
99     );
100    
101     /*
102     Would be so much easier with full size floats :(
103     ... this is so vague.
104     */
105     // to_exten_no_normalize
106     PRIVATE inline void FFPU make_extended_no_normalize(
107     uae_u32 wrd1, uae_u32 wrd2, uae_u32 wrd3, fpu_register & result
108     );
109    
110     // from_exten
111     PRIVATE inline void FFPU extract_extended(fpu_register const & src,
112     uae_u32 * wrd1, uae_u32 * wrd2, uae_u32 * wrd3
113     );
114    
115     // to_double
116     PRIVATE inline fpu_register FFPU make_double(
117     uae_u32 wrd1, uae_u32 wrd2
118     );
119    
120     // from_double
121     PRIVATE inline void FFPU extract_double(fpu_register const & src,
122     uae_u32 * wrd1, uae_u32 * wrd2
123     );
124    
125     PRIVATE inline fpu_register FFPU make_packed(
126     uae_u32 wrd1, uae_u32 wrd2, uae_u32 wrd3
127     );
128    
129     PRIVATE inline void FFPU extract_packed(
130     fpu_register const & src, uae_u32 * wrd1, uae_u32 * wrd2, uae_u32 * wrd3
131     );
132    
133     PRIVATE inline int FFPU get_fp_value(
134     uae_u32 opcode, uae_u16 extra, fpu_register & src
135     );
136    
137     PRIVATE inline int FFPU put_fp_value(
138     uae_u32 opcode, uae_u16 extra, fpu_register const & value
139     );
140    
141     PRIVATE inline int FFPU get_fp_ad(
142     uae_u32 opcode, uae_u32 * ad
143     );
144    
145     PRIVATE inline int FFPU fpp_cond(
146     int condition
147     );
148    
149     #endif /* FPU_IEEE_H */