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