12 #include "cl_number.h"
18 cl_private_thing cl_I_constructor_from_UQ (uint64 wert)
20 if ((wert & (sint64)minus_bit(cl_value_len-1)) == 0)
21 // Bits, die nicht in den Fixnum-Wert >= 0 reinpassen.
22 return (cl_private_thing)(cl_combine(cl_FN_tag,(uint32)wert));
24 // (dessen Länge bn_minlength <= n <= ceiling((32+1)/intDsize) erfüllt)
25 #define UQ_maxlength ceiling(64+1,intDsize)
26 #define IF_LENGTH(i) \
27 if ((bn_minlength <= i) && (i <= UQ_maxlength)) \
28 if (!(i+1 <= UQ_maxlength) \
29 || ((uint64)wert < ((uint64)1 << (i*intDsize-1 < 64 ? i*intDsize-1 : 0))) \
32 { var cl_heap_bignum* ptr = allocate_bignum(1);
33 arrayLSref(ptr->data,1,0) = (uintD)wert;
34 return (cl_private_thing)(ptr);
37 { var cl_heap_bignum* ptr = allocate_bignum(2);
38 arrayLSref(ptr->data,2,0) = (uintD)wert;
40 arrayLSref(ptr->data,2,1) = 0;
42 arrayLSref(ptr->data,2,1) = (uintD)(wert>>intDsize);
44 return (cl_private_thing)(ptr);
48 { var cl_heap_bignum* ptr = allocate_bignum(3);
49 arrayLSref(ptr->data,3,0) = (uintD)wert; wert >>= intDsize;
50 arrayLSref(ptr->data,3,1) = (uintD)wert;
52 arrayLSref(ptr->data,3,2) = 0;
54 arrayLSref(ptr->data,3,2) = (uintD)(wert>>intDsize);
56 return (cl_private_thing)(ptr);
60 { var cl_heap_bignum* ptr = allocate_bignum(4);
61 arrayLSref(ptr->data,4,0) = (uintD)wert; wert >>= intDsize;
62 arrayLSref(ptr->data,4,1) = (uintD)wert; wert >>= intDsize;
63 arrayLSref(ptr->data,4,2) = (uintD)wert;
65 arrayLSref(ptr->data,4,3) = 0;
67 arrayLSref(ptr->data,4,3) = (uintD)(wert>>intDsize);
69 return (cl_private_thing)(ptr);
72 { var cl_heap_bignum* ptr = allocate_bignum(5);
73 arrayLSref(ptr->data,5,0) = (uintD)wert; wert >>= intDsize;
74 arrayLSref(ptr->data,5,1) = (uintD)wert; wert >>= intDsize;
75 arrayLSref(ptr->data,5,2) = (uintD)wert; wert >>= intDsize;
76 arrayLSref(ptr->data,5,3) = (uintD)wert;
78 arrayLSref(ptr->data,5,4) = 0;
80 arrayLSref(ptr->data,5,4) = (uintD)(wert>>intDsize);
82 return (cl_private_thing)(ptr);
86 { var cl_heap_bignum* ptr = allocate_bignum(6);
87 arrayLSref(ptr->data,6,0) = (uintD)wert; wert >>= intDsize;
88 arrayLSref(ptr->data,6,1) = (uintD)wert; wert >>= intDsize;
89 arrayLSref(ptr->data,6,2) = (uintD)wert; wert >>= intDsize;
90 arrayLSref(ptr->data,6,3) = (uintD)wert; wert >>= intDsize;
91 arrayLSref(ptr->data,6,4) = (uintD)wert;
93 arrayLSref(ptr->data,6,5) = 0;
95 arrayLSref(ptr->data,6,5) = (uintD)(wert>>intDsize);
97 return (cl_private_thing)(ptr);
100 { var cl_heap_bignum* ptr = allocate_bignum(7);
101 arrayLSref(ptr->data,7,0) = (uintD)wert; wert >>= intDsize;
102 arrayLSref(ptr->data,7,1) = (uintD)wert; wert >>= intDsize;
103 arrayLSref(ptr->data,7,2) = (uintD)wert; wert >>= intDsize;
104 arrayLSref(ptr->data,7,3) = (uintD)wert; wert >>= intDsize;
105 arrayLSref(ptr->data,7,4) = (uintD)wert; wert >>= intDsize;
106 arrayLSref(ptr->data,7,5) = (uintD)wert;
108 arrayLSref(ptr->data,7,6) = 0;
110 arrayLSref(ptr->data,7,6) = (uintD)(wert>>intDsize);
112 return (cl_private_thing)(ptr);
115 { var cl_heap_bignum* ptr = allocate_bignum(8);
116 arrayLSref(ptr->data,8,0) = (uintD)wert; wert >>= intDsize;
117 arrayLSref(ptr->data,8,1) = (uintD)wert; wert >>= intDsize;
118 arrayLSref(ptr->data,8,2) = (uintD)wert; wert >>= intDsize;
119 arrayLSref(ptr->data,8,3) = (uintD)wert; wert >>= intDsize;
120 arrayLSref(ptr->data,8,4) = (uintD)wert; wert >>= intDsize;
121 arrayLSref(ptr->data,8,5) = (uintD)wert; wert >>= intDsize;
122 arrayLSref(ptr->data,8,6) = (uintD)wert;
124 arrayLSref(ptr->data,8,7) = 0;
126 arrayLSref(ptr->data,8,7) = (uintD)(wert>>intDsize);
128 return (cl_private_thing)(ptr);
131 { var cl_heap_bignum* ptr = allocate_bignum(9);
132 arrayLSref(ptr->data,9,0) = (uintD)wert; wert >>= intDsize;
133 arrayLSref(ptr->data,9,1) = (uintD)wert; wert >>= intDsize;
134 arrayLSref(ptr->data,9,2) = (uintD)wert; wert >>= intDsize;
135 arrayLSref(ptr->data,9,3) = (uintD)wert; wert >>= intDsize;
136 arrayLSref(ptr->data,9,4) = (uintD)wert; wert >>= intDsize;
137 arrayLSref(ptr->data,9,5) = (uintD)wert; wert >>= intDsize;
138 arrayLSref(ptr->data,9,6) = (uintD)wert; wert >>= intDsize;
139 arrayLSref(ptr->data,9,7) = (uintD)wert;
141 arrayLSref(ptr->data,9,8) = 0;
143 arrayLSref(ptr->data,9,8) = (uintD)(wert>>intDsize);
145 return (cl_private_thing)(ptr);