|
|
1.1 root 1: /* @(#)fpcrtdefs.h 1.1 86/02/03 SMI */
2:
3: /*
4: * Copyright (c) 1985 by Sun Microsystems, Inc.
5: */
6:
7: #include "DEFS.h"
8:
9: #define ENTER(f) .globl f ; f:
10: #define OBSOLETE(f) ENTER(f)
11: /* Obsolete entry points, remove in next release. */
12: #define RTOBSOLETE(f) RTENTRY(f)
13:
14: /*
15: /* typedef enum fp_switch_type {
16: /* fp_unspecified, /* Floating point unit not specified yet. */
17: /* fp_software, /* Floating point performed in software. */
18: /* fp_skyffp, /* Floating point performed on Sky FFP. */
19: /* fp_mc68881, /* Floating point performed on Motorola 68881. */
20: /* fp_sunfpa /* Floating point performed on Sun FPA. */
21: /* } ;
22: */
23: #define FP_UNSPECIFIED 0
24: #define FP_SOFTWARE 1
25: #define FP_SKYFFP 2
26: #define FP_MC68881 3
27: #define FP_SUNFPA 4
28:
29: /*
30: Structure of a V... entry point:
31: Vxxx: jsr V_switch:L
32: .long Fxxx software gets translated to jmp Fxxx:L
33: .long Sxxx Sky ffp board gets translated to jmp Sxxx:L
34: .long Mxxx Motorola 68881 or emulator
35: .long Wxxx Sun FPA board gets translated to jmp Wxxx:L
36: */
37:
38: #define VOFFSET 2
39: #define FOFFSET 6
40: #define SOFFSET 10
41: #define MOFFSET 14
42: #define WOFFSET 18
43:
44: #define VECTORED(f) \
45: .data ; \
46: ENTER(V/**/f) ; \
47: jsr V_switch:L ; \
48: .long F/**/f,S/**/f,M/**/f,W/**/f
49:
50: #define VECTOR(f,g) \
51: .data ; \
52: OBSOLETE(g) ; \
53: ENTER(V/**/f) ; \
54: jsr V_switch:L ; \
55: .long F/**/f,S/**/f,M/**/f,W/**/f
56:
57: /* Entries to convert between C parameter convention and Vxxx convention. */
58:
59: #define CVDTOD(f,g) \
60: ENTER(_/**/f) ; \
61: moveml sp@(4),d0/d1 ; \
62: jra V/**/g/**/d
63:
64: #define CVDDTOD(f,g) \
65: ENTER(_/**/f) ; \
66: moveml sp@(4),d0/d1 ; \
67: lea sp@(12),a0 ; \
68: jra V/**/g/**/d
69:
70: #define VCDTOD(f) \
71: ENTER(f) ; \
72: moveml d0/d1,sp@- ; \
73: jsr _C/**/f ; \
74: addql #8,sp ; \
75: rts
76:
77: #define VCDDTOD(f) \
78: ENTER(f) ; \
79: movel a0@(4),sp@- ; \
80: movel a0@,sp@- ; \
81: moveml d0/d1,sp@- ; \
82: jsr _C/**/f ; \
83: addl #16,sp ; \
84: rts
85:
86: /* Entries to convert between Fortran parameter convention and Vxxx convention. */
87:
88: #define VFSTOS(x) \
89: ENTER(x) ; \
90: movel d0,sp@- ; \
91: pea sp@ ; \
92: jsr _F/**/x/**/_ ; \
93: addql #8,sp ; \
94: rts
95:
96: #define VFSSTOS(x) \
97: ENTER(x) ; \
98: moveml d0/d1,sp@- ; \
99: pea sp@(4) ; \
100: pea sp@(4) ; \
101: jsr _F/**/x/**/_ ; \
102: addl #16,sp ; \
103: rts
104:
105: #define VFDTOD(x) \
106: ENTER(x) ; \
107: moveml d0/d1,sp@- ; \
108: pea sp@ ; \
109: jsr _F/**/x/**/_ ; \
110: addl #12,sp ; \
111: rts
112:
113: #define VFDDTOD(x) \
114: ENTER(x) ; \
115: moveml d0/d1,sp@- ; \
116: pea a0@ ; \
117: pea sp@(4) ; \
118: jsr _F/**/x/**/_ ; \
119: addl #16,sp ; \
120: rts
121:
122: /* Floating point condition codes, as in movew #FLT,cc */
123:
124: #define FEQ 4 /* Z bit */
125: #define FLT 25 /* XNC bits */
126: #define FGT 0 /* no bits */
127: #define FUN 2 /* V bit */
128:
129: /* Floating point modes and status. */
130:
131: /*
132: * Rounding Direction
133: */
134:
135: #define ROUNDMASK ~0x30
136:
137: #define RNEAREST 0
138: #define RZERO 0x10
139: #define RMINUS 0x20
140: #define RPLUS 0x30
141:
142: /*
143: * Rounding Precision
144: */
145:
146: #define ROUNDTODOUBLE 0x80 /* 68881 rounding precision corresponding to F/S/W */
147:
148: /*
149: * Jump Table Equates - all odd and negative
150: */
151:
152: #define RETURNX -1 /* Return first argument */
153: #define RETURNY -3 /* Return second argument */
154: #define RETURNINVALID -5 /* Return a quiet nan and set errno */
155: #define RETURN1 -7 /* Return +1.0. */
156: #define RETURNINFORZERO -9 /* Return +inf for +inf, +0 for -inf. */
157:
158: /*
159: * Context save/restore info.
160: */
161:
162: #define FPSAVESIZE 64 /* Block for stacking state of current floating point device. */
163:
164: /* 68020 cache clear call
165: * 68010 noop
166: */
167:
168: #define CLEARCACHE trap #2 /* was jsr _getpid */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.