Merge branch 'develop' of gitlab.com:embeddable-common-lisp/ecl into develop

This commit is contained in:
Daniel Kochmański 2015-08-31 08:58:15 +02:00
commit 1675706f6c
15 changed files with 41 additions and 39 deletions

View file

@ -142,7 +142,7 @@
#ifdef _M_X64 #ifdef _M_X64
#define ECL_INT_BITS 64 #define ECL_INT_BITS 64
#define ECL_LONG_BITS 32 #define ECL_LONG_BITS 32
#define FIXNUM_BITS 64 #define ECL_FIXNUM_BITS 64
#define MOST_POSITIVE_FIXNUM ((cl_fixnum)2305843009213693951LL) #define MOST_POSITIVE_FIXNUM ((cl_fixnum)2305843009213693951LL)
#define MOST_NEGATIVE_FIXNUM ((cl_fixnum)-2305843009213693952LL) #define MOST_NEGATIVE_FIXNUM ((cl_fixnum)-2305843009213693952LL)
typedef long long cl_fixnum; typedef long long cl_fixnum;
@ -151,7 +151,7 @@ typedef unsigned long long cl_hashkey;
#else #else
#define ECL_INT_BITS 32 #define ECL_INT_BITS 32
#define ECL_LONG_BITS 32 #define ECL_LONG_BITS 32
#define FIXNUM_BITS 32 #define ECL_FIXNUM_BITS 32
#define MOST_POSITIVE_FIXNUM ((cl_fixnum)536870911) #define MOST_POSITIVE_FIXNUM ((cl_fixnum)536870911)
#define MOST_NEGATIVE_FIXNUM ((cl_fixnum)-536870912) #define MOST_NEGATIVE_FIXNUM ((cl_fixnum)-536870912)
typedef int cl_fixnum; typedef int cl_fixnum;

View file

@ -105,10 +105,11 @@ _ecl_big_register_normalize(cl_object x)
return _ecl_big_register_copy(x); return _ecl_big_register_copy(x);
} }
#if GMP_LIMB_BITS >= FIXNUM_BITS #if GMP_LIMB_BITS >= ECL_FIXNUM_BITS
static const int limbs_per_fixnum = 1; static const int limbs_per_fixnum = 1;
#else #else
static const int limbs_per_fixnum = (FIXNUM_BITS + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; static const int limbs_per_fixnum = (ECL_FIXNUM_BITS + GMP_LIMB_BITS - 1) /
GMP_LIMB_BITS;
#endif #endif
#define ECL_BIGNUM_ABS_SIZE(x) \ #define ECL_BIGNUM_ABS_SIZE(x) \
@ -117,7 +118,7 @@ static const int limbs_per_fixnum = (FIXNUM_BITS + GMP_LIMB_BITS - 1) / GMP_LIMB
cl_object cl_object
_ecl_fix_times_fix(cl_fixnum x, cl_fixnum y) _ecl_fix_times_fix(cl_fixnum x, cl_fixnum y)
{ {
#if ECL_LONG_BITS >= FIXNUM_BITS #if ECL_LONG_BITS >= ECL_FIXNUM_BITS
ECL_WITH_TEMP_BIGNUM(z,4); ECL_WITH_TEMP_BIGNUM(z,4);
_ecl_big_set_si(z, x); _ecl_big_set_si(z, x);
_ecl_big_mul_si(z, z, y); _ecl_big_mul_si(z, z, y);
@ -160,7 +161,7 @@ _ecl_big_times_fix(cl_object b, cl_fixnum i)
size = ECL_BIGNUM_ABS_SIZE(b); size = ECL_BIGNUM_ABS_SIZE(b);
size += limbs_per_fixnum; size += limbs_per_fixnum;
z = _ecl_alloc_compact_bignum(size); z = _ecl_alloc_compact_bignum(size);
#if ECL_LONG_BITS >= FIXNUM_BITS #if ECL_LONG_BITS >= ECL_FIXNUM_BITS
_ecl_big_mul_si(z, b, i); _ecl_big_mul_si(z, b, i);
#else #else
{ {
@ -332,7 +333,7 @@ fixnnint(cl_object x)
#undef _ecl_big_set_fixnum #undef _ecl_big_set_fixnum
#undef _ecl_big_set_index #undef _ecl_big_set_index
#if ECL_LONG_BITS >= FIXNUM_BITS #if ECL_LONG_BITS >= ECL_FIXNUM_BITS
cl_object cl_object
_ecl_big_set_fixnum(cl_object x, cl_fixnum f) _ecl_big_set_fixnum(cl_object x, cl_fixnum f)
{ {
@ -358,7 +359,7 @@ _ecl_big_get_index(cl_object x)
{ {
return mpz_get_ui((x)->big.big_num); return mpz_get_ui((x)->big.big_num);
} }
#elif GMP_LIMB_BITS >= FIXNUM_BITS #elif GMP_LIMB_BITS >= ECL_FIXNUM_BITS
cl_object cl_object
_ecl_big_set_fixnum(cl_object x, cl_fixnum f) _ecl_big_set_fixnum(cl_object x, cl_fixnum f)
{ {
@ -408,7 +409,7 @@ _ecl_big_fits_in_index(cl_object x)
} }
#else #else
# error "ECL cannot build with GMP when both long and mp_limb_t are smaller than cl_fixnum" # error "ECL cannot build with GMP when both long and mp_limb_t are smaller than cl_fixnum"
#endif /* FIXNUM_BITS > GMP_LIMB_BITS, ECL_LONG_BITS */ #endif /* ECL_FIXNUM_BITS > GMP_LIMB_BITS, ECL_LONG_BITS */
#ifdef ECL_LONG_FLOAT #ifdef ECL_LONG_FLOAT
long double long double

View file

@ -5344,7 +5344,7 @@ ecl_off_t_to_integer(ecl_off_t offset)
cl_object y = _ecl_big_register0(); cl_object y = _ecl_big_register0();
if (sizeof(ECL_BIGNUM_LIMBS(y)[0]) == sizeof(cl_index)) { if (sizeof(ECL_BIGNUM_LIMBS(y)[0]) == sizeof(cl_index)) {
ECL_BIGNUM_LIMBS(y)[0] = (cl_index)offset; ECL_BIGNUM_LIMBS(y)[0] = (cl_index)offset;
offset >>= FIXNUM_BITS; offset >>= ECL_FIXNUM_BITS;
ECL_BIGNUM_LIMBS(y)[1] = offset; ECL_BIGNUM_LIMBS(y)[1] = offset;
ECL_BIGNUM_SIZE(y) = offset? 2 : 1; ECL_BIGNUM_SIZE(y) = offset? 2 : 1;
} else if (sizeof(ECL_BIGNUM_LIMBS(y)[0]) >= sizeof(ecl_off_t)) { } else if (sizeof(ECL_BIGNUM_LIMBS(y)[0]) >= sizeof(ecl_off_t)) {
@ -5371,7 +5371,7 @@ ecl_integer_to_off_t(cl_object offset)
} }
if (ECL_BIGNUM_SIZE(offset) == 2) { if (ECL_BIGNUM_SIZE(offset) == 2) {
output = ECL_BIGNUM_LIMBS(offset)[1]; output = ECL_BIGNUM_LIMBS(offset)[1];
output <<= FIXNUM_BITS; output <<= ECL_FIXNUM_BITS;
} }
output += ECL_BIGNUM_LIMBS(offset)[0]; output += ECL_BIGNUM_LIMBS(offset)[0];
} else if (sizeof(ECL_BIGNUM_LIMBS(offset)[0]) >= sizeof(ecl_off_t)) { } else if (sizeof(ECL_BIGNUM_LIMBS(offset)[0]) >= sizeof(ecl_off_t)) {

View file

@ -1055,7 +1055,7 @@ cl_object
cl_sxhash(cl_object key) cl_sxhash(cl_object key)
{ {
cl_index output = _hash_equal(3, 0, key); cl_index output = _hash_equal(3, 0, key);
const cl_index mask = ((cl_index)1 << (FIXNUM_BITS - 3)) - 1; const cl_index mask = ((cl_index)1 << (ECL_FIXNUM_BITS - 3)) - 1;
@(return ecl_make_fixnum(output & mask)) @(return ecl_make_fixnum(output & mask))
} }

View file

@ -91,7 +91,7 @@ cl_fixnum ecl_option_values[ECL_OPT_LIMIT+1] = {
#if ECL_FIXNUM_BITS <= 32 #if ECL_FIXNUM_BITS <= 32
1024*1024*1024, /* ECL_OPT_HEAP_SIZE */ 1024*1024*1024, /* ECL_OPT_HEAP_SIZE */
#else #else
4024*1024*1024, /* ECL_OPT_HEAP_SIZE */ 4294967296L, /* ECL_OPT_HEAP_SIZE */
#endif #endif
1024*1024, /* ECL_OPT_HEAP_SAFETY_AREA */ 1024*1024, /* ECL_OPT_HEAP_SAFETY_AREA */
0, /* ECL_OPT_THREAD_INTERRUPT_SIGNAL */ 0, /* ECL_OPT_THREAD_INTERRUPT_SIGNAL */

View file

@ -7,7 +7,7 @@
* SBCL's newest algorithm. Leads to few collisions, and it is faster. * SBCL's newest algorithm. Leads to few collisions, and it is faster.
*/ */
#if FIXNUM_BITS > 32 #if ECL_FIXNUM_BITS > 32
/* /*
* 64 bit version * 64 bit version
*/ */

View file

@ -258,7 +258,7 @@ ecl_ash(cl_object x, cl_fixnum w)
* to implementation-specific results :-/ * to implementation-specific results :-/
*/ */
cl_fixnum y = ecl_fixnum(x); cl_fixnum y = ecl_fixnum(x);
if (bits >= FIXNUM_BITS) { if (bits >= ECL_FIXNUM_BITS) {
y = (y < 0)? -1 : 0; y = (y < 0)? -1 : 0;
} else { } else {
y >>= bits; y >>= bits;
@ -282,7 +282,7 @@ ecl_fixnum_bit_length(cl_fixnum i)
int count; int count;
if (i < 0) if (i < 0)
i = ~i; i = ~i;
for (count = 0; i && (count < FIXNUM_BITS); i >>= 1, count++) for (count = 0; i && (count < ECL_FIXNUM_BITS); i >>= 1, count++)
; ;
return count; return count;
} }
@ -382,7 +382,7 @@ cl_logbitp(cl_object p, cl_object x)
cl_index n = ecl_to_size(p); cl_index n = ecl_to_size(p);
if (ECL_FIXNUMP(x)) { if (ECL_FIXNUMP(x)) {
cl_fixnum y = ecl_fixnum(x); cl_fixnum y = ecl_fixnum(x);
if (n >= FIXNUM_BITS) { if (n >= ECL_FIXNUM_BITS) {
i = (y < 0); i = (y < 0);
} else { } else {
i = ((y >> n) & 1); i = ((y >> n) & 1);

View file

@ -168,8 +168,8 @@ random_integer(cl_object limit, cl_object state)
{ {
cl_index bit_length = ecl_integer_length(limit); cl_index bit_length = ecl_integer_length(limit);
cl_object buffer; cl_object buffer;
if (bit_length <= FIXNUM_BITS) if (bit_length <= ECL_FIXNUM_BITS)
bit_length = FIXNUM_BITS; bit_length = ECL_FIXNUM_BITS;
buffer = ecl_ash(ecl_make_fixnum(1), bit_length); buffer = ecl_ash(ecl_make_fixnum(1), bit_length);
for (bit_length = mpz_size(buffer->big.big_num); bit_length; ) { for (bit_length = mpz_size(buffer->big.big_num); bit_length; ) {
ECL_BIGNUM_LIMBS(buffer)[--bit_length] = ECL_BIGNUM_LIMBS(buffer)[--bit_length] =
@ -187,7 +187,7 @@ rando(cl_object x, cl_object rs)
} }
switch (ecl_t_of(x)) { switch (ecl_t_of(x)) {
case t_fixnum: case t_fixnum:
#if FIXNUM_BITS <= 32 #if ECL_FIXNUM_BITS <= 32
z = ecl_make_fixnum(generate_int32(rs->random.value) % ecl_fixnum(x)); z = ecl_make_fixnum(generate_int32(rs->random.value) % ecl_fixnum(x));
break; break;
#endif #endif

View file

@ -147,7 +147,7 @@ ecl_to_short(cl_object x) {
x); x);
} }
#if FIXNUM_BITS < 32 #if ECL_FIXNUM_BITS < 32
# error "Unsupported platform with cl_fixnum < ecl_uint32_t" # error "Unsupported platform with cl_fixnum < ecl_uint32_t"
#endif #endif
@ -184,7 +184,7 @@ ecl_to_int16_t(cl_object x) {
} }
#endif /* ecl_uint16_t */ #endif /* ecl_uint16_t */
#if defined(ecl_uint32_t) && (FIXNUM_BITS > 32) #if defined(ecl_uint32_t) && (ECL_FIXNUM_BITS > 32)
ecl_uint32_t ecl_uint32_t
ecl_to_uint32_t(cl_object x) { ecl_to_uint32_t(cl_object x) {
const uint32_t uint32_max = 0xFFFFFFFFUL; const uint32_t uint32_max = 0xFFFFFFFFUL;
@ -216,7 +216,7 @@ ecl_to_int32_t(cl_object x) {
} }
#endif /* ecl_uint32_t */ #endif /* ecl_uint32_t */
#if defined(ecl_uint64_t) && (FIXNUM_BITS < 64) #if defined(ecl_uint64_t) && (ECL_FIXNUM_BITS < 64)
ecl_uint64_t ecl_uint64_t
ecl_to_uint64_t(cl_object x) { ecl_to_uint64_t(cl_object x) {
if (!ecl_minusp(x)) { if (!ecl_minusp(x)) {
@ -343,13 +343,14 @@ ecl_to_ulong_long(cl_object x) {
return (ecl_ulong_long_t)mpz_get_ui(x->big.big_num); return (ecl_ulong_long_t)mpz_get_ui(x->big.big_num);
} else { } else {
cl_object copy = _ecl_big_register0(); cl_object copy = _ecl_big_register0();
int i = ECL_LONG_LONG_BITS - FIXNUM_BITS; int i = ECL_LONG_LONG_BITS - ECL_FIXNUM_BITS;
mpz_fdiv_q_2exp(copy->bit.big_num, x->big.big_num, i); mpz_fdiv_q_2exp(copy->bit.big_num, x->big.big_num, i);
if (mpz_fits_ulong_p(copy->big.big_num)) { if (mpz_fits_ulong_p(copy->big.big_num)) {
volatile ecl_ulong_long_t output; volatile ecl_ulong_long_t output;
output = mpz_get_ui(copy->big.big_num); output = mpz_get_ui(copy->big.big_num);
for (i -= FIXNUM_BITS; i; i-= FIXNUM_BITS) { for (i -= ECL_FIXNUM_BITS; i;
output = (output << FIXNUM_BITS); i-= ECL_FIXNUM_BITS) {
output = (output << ECL_FIXNUM_BITS);
output += mpz_get_ui(x->big.big_num); output += mpz_get_ui(x->big.big_num);
} }
return output; return output;
@ -373,13 +374,13 @@ ecl_to_long_long(cl_object x)
return (ecl_long_long_t)mpz_get_si(x->big.big_num); return (ecl_long_long_t)mpz_get_si(x->big.big_num);
} else { } else {
cl_object copy = _ecl_big_register0(); cl_object copy = _ecl_big_register0();
int i = ECL_LONG_LONG_BITS - FIXNUM_BITS; int i = ECL_LONG_LONG_BITS - ECL_FIXNUM_BITS;
mpz_fdiv_q_2exp(copy->bit.big_num, x->big.big_num, i); mpz_fdiv_q_2exp(copy->bit.big_num, x->big.big_num, i);
if (mpz_fits_ulong_p(copy->big.big_num)) { if (mpz_fits_ulong_p(copy->big.big_num)) {
volatile ecl_long_long_t output; volatile ecl_long_long_t output;
output = mpz_get_si(copy->big.big_num); output = mpz_get_si(copy->big.big_num);
for (i -= FIXNUM_BITS; i; i-= FIXNUM_BITS) { for (i -= ECL_FIXNUM_BITS; i; i-= ECL_FIXNUM_BITS) {
output = (output << FIXNUM_BITS); output = (output << ECL_FIXNUM_BITS);
output += mpz_get_ui(x->big.big_num); output += mpz_get_ui(x->big.big_num);
} }
return output; return output;
@ -876,7 +877,7 @@ cl_rational(cl_object x)
cl_object cl_object
_ecl_long_double_to_integer(long double d0) _ecl_long_double_to_integer(long double d0)
{ {
const int fb = FIXNUM_BITS - 3; const int fb = ECL_FIXNUM_BITS - 3;
int e; int e;
long double d = frexpl(d0, &e); long double d = frexpl(d0, &e);
if (e <= fb) { if (e <= fb) {

View file

@ -1105,7 +1105,7 @@ NO_DIRECTORY:
* we cannot use cl_write and friends. * we cannot use cl_write and friends.
*/ */
int n = ecl_fixnum(y), i; int n = ecl_fixnum(y), i;
char b[FIXNUM_BITS/2]; char b[ECL_FIXNUM_BITS / 2];
for (i = 0; n; i++) { for (i = 0; n; i++) {
b[i] = n%10 + '0'; b[i] = n%10 + '0';
n = n/10; n = n/10;

View file

@ -1729,7 +1729,7 @@ cl_symbols[] = {
{CLOS_ "DOCSTRING", CLOS_ORDINARY, NULL, -1, OBJNULL}, {CLOS_ "DOCSTRING", CLOS_ORDINARY, NULL, -1, OBJNULL},
{CLOS_ "SAFE-INSTANCE-REF", CLOS_ORDINARY, clos_safe_instance_ref, 2, OBJNULL}, {CLOS_ "SAFE-INSTANCE-REF", CLOS_ORDINARY, clos_safe_instance_ref, 2, OBJNULL},
{SYS_ "CL-FIXNUM-BITS", SI_CONSTANT, NULL, -1, ecl_make_fixnum(FIXNUM_BITS)}, {SYS_ "CL-FIXNUM-BITS", SI_CONSTANT, NULL, -1, ecl_make_fixnum(ECL_FIXNUM_BITS)},
{EXT_ "CL-FIXNUM", EXT_ORDINARY, NULL, -1, NULL}, {EXT_ "CL-FIXNUM", EXT_ORDINARY, NULL, -1, NULL},
{EXT_ "CL-INDEX", EXT_ORDINARY, NULL, -1, NULL}, {EXT_ "CL-INDEX", EXT_ORDINARY, NULL, -1, NULL},

View file

@ -153,7 +153,7 @@ typedef int16_t cl_oparg;
*/ */
#if (defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__clang__) && !defined(__llvm__)) #if (defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__clang__) && !defined(__llvm__))
#define ECL_THREADED_INTERPRETER #define ECL_THREADED_INTERPRETER
# if defined(__sun__) && (FIXNUM_BITS > 32) # if defined(__sun__) && (ECL_FIXNUM_BITS > 32)
# undef ECL_THREADED_INTERPRETER # undef ECL_THREADED_INTERPRETER
# endif # endif
#endif #endif

View file

@ -153,7 +153,7 @@
*/ */
#define ECL_INT_BITS @CL_INT_BITS@ #define ECL_INT_BITS @CL_INT_BITS@
#define ECL_LONG_BITS @CL_LONG_BITS@ #define ECL_LONG_BITS @CL_LONG_BITS@
#define FIXNUM_BITS @CL_FIXNUM_BITS@ #define ECL_FIXNUM_BITS @CL_FIXNUM_BITS@
#define MOST_POSITIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MAX@) #define MOST_POSITIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MAX@)
#define MOST_NEGATIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MIN@) #define MOST_NEGATIVE_FIXNUM ((cl_fixnum)@CL_FIXNUM_MIN@)
#define MOST_POSITIVE_FIXNUM_VAL @CL_FIXNUM_MAX@ #define MOST_POSITIVE_FIXNUM_VAL @CL_FIXNUM_MAX@

View file

@ -31,7 +31,7 @@
((void) memcpy(&(dst), &(src), sizeof(va_list))) ((void) memcpy(&(dst), &(src), sizeof(va_list)))
#endif #endif
#ifndef FIXNUM_BITS #ifndef ECL_FIXNUM_BITS
#include <ecl/config.h> #include <ecl/config.h>
#endif #endif

View file

@ -1030,8 +1030,8 @@ extern ECL_API ecl_uint8_t ecl_to_uint8_t(cl_object o);
extern ECL_API ecl_int8_t ecl_to_int8_t(cl_object o); extern ECL_API ecl_int8_t ecl_to_int8_t(cl_object o);
#define ecl_make_uint8_t(i) ecl_make_fixnum(i) #define ecl_make_uint8_t(i) ecl_make_fixnum(i)
#define ecl_make_int8_t(i) ecl_make_fixnum(i) #define ecl_make_int8_t(i) ecl_make_fixnum(i)
#if FIXNUM_BITS < 32 #if ECL_FIXNUM_BITS < 32
# error "Unsupported platforms with FIXNUM_BITS < 32" # error "Unsupported platforms with ECL_FIXNUM_BITS < 32"
#endif #endif
#ifdef ecl_uint16_t #ifdef ecl_uint16_t
extern ECL_API ecl_uint16_t ecl_to_uint16_t(cl_object o); extern ECL_API ecl_uint16_t ecl_to_uint16_t(cl_object o);
@ -1044,7 +1044,7 @@ extern ECL_API short ecl_to_short(cl_object o);
#define ecl_make_short(n) ecl_make_fixnum(n) #define ecl_make_short(n) ecl_make_fixnum(n)
#define ecl_make_ushort(n) ecl_make_fixnum(n) #define ecl_make_ushort(n) ecl_make_fixnum(n)
#ifdef ecl_uint32_t #ifdef ecl_uint32_t
# if FIXNUM_BITS == 32 # if ECL_FIXNUM_BITS == 32
# define ecl_to_uint32_t fixnnint # define ecl_to_uint32_t fixnnint
# define ecl_to_int32_t fixint # define ecl_to_int32_t fixint
# define ecl_make_uint32_t ecl_make_unsigned_integer # define ecl_make_uint32_t ecl_make_unsigned_integer
@ -1057,7 +1057,7 @@ extern ECL_API ecl_int32_t ecl_to_int32_t(cl_object o);
# endif # endif
#endif /* ecl_uint32_t */ #endif /* ecl_uint32_t */
#ifdef ecl_uint64_t #ifdef ecl_uint64_t
# if FIXNUM_BITS >= 64 # if ECL_FIXNUM_BITS >= 64
# define ecl_to_uint64_t fixnnint # define ecl_to_uint64_t fixnnint
# define ecl_to_int64_t fixint # define ecl_to_int64_t fixint
# define ecl_make_uint64_t ecl_make_unsigned_integer # define ecl_make_uint64_t ecl_make_unsigned_integer