xref: /csrg-svn/old/as.vax/floattab.c (revision 19837)
15804Srrh /*
2*19837Sdist  * Copyright (c) 1982 Regents of the University of California.
3*19837Sdist  * All rights reserved.  The Berkeley software License Agreement
4*19837Sdist  * specifies the terms and conditions for redistribution.
55804Srrh  */
6*19837Sdist 
75804Srrh #ifndef lint
8*19837Sdist static char sccsid[] = "@(#)floattab.c	5.1 (Berkeley) 04/30/85";
95804Srrh #endif not lint
105804Srrh 
115804Srrh #include <stdio.h>
125804Srrh #include "as.h"
135804Srrh #define		N	NOTAKE
145804Srrh 
155804Srrh struct ty_bigdesc ty_bigdesc[] = {
165804Srrh {	/* TYPB */
175804Srrh 	{ 15, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
185804Srrh 	{  N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, 0 },
195804Srrh 	{ N, N },
205804Srrh 	{ N, N },
215804Srrh 	0,	/* mantissa lshift */
225804Srrh 	0,	/* exponent rshift */
235804Srrh 	8,	/* mantissa sig bits */
245804Srrh 	0,	/* exponent sig bits */
255804Srrh 	8,	/* exponent excess */
265804Srrh },
275804Srrh {	/* TYPW */
285804Srrh 	{ 14, 15, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
295804Srrh 	{ N, N, N, N, N, N, N, N, N, N, N, N, N, N, 0, 1 },
305804Srrh 	{ N, N},
315804Srrh 	{ N, N},
325804Srrh 	0,	/* mantissa lshift */
335804Srrh 	0,	/* exponent rshift */
345804Srrh 	16,	/* mantissa sig bits */
355804Srrh 	0,	/* exponent sig bits */
365804Srrh 	16,	/* exponent excess */
375804Srrh },
385804Srrh {	/* TYPL */
395804Srrh 	{ 12, 13, 14, 15, N, N, N, N, N, N, N, N, N, N, N, N },
405804Srrh 	{ N, N, N, N, N, N, N, N, N, N, N, N, 0, 1, 2, 3 },
415804Srrh 	{ N, N },
425804Srrh 	{ N, N },
435804Srrh 	0,	/* mantissa lshift */
445804Srrh 	0,	/* exponent rshift */
455804Srrh 	32,	/* mantissa sig bits */
465804Srrh 	0,	/* exponent sig bits */
475804Srrh 	32,	/* exponent excess */
485804Srrh },
495804Srrh {	/* TYPQ */
505804Srrh 	{ 8, 9, 10, 11, 12, 13, 14, 15, N, N, N, N, N, N, N, N },
515804Srrh 	{ N, N, N, N, N, N, N, N, 0, 1, 2, 3, 4, 5, 6, 7 },
525804Srrh 	{ N, N },
535804Srrh 	{ N, N },
545804Srrh 	0,	/* mantissa lshift */
555804Srrh 	0,	/* exponent rshift */
565804Srrh 	64,	/* mantissa sig bits */
575804Srrh 	0,	/* exponent sig bits */
585804Srrh 	64,	/* exponent excess */
595804Srrh },
605804Srrh {	/* TYPO */
615804Srrh 	{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
625804Srrh 	{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
635804Srrh 	{ N, N },
645804Srrh 	{ N, N },
655804Srrh 	0,	/* mantissa lshift */
665804Srrh 	0,	/* exponent rshift */
675804Srrh 	128,	/* mantissa sig bits */
685804Srrh 	0,	/* exponent sig bits */
695804Srrh 	128,	/* exponent excess */
705804Srrh },
715804Srrh {	/* TYPF */
725804Srrh 	{ 15, N, 13, 14, N, N, N, N, N, N, N, N, N, N, N, N },
735804Srrh 	{ N, N, N, N, N, N, N, N, N, N, N, N, N, 2, 3, 0 },
745804Srrh 	{ 0, 1 },
755804Srrh 	{ 0, 1 },
765804Srrh 	1,	/* mantissa lshift */
775804Srrh 	7,	/* exponent rshift */
785804Srrh 	24,	/* mantissa sig bits */
795804Srrh 	8,	/* exponent sig bits */
805804Srrh 	128	/* exponent excess */
815804Srrh },
825804Srrh {	/* TYPD */
835804Srrh 	{ 15, N, 13, 14, 11, 12, 9, 10, N, N, N, N, N, N, N, N },
845804Srrh 	{ N, N, N, N, N, N, N, N, N, 6, 7, 4, 5, 2, 3, 0 },
855804Srrh 	{ 0, 1 },
865804Srrh 	{ 0, 1 },
875804Srrh 	1,	/* mantissa lshift */
885804Srrh 	7,	/* exponent rshift */
895804Srrh 	56,	/* mantissa sig bits */
905804Srrh 	8,	/* exponent sig bits */
915804Srrh 	128	/* exponent excess */
925804Srrh },
935804Srrh {	/* TYPG */
945804Srrh 	{ 15, N, 13, 14, 11, 12, 9, 10, N, N, N, N, N, N, N, N },
955804Srrh 	{ N, N, N, N, N, N, N, N, N, 6, 7, 4, 5, 2, 3, 0 },
965804Srrh 	{ 0, 1 },
975804Srrh 	{ 0, 1 },
985804Srrh 	4,	/* mantissa lshift */
995804Srrh 	4,	/* exponent rshift */
1005804Srrh 	53,	/* mantissa sig bits */
1015804Srrh 	11,	/* exponent sig bits */
1025804Srrh 	1024	/* exponent excess */
1035804Srrh },
1045804Srrh {	/* TYPH */
1055804Srrh 	{ N, N, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3 },
1065804Srrh 	{ N, N, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3 },
1075804Srrh 	{ 0, 1 },
1085804Srrh 	{ 0, 1 },
1095804Srrh 	0,	/* mantissa lshift */
1105804Srrh 	0,	/* exponent rshift */
1115804Srrh 	113,	/* mantissa sig bits */
1125804Srrh 	15,	/* exponent sig bits */
1135804Srrh 	16384	/* exponent excess */
1145804Srrh },
1155804Srrh {0}		/* TYPNONE */
1165804Srrh };
1175804Srrh 
cfloattab()1185804Srrh cfloattab()
1195804Srrh {
1205804Srrh 	reg	struct ty_bigdesc	*p;
1215804Srrh 	reg	int	i;
1225804Srrh 	reg	int	j;
1235804Srrh 	reg	int	k;
1245804Srrh 		extern	int	ty_float[];
1255804Srrh 
1265804Srrh 	for (i = 0; i < TYPNONE - 1; i++){
1275804Srrh 		p = &ty_bigdesc[i];
1285804Srrh 		for (j = 0; j < 16; j++){
1295804Srrh 			if (((char)p->b_upmmap[j]) != NOTAKE){
1305804Srrh 				k = p->b_pmmap[p->b_upmmap[j]];
1315804Srrh 				if (j != k)
1325804Srrh 					printf("%s:p[up[%d]] == %d\n",
1335804Srrh 						ty_string[i],j,k);
1345804Srrh 			}
1355804Srrh 
1365804Srrh 			if (((char)p->b_pmmap[j]) != NOTAKE){
1375804Srrh 				k = p->b_upmmap[p->b_pmmap[j]];
1385804Srrh 				if (j != k)
1395804Srrh 					printf("%s:up[p[%d]] == %d\n",
1405804Srrh 						ty_string[i],j,k);
1415804Srrh 			}
1425804Srrh 		}
1435804Srrh 		if (!ty_float[i])
1445804Srrh 			continue;
1455804Srrh 		k = (p->b_msigbits - 1) + p->b_mlshift;
1465804Srrh 		if (k % 8)
1475804Srrh 			printf("sigbits: %d, lshift: %d, excess: %d\n",
1485804Srrh 				p->b_msigbits, p->b_mlshift, k % 8);
1495804Srrh 		if ((15 - (k / 8)) < 0)
1505804Srrh 			printf("lsbyte <= 0\n");
1515804Srrh 		if ( (8 - (p->b_mlshift + 2)) <= 0)
1525804Srrh 			printf("Shifted byte 15 into byte 14");
1535804Srrh 		if ( 1 << (p->b_esigbits - 1) != p->b_eexcess)
1545804Srrh 			printf("sigbits == %d, excess = %d\n",
1555804Srrh 				p->b_esigbits, p->b_eexcess);
1565804Srrh 	}
1575804Srrh }
158