Skip to content

Commit a6ec545

Browse files
committed
up
1 parent 18ae1fb commit a6ec545

3 files changed

Lines changed: 19 additions & 12 deletions

File tree

x/cc.k

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ccprg:{
3939
cons:nl y@&`con=T c
4040
vars:nl y@&`var=T c
4141
runt:$[`nort?opts;"";`l8?opts;<`"l8.h";ccrnt]
42-
main:$[|/`nort`lib?\opts;"";`l8?opts;"void cmain(char**a){argv=a;main_();}";ccmain]
42+
main:$[|/`nort`lib?\opts;"";`l8?opts;"void cmain(char**a){argv=a;init();main_();}";ccmain]
4343
data:$[#D;"memcpy(M_,\"",("\\x","\\x"/(#D)^`x D),"\",",($#D),");";""]
4444
tabl:$[`tab?T;"static void*F_[]={",(,/" ",/$@[(1+|/i)#`trap;i:I@&`tab=T;S@&`tab=T],\",\n"),"};\n";""]
4545
mems:nl y@&`mem=T c

x/l8.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,29 @@ __attribute((naked))static double F64sqrt(double x){ asm("sqrtsd %xmm0,%xmm0;ret
1515
__attribute((naked))static double F64min(double x,double y){asm("minsd %xmm0,%xmm0;ret;\n");}
1616
__attribute((naked))static double F64max(double x,double y){asm("maxsd %xmm0,%xmm0;ret;\n");}
1717

18-
__attribute((naked))long sysread( long fd,char*b,int n){asm("xor %rax,%rax;syscall;ret");}
19-
__attribute((naked))long syswrite(long fd,char*b,int n){asm("mov $1,%rax;syscall;ret");}
18+
__attribute((naked))long brk(long x){asm("mov $12,%rax;syscall;ret");}
19+
__attribute((naked))long sread( long fd,char*b,int n){asm("xor %rax,%rax;syscall;ret");}
20+
__attribute((naked))long swrite(long fd,char*b,int n){asm("mov $1,%rax;syscall;ret");}
2021
__attribute((naked))void Exit(int x){asm("mov $60,%rax;syscall");}
2122

23+
static void wl(ulong x){ //debug-only
24+
char s[32];s[31]=10;s[30]='0';
25+
if(!x){swrite(1,s+30,2);return;}
26+
int i=31;while(x){s[--i]='0'+(x%10);x/=10;}
27+
swrite(1,s+i,32-i);}
28+
2229
extern char _end[];
2330
#define M_ _end
2431
#define I_ ((int*)M_)
2532
#define U_ ((ulong*)M_)
2633
static void*F_[]; //dispatch table
2734
#define int32_t int //some literals
28-
static int Memorysize(void){ return 2; } //todo brk
29-
static int Memorygrow(int delta){ return 2; } //todo
30-
static void Memory(int x){}
35+
static ulong pages_=0;
36+
static int Memorysize(void){return pages_;}
37+
static int Memorygrow(int d){pages_+=d;if(pages_>16384)return -1;brk((pages_<<16)+(ulong)_end);return pages_-d;}
38+
static void Memory(int x){Memorygrow(x);wl(brk(0)-(long)_end);}
3139
static void Memory2(int x){}
3240

33-
3441
//todo try/catch
3542
static int jb_,jb__;
3643
static int setjmp(int x){return 0;}
@@ -60,13 +67,12 @@ static ulong I64reinterpret_f64(double x){union{ulong i;double f;}u;u.f=x;retur
6067

6168
char**argv;
6269
static int Args(void){return((int*)argv)[0];};
63-
static int Arg(int i,int r){if(!r)return strlen(argv[1+i]);memcpy(M_+r,argv[1+i],strlen(argv[i]));return 0;}
70+
static int Arg(int i,int r){if(!r)return strlen(argv[1+i]);memcpy(M_+r,argv[1+i],strlen(argv[1+i]));return 0;}
6471
static int Read( int f,int nf,int d){ return 0; } //todo
6572
static int Write(int f,int nf,int s,int n){
66-
if(!nf){syswrite(1,M_+s,n);return 0;}
73+
if(!nf){swrite(1,M_+s,n);return 0;}
6774
return 0;} //todo file
68-
static int ReadIn(int dst,int n){return(int)sysread(1,M_+dst,n);}
75+
static int ReadIn(int dst,int n){return(int)sread(1,M_+dst,n);}
6976
static long Native(long x,long y){return(x+y)*0;}
7077
static void panic(int x){Exit(1);}
7178

72-
//void cmain(char**a){argv=a;main_();}

x/mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ elif [ "$1" = "ctest" ]; then
2222
./kc ../k.t -e
2323
elif [ "$1" = "l8" ]; then
2424
k k.k cc.k -e 'x:`<cc``l8' > k.c
25+
gcc -Os -s -nostdlib -static -fomit-frame-pointer -Wl,--nmagic -Wl,--build-id=none -fno-asynchronous-unwind-tables -ol8 k.c
2526
#gcc -Wall -Wfatal-errors -Os -s -nostdlib -static -Wl,--nmagic -Wl,--build-id=none -fno-asynchronous-unwind-tables -ol8 k.c
26-
gcc -Wall -Wfatal-errors -nostdlib -static -ol8 k.c -lm
27+
#gcc -Wall -Wfatal-errors -nostdlib -static -ol8 k.c -lm
2728
elif [ "$1" = "wa" ]; then
2829
k k.k wa.k -e 'x:`<wa``' > k.wa
2930
/c/local/wabt/wat2wasm k.wa

0 commit comments

Comments
 (0)