Pristine Ack-5.5
[Ack-5.5.git] / mach / proto / fp / FP_types.h
1 /*
2   (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
3   See the copyright notice in the ACK home directory, in the file "Copyright".
4 */
5
6 /* $Id: FP_types.h,v 1.6 1994/06/24 13:30:58 ceriel Exp $ */
7
8 /********************************************************/
9 /*
10         Type definitions for C Floating Point Package
11         include file for floating point package
12 */
13 /********************************************************/
14 /*
15         THESE STRUCTURES ARE USED TO ADDRESS THE INDIVIDUAL
16         PARTS OF THE FLOATING POINT NUMBER REPRESENTATIONS.
17
18         THREE STRUCTURES ARE DEFINED:
19                 SINGLE: single precision floating format
20                 DOUBLE: double precision floating format
21                 EXTEND: double precision extended format
22 */
23 /********************************************************/
24
25 #ifndef __FPTYPES
26 #define __FPTYPES
27
28 typedef struct  {
29         unsigned long   h_32;   /* higher 32 bits of 64 */
30         unsigned long   l_32;   /* lower  32 bits of 64 */
31 }       B64;
32
33 typedef unsigned long   SINGLE;
34
35 typedef struct  {
36         unsigned long   d[2];
37 }       DOUBLE;
38
39 typedef struct  {       /* expanded float format        */
40         short   sign;
41         short   exp;
42         B64     mantissa;
43 #define m1 mantissa.h_32
44 #define m2 mantissa.l_32
45 } EXTEND;
46
47 struct  fef4_returns {
48         int     e;
49         SINGLE  f;
50 };
51
52 struct  fef8_returns {
53         int     e;
54         DOUBLE  f;
55 };
56
57 struct fif4_returns {
58         SINGLE ipart;
59         SINGLE fpart;
60 };
61
62 struct fif8_returns {
63         DOUBLE ipart;
64         DOUBLE fpart;
65 };
66
67 #if __STDC__
68 #define _PROTOTYPE(function, params)    function params
69 #else
70 #define _PROTOTYPE(function, params)    function()
71 #endif
72 _PROTOTYPE( void add_ext, (EXTEND *e1, EXTEND *e2));
73 _PROTOTYPE( void mul_ext, (EXTEND *e1, EXTEND *e2));
74 _PROTOTYPE( void div_ext, (EXTEND *e1, EXTEND *e2));
75 _PROTOTYPE( void sub_ext, (EXTEND *e1, EXTEND *e2));
76 _PROTOTYPE( void sft_ext, (EXTEND *e1, EXTEND *e2));
77 _PROTOTYPE( void nrm_ext, (EXTEND *e1));
78 _PROTOTYPE( void zrf_ext, (EXTEND *e1));
79 _PROTOTYPE( void extend, (unsigned long *from, EXTEND *to, int size));
80 _PROTOTYPE( void compact, (EXTEND *from, unsigned long *to, int size));
81 _PROTOTYPE( void _fptrp, (int));
82 _PROTOTYPE( void adf4, (SINGLE s2, SINGLE s1));
83 _PROTOTYPE( void adf8, (DOUBLE s2, DOUBLE s1));
84 _PROTOTYPE( void sbf4, (SINGLE s2, SINGLE s1));
85 _PROTOTYPE( void sbf8, (DOUBLE s2, DOUBLE s1));
86 _PROTOTYPE( void dvf4, (SINGLE s2, SINGLE s1));
87 _PROTOTYPE( void dvf8, (DOUBLE s2, DOUBLE s1));
88 _PROTOTYPE( void mlf4, (SINGLE s2, SINGLE s1));
89 _PROTOTYPE( void mlf8, (DOUBLE s2, DOUBLE s1));
90 _PROTOTYPE( void ngf4, (SINGLE f));
91 _PROTOTYPE( void ngf8, (DOUBLE f));
92 _PROTOTYPE( void zrf4, (SINGLE *l));
93 _PROTOTYPE( void zrf8, (DOUBLE *z));
94 _PROTOTYPE( void cff4, (DOUBLE src));
95 _PROTOTYPE( void cff8, (SINGLE src));
96 _PROTOTYPE( void cif4, (int ss, long src));
97 _PROTOTYPE( void cif8, (int ss, long src));
98 _PROTOTYPE( void cuf4, (int ss, long src));
99 _PROTOTYPE( void cuf8, (int ss, long src));
100 _PROTOTYPE( long cfu, (int ds, int ss, DOUBLE src));
101 _PROTOTYPE( long cfi, (int ds, int ss, DOUBLE src));
102 _PROTOTYPE( int cmf4, (SINGLE s2, SINGLE s1));
103 _PROTOTYPE( int cmf8, (DOUBLE d1, DOUBLE d2));
104 _PROTOTYPE( void fef4, (struct fef4_returns *r, SINGLE s1));
105 _PROTOTYPE( void fef8, (struct fef8_returns *r, DOUBLE s1));
106 _PROTOTYPE( void fif4, (struct fif4_returns *p, SINGLE x, SINGLE y));
107 _PROTOTYPE( void fif8, (struct fif8_returns *p, DOUBLE x, DOUBLE y));
108
109 _PROTOTYPE( void b64_sft, (B64 *, int));
110 _PROTOTYPE( void b64_lsft, (B64 *));
111 _PROTOTYPE( void b64_rsft, (B64 *));
112 _PROTOTYPE( int b64_add, (B64 *, B64 *));
113 #endif