imported compiler5
This commit is contained in:
@@ -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.
@@ -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
@@ -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
@@ -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'){
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user