Deleted Added
full compact
1/****************************************************************
2
3The author of this software is David M. Gay.
4
5Copyright (C) 1998, 1999 by Lucent Technologies
6All Rights Reserved
7
8Permission to use, copy, modify, and distribute this software and

--- 78 unchanged lines hidden (view full) ---

87#ifdef KR_headers
88 (v) Bigint *v;
89#else
90 (Bigint *v)
91#endif
92{
93 if (v) {
94 if (v->k > Kmax)
95#ifdef FREE
96 FREE((void*)v);
97#else
98 free((void*)v);
99#endif
100 else {
101 ACQUIRE_DTOA_LOCK(0);
102 v->next = freelist[v->k];
103 freelist[v->k] = v;
104 FREE_DTOA_LOCK(0);
105 }
106 }
107 }
108
109 int
110lo0bits
111#ifdef KR_headers
112 (y) ULong *y;
113#else
114 (ULong *y)
115#endif
116{
113 register int k;
114 register ULong x = *y;
117 int k;
118 ULong x = *y;
119
120 if (x & 7) {
121 if (x & 1)
122 return 0;
123 if (x & 2) {
124 *y = x >> 1;
125 return 1;
126 }

--- 82 unchanged lines hidden (view full) ---

209 b->wds = wds;
210 }
211 return b;
212 }
213
214 int
215hi0bits_D2A
216#ifdef KR_headers
213 (x) register ULong x;
217 (x) ULong x;
218#else
215 (register ULong x)
219 (ULong x)
220#endif
221{
218 register int k = 0;
222 int k = 0;
223
224 if (!(x & 0xffff0000)) {
225 k = 16;
226 x <<= 16;
227 }
228 if (!(x & 0xff000000)) {
229 k += 8;
230 x <<= 8;

--- 386 unchanged lines hidden (view full) ---

617#ifdef KR_headers
618 (a, e) Bigint *a; int *e;
619#else
620 (Bigint *a, int *e)
621#endif
622{
623 ULong *xa, *xa0, w, y, z;
624 int k;
621 double d;
625 U d;
626#ifdef VAX
627 ULong d0, d1;
628#else
625#define d0 word0(d)
626#define d1 word1(d)
629#define d0 word0(&d)
630#define d1 word1(&d)
631#endif
632
633 xa0 = a->x;
634 xa = xa0 + a->wds;
635 y = *--xa;
636#ifdef DEBUG
637 if (!y) Bug("zero y in b2d");
638#endif
639 k = hi0bits(y);
640 *e = 32 - k;
641#ifdef Pack_32
642 if (k < Ebits) {
639 d0 = Exp_1 | y >> Ebits - k;
643 d0 = Exp_1 | y >> (Ebits - k);
644 w = xa > xa0 ? *--xa : 0;
641 d1 = y << (32-Ebits) + k | w >> Ebits - k;
645 d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
646 goto ret_d;
647 }
648 z = xa > xa0 ? *--xa : 0;
649 if (k -= Ebits) {
646 d0 = Exp_1 | y << k | z >> 32 - k;
650 d0 = Exp_1 | y << k | z >> (32 - k);
651 y = xa > xa0 ? *--xa : 0;
648 d1 = z << k | y >> 32 - k;
652 d1 = z << k | y >> (32 - k);
653 }
654 else {
655 d0 = Exp_1 | y;
656 d1 = z;
657 }
658#else
659 if (k < Ebits + 16) {
660 z = xa > xa0 ? *--xa : 0;

--- 7 unchanged lines hidden (view full) ---

668 w = xa > xa0 ? *--xa : 0;
669 k -= Ebits + 16;
670 d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
671 y = xa > xa0 ? *--xa : 0;
672 d1 = w << k + 16 | y << k;
673#endif
674 ret_d:
675#ifdef VAX
672 word0(d) = d0 >> 16 | d0 << 16;
673 word1(d) = d1 >> 16 | d1 << 16;
676 word0(&d) = d0 >> 16 | d0 << 16;
677 word1(&d) = d1 >> 16 | d1 << 16;
678#endif
675 return dval(d);
679 return dval(&d);
680 }
681#undef d0
682#undef d1
683
684 Bigint *
685d2b
686#ifdef KR_headers
683 (d, e, bits) double d; int *e, *bits;
687 (dd, e, bits) double dd; int *e, *bits;
688#else
685 (double d, int *e, int *bits)
689 (double dd, int *e, int *bits)
690#endif
691{
692 Bigint *b;
693 U d;
694#ifndef Sudden_Underflow
695 int i;
696#endif
697 int de, k;
698 ULong *x, y, z;
699#ifdef VAX
700 ULong d0, d1;
696 d0 = word0(d) >> 16 | word0(d) << 16;
697 d1 = word1(d) >> 16 | word1(d) << 16;
701#else
699#define d0 word0(d)
700#define d1 word1(d)
702#define d0 word0(&d)
703#define d1 word1(&d)
704#endif
705 d.d = dd;
706#ifdef VAX
707 d0 = word0(&d) >> 16 | word0(&d) << 16;
708 d1 = word1(&d) >> 16 | word1(&d) << 16;
709#endif
710
711#ifdef Pack_32
712 b = Balloc(1);
713#else
714 b = Balloc(2);
715#endif
716 x = b->x;
717

--- 6 unchanged lines hidden (view full) ---

724#endif
725#else
726 if ( (de = (int)(d0 >> Exp_shift)) !=0)
727 z |= Exp_msk1;
728#endif
729#ifdef Pack_32
730 if ( (y = d1) !=0) {
731 if ( (k = lo0bits(&y)) !=0) {
724 x[0] = y | z << 32 - k;
732 x[0] = y | z << (32 - k);
733 z >>= k;
734 }
735 else
736 x[0] = y;
737#ifndef Sudden_Underflow
738 i =
739#endif
740 b->wds = (x[1] = z) !=0 ? 2 : 1;
741 }
742 else {
735#ifdef DEBUG
736 if (!z)
737 Bug("Zero passed to d2b");
738#endif
743 k = lo0bits(&z);
744 x[0] = z;
745#ifndef Sudden_Underflow
746 i =
747#endif
748 b->wds = 1;
749 k += 32;
750 }

--- 42 unchanged lines hidden (view full) ---

793 --i;
794 b->wds = i + 1;
795#endif
796#ifndef Sudden_Underflow
797 if (de) {
798#endif
799#ifdef IBM
800 *e = (de - Bias - (P-1) << 2) + k;
797 *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
801 *bits = 4*P + 8 - k - hi0bits(word0(&d) & Frac_mask);
802#else
803 *e = de - Bias - (P-1) + k;
804 *bits = P - k;
805#endif
806#ifndef Sudden_Underflow
807 }
808 else {
809 *e = de - Bias - (P-1) + 1 + k;

--- 36 unchanged lines hidden (view full) ---

846
847 char *
848#ifdef KR_headers
849strcp_D2A(a, b) char *a; char *b;
850#else
851strcp_D2A(char *a, CONST char *b)
852#endif
853{
850 while(*a = *b++)
854 while((*a = *b++))
855 a++;
856 return a;
857 }
858
859#ifdef NO_STRING_H
860
861 Char *
862#ifdef KR_headers
863memcpy_D2A(a, b, len) Char *a; Char *b; size_t len;
864#else
865memcpy_D2A(void *a1, void *b1, size_t len)
866#endif
867{
864 register char *a = (char*)a1, *ae = a + len;
865 register char *b = (char*)b1, *a0 = a;
868 char *a = (char*)a1, *ae = a + len;
869 char *b = (char*)b1, *a0 = a;
870 while(a < ae)
871 *a++ = *b++;
872 return a0;
873 }
874
875#endif /* NO_STRING_H */