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 */ |