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