core: Support x86_64.

* src/lib.c: Support x86_64.
* src/math.c: Likewise.
* src/mes.c: Likewise.
* src/reader.c: Likewise.
* src/vector.c Likewise.
This commit is contained in:
Jan Nieuwenhuizen 2018-10-04 21:43:45 +02:00
parent a2502ac96c
commit 133013a3d2
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
6 changed files with 26 additions and 25 deletions

View file

@ -157,4 +157,5 @@ bash ${srcdest}build-aux/cc-x86_64-mes.sh scaffold/malloc
##sh ${srcdest}build-aux/cc-x86_64-mes.sh scaffold/tiny-mes ##sh ${srcdest}build-aux/cc-x86_64-mes.sh scaffold/tiny-mes
# bash ${srcdest}build-aux/cc-x86_64-mes.sh scaffold/mini-mes # bash ${srcdest}build-aux/cc-x86_64-mes.sh scaffold/mini-mes
bash ${srcdest}build-aux/cc-x86_64-mes.sh src/mes bash ${srcdest}build-aux/cc-x86_64-mes.sh src/mes
cp src/mes.x86_64-mes-out src/mes # not yet, broken
# cp src/mes.x86_64-mes-out src/mes

View file

@ -37,7 +37,7 @@ display_helper (SCM x, int cont, char* sep, int fd, int write_p)
else else
{ {
fdputs ("#\\", fd); fdputs ("#\\", fd);
int v = VALUE (x); long v = VALUE (x);
if (v == '\0') fdputs ("nul", fd); if (v == '\0') fdputs ("nul", fd);
else if (v == '\a') fdputs ("alarm", fd); else if (v == '\a') fdputs ("alarm", fd);
else if (v == '\b') fdputs ("backspace", fd); else if (v == '\b') fdputs ("backspace", fd);
@ -139,7 +139,7 @@ display_helper (SCM x, int cont, char* sep, int fd, int write_p)
SCM t = CAR (x); SCM t = CAR (x);
while (t && t != cell_nil) while (t && t != cell_nil)
{ {
int v = write_p ? VALUE (CAR (t)) : -1; long v = write_p ? VALUE (CAR (t)) : -1;
if (v == '\0') fdputs ("\\0", fd); if (v == '\0') fdputs ("\\0", fd);
else if (v == '\a') fdputs ("\\a", fd); else if (v == '\a') fdputs ("\\a", fd);
else if (v == '\b') fdputs ("\\b", fd); else if (v == '\b') fdputs ("\\b", fd);
@ -170,7 +170,7 @@ display_helper (SCM x, int cont, char* sep, int fd, int write_p)
{ {
fdputs ("#(", fd); fdputs ("#(", fd);
SCM t = CAR (x); SCM t = CAR (x);
for (int i = 0; i < LENGTH (x); i++) for (long i = 0; i < LENGTH (x); i++)
{ {
if (i) if (i)
fdputc (' ', fd); fdputc (' ', fd);
@ -302,7 +302,7 @@ equal2_p (SCM a, SCM b)
{ {
if (LENGTH (a) != LENGTH (b)) if (LENGTH (a) != LENGTH (b))
return cell_f; return cell_f;
for (int i=0; i < LENGTH (a); i++) for (long i=0; i < LENGTH (a); i++)
{ {
SCM ai = VECTOR (a) + i; SCM ai = VECTOR (a) + i;
SCM bi = VECTOR (b) + i; SCM bi = VECTOR (b) + i;

View file

@ -36,7 +36,7 @@ greater_p (SCM x) ///((name . ">") (arity . n))
if (x == cell_nil) if (x == cell_nil)
return cell_t; return cell_t;
assert_number ("greater_p", CAR (x)); assert_number ("greater_p", CAR (x));
int n = VALUE (CAR (x)); long n = VALUE (CAR (x));
x = CDR (x); x = CDR (x);
while (x != cell_nil) while (x != cell_nil)
{ {
@ -55,7 +55,7 @@ less_p (SCM x) ///((name . "<") (arity . n))
if (x == cell_nil) if (x == cell_nil)
return cell_t; return cell_t;
assert_number ("less_p", CAR (x)); assert_number ("less_p", CAR (x));
int n = VALUE (CAR (x)); long n = VALUE (CAR (x));
x = CDR (x); x = CDR (x);
while (x != cell_nil) while (x != cell_nil)
{ {
@ -74,7 +74,7 @@ is_p (SCM x) ///((name . "=") (arity . n))
if (x == cell_nil) if (x == cell_nil)
return cell_t; return cell_t;
assert_number ("is_p", CAR (x)); assert_number ("is_p", CAR (x));
int n = VALUE (CAR (x)); long n = VALUE (CAR (x));
x = cdr (x); x = cdr (x);
while (x != cell_nil) while (x != cell_nil)
{ {
@ -89,7 +89,7 @@ SCM
minus (SCM x) ///((name . "-") (arity . n)) minus (SCM x) ///((name . "-") (arity . n))
{ {
assert_number ("minus", CAR (x)); assert_number ("minus", CAR (x));
int n = VALUE (CAR (x)); long n = VALUE (CAR (x));
x = cdr (x); x = cdr (x);
if (x == cell_nil) if (x == cell_nil)
n = -n; n = -n;
@ -105,7 +105,7 @@ minus (SCM x) ///((name . "-") (arity . n))
SCM SCM
plus (SCM x) ///((name . "+") (arity . n)) plus (SCM x) ///((name . "+") (arity . n))
{ {
int n = 0; long n = 0;
while (x != cell_nil) while (x != cell_nil)
{ {
assert_number ("plus", CAR (x)); assert_number ("plus", CAR (x));
@ -118,7 +118,7 @@ plus (SCM x) ///((name . "+") (arity . n))
SCM SCM
divide (SCM x) ///((name . "/") (arity . n)) divide (SCM x) ///((name . "/") (arity . n))
{ {
int n = 1; long n = 1;
if (x != cell_nil) if (x != cell_nil)
{ {
assert_number ("divide", CAR (x)); assert_number ("divide", CAR (x));
@ -139,7 +139,7 @@ modulo (SCM a, SCM b)
{ {
assert_number ("modulo", a); assert_number ("modulo", a);
assert_number ("modulo", b); assert_number ("modulo", b);
int x = VALUE (a); long x = VALUE (a);
while (x < 0) x += VALUE (b); while (x < 0) x += VALUE (b);
return MAKE_NUMBER (x % VALUE (b)); return MAKE_NUMBER (x % VALUE (b));
} }
@ -147,7 +147,7 @@ modulo (SCM a, SCM b)
SCM SCM
multiply (SCM x) ///((name . "*") (arity . n)) multiply (SCM x) ///((name . "*") (arity . n))
{ {
int n = 1; long n = 1;
while (x != cell_nil) while (x != cell_nil)
{ {
assert_number ("multiply", CAR (x)); assert_number ("multiply", CAR (x));
@ -160,7 +160,7 @@ multiply (SCM x) ///((name . "*") (arity . n))
SCM SCM
logand (SCM x) ///((arity . n)) logand (SCM x) ///((arity . n))
{ {
int n = 0; long n = 0;
while (x != cell_nil) while (x != cell_nil)
{ {
assert_number ("multiply", CAR (x)); assert_number ("multiply", CAR (x));
@ -173,7 +173,7 @@ logand (SCM x) ///((arity . n))
SCM SCM
logior (SCM x) ///((arity . n)) logior (SCM x) ///((arity . n))
{ {
int n = 0; long n = 0;
while (x != cell_nil) while (x != cell_nil)
{ {
assert_number ("logior", CAR (x)); assert_number ("logior", CAR (x));
@ -187,14 +187,14 @@ SCM
lognot (SCM x) lognot (SCM x)
{ {
assert_number ("lognot", x); assert_number ("lognot", x);
int n = ~VALUE (x); long n = ~VALUE (x);
return MAKE_NUMBER (n); return MAKE_NUMBER (n);
} }
SCM SCM
logxor (SCM x) ///((arity . n)) logxor (SCM x) ///((arity . n))
{ {
int n = 0; long n = 0;
while (x != cell_nil) while (x != cell_nil)
{ {
assert_number ("logxor", CAR (x)); assert_number ("logxor", CAR (x));
@ -209,7 +209,7 @@ ash (SCM n, SCM count)
{ {
assert_number ("ash", n); assert_number ("ash", n);
assert_number ("ash", count); assert_number ("ash", count);
int cn = VALUE (n); long cn = VALUE (n);
int ccount = VALUE (count); long ccount = VALUE (count);
return MAKE_NUMBER ((ccount < 0) ? cn >> -ccount : cn << ccount); return MAKE_NUMBER ((ccount < 0) ? cn >> -ccount : cn << ccount);
} }

View file

@ -39,7 +39,7 @@ char *g_arena = 0;
typedef long SCM; typedef long SCM;
int g_debug = 0; int g_debug = 0;
int g_free = 0; long g_free = 0;
SCM g_continuations = 0; SCM g_continuations = 0;
SCM g_symbols = 0; SCM g_symbols = 0;
@ -1029,7 +1029,7 @@ eval_apply ()
int global_p; int global_p;
int macro_p; int macro_p;
int t; int t;
int c; long c;
eval_apply: eval_apply:
if (r3 == cell_vm_evlis) goto evlis; if (r3 == cell_vm_evlis) goto evlis;

View file

@ -507,7 +507,7 @@ dump ()
eputs ("\n"); eputs ("\n");
} }
int i; long i;
for (i=0; i<g_free * sizeof (struct scm); i = i + 1) for (i=0; i<g_free * sizeof (struct scm); i = i + 1)
{ {
putchar (p[0]); putchar (p[0]);

View file

@ -19,11 +19,11 @@
*/ */
SCM SCM
make_vector__ (int k) make_vector__ (long k)
{ {
SCM v = alloc (k); SCM v = alloc (k);
SCM x = make_cell__ (TVECTOR, k, v); SCM x = make_cell__ (TVECTOR, k, v);
for (int i=0; i<k; i++) for (long i=0; i<k; i++)
g_cells[v+i] = g_cells[vector_entry (cell_unspecified)]; g_cells[v+i] = g_cells[vector_entry (cell_unspecified)];
return x; return x;
} }
@ -91,7 +91,7 @@ SCM
vector_to_list (SCM v) vector_to_list (SCM v)
{ {
SCM x = cell_nil; SCM x = cell_nil;
for (int i = LENGTH (v); i; i--) for (long i = LENGTH (v); i; i--)
{ {
SCM e = VECTOR (v)+i-1; SCM e = VECTOR (v)+i-1;
if (TYPE (e) == TREF) if (TYPE (e) == TREF)