Deleted Added
full compact
misc.c (196916) misc.c (219557)
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)
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
95 free((void*)v);
98 free((void*)v);
99#endif
96 else {
97 ACQUIRE_DTOA_LOCK(0);
98 v->next = freelist[v->k];
99 freelist[v->k] = v;
100 FREE_DTOA_LOCK(0);
101 }
102 }
103 }
104
105 int
106lo0bits
107#ifdef KR_headers
108 (y) ULong *y;
109#else
110 (ULong *y)
111#endif
112{
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;
115
116 if (x & 7) {
117 if (x & 1)
118 return 0;
119 if (x & 2) {
120 *y = x >> 1;
121 return 1;
122 }

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

205 b->wds = wds;
206 }
207 return b;
208 }
209
210 int
211hi0bits_D2A
212#ifdef KR_headers
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;
214#else
218#else
215 (register ULong x)
219 (ULong x)
216#endif
217{
220#endif
221{
218 register int k = 0;
222 int k = 0;
219
220 if (!(x & 0xffff0000)) {
221 k = 16;
222 x <<= 16;
223 }
224 if (!(x & 0xff000000)) {
225 k += 8;
226 x <<= 8;

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

613#ifdef KR_headers
614 (a, e) Bigint *a; int *e;
615#else
616 (Bigint *a, int *e)
617#endif
618{
619 ULong *xa, *xa0, w, y, z;
620 int k;
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;
622#ifdef VAX
623 ULong d0, d1;
624#else
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)
627#endif
628
629 xa0 = a->x;
630 xa = xa0 + a->wds;
631 y = *--xa;
632#ifdef DEBUG
633 if (!y) Bug("zero y in b2d");
634#endif
635 k = hi0bits(y);
636 *e = 32 - k;
637#ifdef Pack_32
638 if (k < Ebits) {
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);
640 w = xa > xa0 ? *--xa : 0;
644 w = xa > xa0 ? *--xa : 0;
641 d1 = y << (32-Ebits) + k | w >> Ebits - k;
645 d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
642 goto ret_d;
643 }
644 z = xa > xa0 ? *--xa : 0;
645 if (k -= Ebits) {
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);
647 y = xa > xa0 ? *--xa : 0;
651 y = xa > xa0 ? *--xa : 0;
648 d1 = z << k | y >> 32 - k;
652 d1 = z << k | y >> (32 - k);
649 }
650 else {
651 d0 = Exp_1 | y;
652 d1 = z;
653 }
654#else
655 if (k < Ebits + 16) {
656 z = xa > xa0 ? *--xa : 0;

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

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

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

716#endif
717#else
718 if ( (de = (int)(d0 >> Exp_shift)) !=0)
719 z |= Exp_msk1;
720#endif
721#ifdef Pack_32
722 if ( (y = d1) !=0) {
723 if ( (k = lo0bits(&y)) !=0) {
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);
725 z >>= k;
726 }
727 else
728 x[0] = y;
729#ifndef Sudden_Underflow
730 i =
731#endif
732 b->wds = (x[1] = z) !=0 ? 2 : 1;
733 }
734 else {
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
739 k = lo0bits(&z);
740 x[0] = z;
741#ifndef Sudden_Underflow
742 i =
743#endif
744 b->wds = 1;
745 k += 32;
746 }

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

789 --i;
790 b->wds = i + 1;
791#endif
792#ifndef Sudden_Underflow
793 if (de) {
794#endif
795#ifdef IBM
796 *e = (de - Bias - (P-1) << 2) + k;
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);
798#else
799 *e = de - Bias - (P-1) + k;
800 *bits = P - k;
801#endif
802#ifndef Sudden_Underflow
803 }
804 else {
805 *e = de - Bias - (P-1) + 1 + k;

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

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