imported compiler5

This commit is contained in:
Abdulaziz Ghuloum
2006-11-23 19:48:14 -05:00
parent 3815bebb4c
commit 1101ba6edb
102 changed files with 4807 additions and 40920 deletions
+9 -5
View File
@@ -1,17 +1,18 @@
#CFLAGS = -Wall -DNDEBUG -O3
CFLAGS = -Wall -g
LDFLAGS = -g -ldl -rdynamic
CFLAGS = -Wall -DNDEBUG -O3
#CFLAGS = -Wall -g
LDFLAGS = -g -ldl -lgmp -rdynamic
CC = gcc
all: ikarus
ikarus: ikarus-collect.o ikarus-runtime.o ikarus-main.o ikarus-fasl.o \
ikarus-exec.o ikarus-print.o ikarus-enter.s ikarus-symbol-table.o \
ikarus-weak-pairs.o
ikarus-weak-pairs.o ikarus-numerics.o
$(CC) $(LDFLAGS) -o ikarus \
ikarus-main.o ikarus-runtime.o \
ikarus-fasl.o ikarus-exec.o ikarus-print.o ikarus-enter.s \
ikarus-symbol-table.o ikarus-collect.o ikarus-weak-pairs.o
ikarus-symbol-table.o ikarus-collect.o ikarus-weak-pairs.o \
ikarus-numerics.o
ikarus-main.o: ikarus-main.c ikarus.h
$(CC) $(CFLAGS) -c ikarus-main.c
@@ -37,6 +38,9 @@ ikarus-weak-pairs.o: ikarus-weak-pairs.c ikarus.h
ikarus-symbol-table.o: ikarus-symbol-table.c ikarus.h
$(CC) $(CFLAGS) -c ikarus-symbol-table.c
ikarus-numerics.o: ikarus-numerics.c ikarus.h
$(CC) $(CFLAGS) -c ikarus-numerics.c
ikarus.h: ikarus-data.h
touch ikarus.h
Binary file not shown.
+22
View File
@@ -758,6 +758,8 @@ add_object(gc_t* gc, ikp x){
ref(y,off_tcbucket_key) = key;
ref(y,off_tcbucket_val) = ref(x, off_tcbucket_val);
ref(y,off_tcbucket_next) = ref(x, off_tcbucket_next);
ref(y,off_tcbucket_dlink_next) = ref(x, off_tcbucket_dlink_next);
ref(y,off_tcbucket_dlink_prev) = ref(x, off_tcbucket_dlink_prev);
if((! is_fixnum(key)) && (tagof(key) != immediate_tag)){
unsigned int kt = gc->segment_vector[page_index(key)];
if((kt & gen_mask) <= gc->collect_gen){
@@ -769,6 +771,26 @@ add_object(gc_t* gc, ikp x){
ref(x, wordsize-vector_tag) = y;
return y;
}
else if((((int)fst) & port_mask) == port_tag){
ikp y = gc_alloc_new_ptr(port_size, gen, gc) + vector_tag;
ref(y, -vector_tag) = fst;
int i;
for(i=wordsize; i<port_size; i+=wordsize){
ref(y, i-vector_tag) = ref(x, i-vector_tag);
}
ref(x, -vector_tag) = forward_ptr;
ref(x, wordsize-vector_tag) = y;
return y;
}
else if((((int)fst) & bignum_mask) == bignum_tag){
int len = ((unsigned int)fst) >> bignum_length_shift;
int memreq = align(disp_bignum_data + len*wordsize);
ikp new = gc_alloc_new_data(memreq, gen, gc) + vector_tag;
memcpy(new-vector_tag, x, memreq);
ref(x, 0) = forward_ptr;
ref(x, wordsize) = new;
return new;
}
else {
fprintf(stderr, "unhandled vector with fst=0x%08x\n", (int)fst);
exit(-1);
+24 -18
View File
@@ -87,7 +87,7 @@
#define IK_DISP_CDR 4
#define IK_OFF_CAR (IK_DISP_CAR - IK_PAIR_TAG)
#define IK_OFF_CDR (IK_DISP_CDR - IK_PAIR_TAG)
#define IK_HEAP_EXT_SIZE (16 * 4096)
#define IK_HEAP_EXT_SIZE (32 * 4096)
#define IK_PAIRP(x) (IK_PTAG(x) == IK_PAIR_TAG)
#define IK_CHARP(x) (IK_MASK(x,IK_CHAR_MASK) == IK_CHAR_TAG)
#define IK_STRING_TAG 6
@@ -173,24 +173,30 @@
#define disp_frame_size -17
#define htable_tag ((ikp) 0x3F)
#define disp_htable_count 4
#define disp_htable_size 8
#define disp_htable_mem 12
#define htable_size 16
#define off_htable_count (disp_htable_count - vector_tag)
#define off_htable_size (disp_htable_size - vector_tag)
#define off_htable_mem (disp_htable_mem - vector_tag)
#define port_tag 0x3F
#define port_mask 0x3F
#define port_size 32
#define disp_tcbucket_tconc 0
#define disp_tcbucket_key 4
#define disp_tcbucket_val 8
#define disp_tcbucket_next 12
#define tcbucket_size 16
#define off_tcbucket_tconc (disp_tcbucket_tconc - vector_tag)
#define off_tcbucket_key (disp_tcbucket_key - vector_tag)
#define off_tcbucket_val (disp_tcbucket_val - vector_tag)
#define off_tcbucket_next (disp_tcbucket_next - vector_tag)
#define disp_tcbucket_tconc 0
#define disp_tcbucket_key 4
#define disp_tcbucket_val 8
#define disp_tcbucket_next 12
#define disp_tcbucket_dlink_prev 16
#define disp_tcbucket_dlink_next 20
#define tcbucket_size 24
#define off_tcbucket_tconc (disp_tcbucket_tconc - vector_tag)
#define off_tcbucket_key (disp_tcbucket_key - vector_tag)
#define off_tcbucket_val (disp_tcbucket_val - vector_tag)
#define off_tcbucket_next (disp_tcbucket_next - vector_tag)
#define off_tcbucket_dlink_next (disp_tcbucket_dlink_next - vector_tag)
#define off_tcbucket_dlink_prev (disp_tcbucket_dlink_prev - vector_tag)
#define bignum_mask 0x7
#define bignum_tag 0x2
#define bignum_sign_mask 0x8
#define bignum_sign_shift 3
#define bignum_length_shift 4
#define disp_bignum_data wordsize
#endif
+17 -21
View File
@@ -80,7 +80,7 @@ void ik_fasl_load(ikpcb* pcb, char* fasl_file){
exit(-10);
}
if(p.marks){
ik_munmap(p.marks, pagesize);
ik_munmap(p.marks, p.marks_size*sizeof(ikp*));
}
{
int err = munmap(mem, mapsize);
@@ -203,30 +203,26 @@ static ikp do_read(ikpcb* pcb, fasl_port* p){
fprintf(stderr, "fasl_read: invalid index %d\n", idx);
exit(-1);
}
if(idx >= 1024){
fprintf(stderr, "BUG: mark too big: %d\n", idx);
exit(-1);
}
if(idx < p->marks_size){
if(p->marks[idx] != 0){
fprintf(stderr, "mark %d already set (fileoff=%d)\n",
idx,
(int)p->memp - (int)p->membase - 6);
ik_print(p->marks[idx]);
if(p->marks){
if(idx >= p->marks_size){
fprintf(stderr, "BUG: mark too big: %d\n", idx);
exit(-1);
}
}
if(idx < p->marks_size){
if(p->marks[idx] != 0){
fprintf(stderr, "mark %d already set (fileoff=%d)\n",
idx,
(int)p->memp - (int)p->membase - 6);
ik_print(p->marks[idx]);
exit(-1);
}
}
}
else {
/* allocate marks */
if(p->marks){
fprintf(stderr, "BUG: extension to marks not implemented\n");
exit(-1);
}
else {
p->marks = ik_mmap(pagesize);
bzero(p->marks, pagesize);
p->marks_size = 1024;
}
p->marks = ik_mmap(pagesize*sizeof(ikp*));
bzero(p->marks, pagesize*sizeof(ikp*));
p->marks_size = pagesize;
}
}
if(c == 'x'){
+7 -1
View File
@@ -8,13 +8,19 @@
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <gmp.h>
int main(int argc, char** argv){
if(argc < 2){
fprintf(stderr, "insufficient arguments\n");
exit(-1);
}
if(sizeof(mp_limb_t) != sizeof(int)){
fprintf(stderr, "ERROR: limb size\n");
}
if(mp_bits_per_limb != (8*sizeof(int))){
fprintf(stderr, "ERROR: bits_per_limb=%d\n", mp_bits_per_limb);
}
ikpcb* pcb = ik_make_pcb();
int i;
for(i=1; i<argc; i++){
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -122,8 +122,7 @@ ik_mmap_code(int size, int gen, ikpcb* pcb){
void*
ik_mmap_mixed(int size, ikpcb* pcb){
assert(0);
return 0;
return ik_mmap_typed(size, mainheap_mt, pcb);
}
@@ -307,9 +306,11 @@ ik_alloc(ikpcb* pcb, int size){
return ap;
}
else {
fprintf(stderr, "EXT\n");
assert(0);
#if 0
static int did_warn = 0;
if(! did_warn){
fprintf(stderr, "Extension causes leak? %d bytes\n", size);
did_warn = 1;
}
if(ap){
ikpages* p = ik_malloc(sizeof(ikpages));
p->base = pcb->heap_base;
@@ -327,7 +328,6 @@ ik_alloc(ikpcb* pcb, int size){
nap = ap + size;
pcb->allocation_pointer = nap;
return ap;
#endif
}
}
+1 -1
View File
@@ -47,7 +47,7 @@ static ikp ik_make_symbol(ikp str, ikpcb* pcb){
ikp sym = ik_alloc(pcb, symbol_size) + symbol_tag;
ref(sym, off_symbol_string) = str;
ref(sym, off_symbol_ustring) = false_object;
ref(sym, off_symbol_value) = unbound_object;
ref(sym, off_symbol_value) = str; //unbound_object;
ref(sym, off_symbol_plist) = null_object;
ref(sym, off_symbol_system_value) = str;
ref(sym, off_symbol_system_plist) = null_object;
+1
View File
@@ -93,6 +93,7 @@ typedef struct {
ikp weak_pairs_ep;
ikp heap_base;
int heap_size;
ikpages* heap_pages;
ikp stack_base;
int stack_size;
ikp oblist;
+25
View File
@@ -0,0 +1,25 @@
xxxxxxxx xxxxxxx xxxxxxxx xxxxxx00 : vectors
xxxxxxxx xxxxxxx xxxxxxxx xxxxx001 : tconcs pair_tag
xxxxxxxx xxxxxxx xxxxxxxx xxxxx101 : records/rtds vector_tag
xxxxxxxx xxxxxxx xxxxxxxx xxxxxx10 : nonimmediate number
00000000 0000000 00000000 00001111 : free
00000000 0000000 00000000 00011111 : continuation 0x1F
00000000 0000000 00000000 00101111 : code 0x2F
00000000 0000000 00000000 00111111 : port (input=0, output=0) useless
00000000 0000000 00000000 01001111 : free
00000000 0000000 00000000 01011111 : free
00000000 0000000 00000000 01101111 : free
00000000 0000000 00000000 01111111 : port (input=1, output=0)
00000000 0000000 00000000 10001111 : free
00000000 0000000 00000000 10011111 : free
00000000 0000000 00000000 10101111 : free
00000000 0000000 00000000 10111111 : port (input=0, output=1)
00000000 0000000 00000000 11001111 : free
00000000 0000000 00000000 11011111 : free
00000000 0000000 00000000 11101111 : free
00000000 0000000 00000000 11111111 : port (input=1, output=1)
xxxxxxxx xxxxxxx xxxxxxxx xxxxxx10 : nonimmediate number
xxxxxxxx xxxxxxx xxxxxxxx xxxxs010 : bignum