don't throw away float <-> double conversions for FORTRAN.
[unix-history] / usr / src / old / as.vax / floattab.c
CommitLineData
783a9e69
RH
1/*
2 * Copyright (c) 1982 Regents of the University of California
3 */
4#ifndef lint
f70ab843 5static char sccsid[] = "@(#)floattab.c 4.3 %G%";
783a9e69
RH
6#endif not lint
7
8#include <stdio.h>
9#include "as.h"
10#define N NOTAKE
11
12struct ty_bigdesc ty_bigdesc[] = {
13{ /* TYPB */
14 { 15, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
15 { N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, 0 },
16 { N, N },
17 { N, N },
18 0, /* mantissa lshift */
19 0, /* exponent rshift */
20 8, /* mantissa sig bits */
21 0, /* exponent sig bits */
22 8, /* exponent excess */
23},
24{ /* TYPW */
25 { 14, 15, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
26 { N, N, N, N, N, N, N, N, N, N, N, N, N, N, 0, 1 },
27 { N, N},
28 { N, N},
29 0, /* mantissa lshift */
30 0, /* exponent rshift */
31 16, /* mantissa sig bits */
32 0, /* exponent sig bits */
33 16, /* exponent excess */
34},
35{ /* TYPL */
36 { 12, 13, 14, 15, N, N, N, N, N, N, N, N, N, N, N, N },
37 { N, N, N, N, N, N, N, N, N, N, N, N, 0, 1, 2, 3 },
38 { N, N },
39 { N, N },
40 0, /* mantissa lshift */
41 0, /* exponent rshift */
42 32, /* mantissa sig bits */
43 0, /* exponent sig bits */
44 32, /* exponent excess */
45},
46{ /* TYPQ */
47 { 8, 9, 10, 11, 12, 13, 14, 15, N, N, N, N, N, N, N, N },
48 { N, N, N, N, N, N, N, N, 0, 1, 2, 3, 4, 5, 6, 7 },
49 { N, N },
50 { N, N },
51 0, /* mantissa lshift */
52 0, /* exponent rshift */
53 64, /* mantissa sig bits */
54 0, /* exponent sig bits */
55 64, /* exponent excess */
56},
57{ /* TYPO */
58 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
59 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
60 { N, N },
61 { N, N },
62 0, /* mantissa lshift */
63 0, /* exponent rshift */
64 128, /* mantissa sig bits */
65 0, /* exponent sig bits */
66 128, /* exponent excess */
67},
68{ /* TYPF */
69 { 15, N, 13, 14, N, N, N, N, N, N, N, N, N, N, N, N },
70 { N, N, N, N, N, N, N, N, N, N, N, N, N, 2, 3, 0 },
71 { 0, 1 },
72 { 0, 1 },
73 1, /* mantissa lshift */
74 7, /* exponent rshift */
75 24, /* mantissa sig bits */
76 8, /* exponent sig bits */
77 128 /* exponent excess */
78},
79{ /* TYPD */
80 { 15, N, 13, 14, 11, 12, 9, 10, N, N, N, N, N, N, N, N },
81 { N, N, N, N, N, N, N, N, N, 6, 7, 4, 5, 2, 3, 0 },
82 { 0, 1 },
83 { 0, 1 },
84 1, /* mantissa lshift */
85 7, /* exponent rshift */
86 56, /* mantissa sig bits */
87 8, /* exponent sig bits */
88 128 /* exponent excess */
89},
90{ /* TYPG */
91 { 15, N, 13, 14, 11, 12, 9, 10, N, N, N, N, N, N, N, N },
92 { N, N, N, N, N, N, N, N, N, 6, 7, 4, 5, 2, 3, 0 },
93 { 0, 1 },
94 { 0, 1 },
95 4, /* mantissa lshift */
96 4, /* exponent rshift */
97 53, /* mantissa sig bits */
98 11, /* exponent sig bits */
99 1024 /* exponent excess */
100},
101{ /* TYPH */
102 { N, N, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3 },
103 { N, N, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3 },
104 { 0, 1 },
105 { 0, 1 },
106 0, /* mantissa lshift */
107 0, /* exponent rshift */
108 113, /* mantissa sig bits */
109 15, /* exponent sig bits */
110 16384 /* exponent excess */
111},
112{0} /* TYPNONE */
113};
114
115cfloattab()
116{
117 reg struct ty_bigdesc *p;
118 reg int i;
119 reg int j;
120 reg int k;
121 extern int ty_float[];
122
123 for (i = 0; i < TYPNONE - 1; i++){
124 p = &ty_bigdesc[i];
125 for (j = 0; j < 16; j++){
126 if (((char)p->b_upmmap[j]) != NOTAKE){
127 k = p->b_pmmap[p->b_upmmap[j]];
128 if (j != k)
129 printf("%s:p[up[%d]] == %d\n",
130 ty_string[i],j,k);
131 }
132
133 if (((char)p->b_pmmap[j]) != NOTAKE){
134 k = p->b_upmmap[p->b_pmmap[j]];
135 if (j != k)
136 printf("%s:up[p[%d]] == %d\n",
137 ty_string[i],j,k);
138 }
139 }
140 if (!ty_float[i])
141 continue;
142 k = (p->b_msigbits - 1) + p->b_mlshift;
143 if (k % 8)
144 printf("sigbits: %d, lshift: %d, excess: %d\n",
145 p->b_msigbits, p->b_mlshift, k % 8);
146 if ((15 - (k / 8)) < 0)
147 printf("lsbyte <= 0\n");
148 if ( (8 - (p->b_mlshift + 2)) <= 0)
149 printf("Shifted byte 15 into byte 14");
150 if ( 1 << (p->b_esigbits - 1) != p->b_eexcess)
151 printf("sigbits == %d, excess = %d\n",
152 p->b_esigbits, p->b_eexcess);
153 }
154}