Skip to content

Commit

Permalink
format
Browse files Browse the repository at this point in the history
  • Loading branch information
ShawSumma committed Jun 8, 2024
1 parent 0d34450 commit 0068ddd
Show file tree
Hide file tree
Showing 23 changed files with 194 additions and 204 deletions.
10 changes: 6 additions & 4 deletions main/minivm.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
#include "../vm/backend/tb.h"
#include "../vm/config.h"
#include "../vm/ir/ir.h"
#include "../vm/save/value.h"
#include "../vm/std/io.h"
#include "../vm/std/std.h"
#include "../vm/save/value.h"

#include <stdio.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

Expand All @@ -26,6 +26,8 @@ int main(int argc, char **argv) {
.tb_regs_cast = true,
#if defined(EMSCRIPTEN)
.target = VM_TARGET_TB_EMCC,
#elif defined(__FreeBSD__)
.target = VM_TARGET_TB_CLANG,
#else
.target = VM_TARGET_TB_TCC,
#endif
Expand Down Expand Up @@ -79,7 +81,7 @@ int main(int argc, char **argv) {
}
vm_lang_lua_repl(config, std, blocks);
{
vm_save_t save = vm_save_value(config, blocks, (vm_std_value_t) {.tag = VM_TAG_TAB, .value.table = std});
vm_save_t save = vm_save_value(config, blocks, (vm_std_value_t){.tag = VM_TAG_TAB, .value.table = std});
FILE *f = fopen(arg, "wb");
if (f != NULL) {
fwrite(save.buf, 1, save.len, f);
Expand All @@ -102,7 +104,7 @@ int main(int argc, char **argv) {
}
} else if (!strncmp(arg, "--save=", 7)) {
arg += 7;
vm_save_t save = vm_save_value(config, blocks, (vm_std_value_t) {.tag = VM_TAG_TAB, .value.table = std});
vm_save_t save = vm_save_value(config, blocks, (vm_std_value_t){.tag = VM_TAG_TAB, .value.table = std});
FILE *f = fopen(arg, "wb");
if (f != NULL) {
fwrite(save.buf, 1, save.len, f);
Expand Down
20 changes: 12 additions & 8 deletions makefile
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@

# target: any
OPT = -Os -flto
PRE =
TARGET = test
TEST_LUA = vendor/lua/lua
J =

# target: node
EMCC_CFLAGS = -fPIC -DNDEBUG
EMCC_LDFLAGS = -lnodefs.js -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_ES6=1 -s MAIN_MODULE=2 -s BINARYEN_ASYNC_COMPILATION=0 -s ASYNCIFY=0 -s EXPORTED_RUNTIME_METHODS=['FS','callMain','NODEFS']
EMCC = emcc
J != nproc

TEST_LUA = vendor/lua/lua
linux: .dummy
$(PRE) make -Bj$(J) -C vendor/lua MYCFLAGS=-DLUA_USE_LINUX MYLDFLAGS= MYLIBS=-ldl
$(PRE) make -Bj$(J) -f tool/core.mak $(TARGET) OS=LINUX CC="$(CC)" EXE= TEST_LUA="$(TEST_LUA)"
Expand All @@ -23,6 +17,13 @@ windows: .dummy
$(PRE) make -Bj$(J) -C vendor/lua MYCFLAGS= MYLDFLAGS= MYLIBS=
$(PRE) make -Bj$(J) -f tool/core.mak $(TARGET) OS=WINDOWS CC="$(CC)" EXE=.exe TEST_LUA="$(TEST_LUA)"

freebsd: .dummy
$(PRE) gmake -Bj$(J) -C vendor/lua CC="$(CC)" MYCFLAGS=-DLUA_USE_LINUX MYLDFLAGS= MYLIBS=-ldl
$(PRE) gmake -Bj$(J) -f tool/core.mak $(TARGET) OS=FREEBSD CC="$(CC)" EXE= TEST_LUA="$(TEST_LUA)"

EMCC_CFLAGS = -fPIC -DNDEBUG
EMCC_LDFLAGS = -lnodefs.js -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_ES6=1 -s MAIN_MODULE=2 -s BINARYEN_ASYNC_COMPILATION=0 -s ASYNCIFY=0 -s EXPORTED_RUNTIME_METHODS=['FS','callMain','NODEFS']
EMCC = emcc
node: .dummy
$(PRE) make -Bj$(J) -f tool/core.mak build/bin/minivm.mjs OS=LINUX CC=$(EMCC) EXE=.mjs \
CFLAGS="$(EMCC_CFLAGS) $(CFLAGS)" \
Expand All @@ -36,4 +37,7 @@ web: .dummy
CFLAGS='-fPIC -DNDEBUG' \
LDFLAGS='-fPIC -s MALLOC=mimalloc -s STACK_SIZE=16mb -s INITIAL_MEMORY=32mb -s SINGLE_FILE=1 -s BINARYEN_ASYNC_COMPILATION=0 -s ASYNCIFY=0 -s ENVIRONMENT=worker -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_ES6=1 -s MAIN_MODULE=2 -s EXPORTED_RUNTIME_METHODS="['FS','callMain']"' \

format: .dummy
clang-format -i $$(find vm main -name '*.c' -or -name '*.h')

.dummy:
3 changes: 0 additions & 3 deletions test/loop/eval.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,3 @@ end

print(t)

if vm and vm.version and vm.version.global then
print('compiled ' .. tostring(vm.version.global) .. ' version groups')
end
14 changes: 10 additions & 4 deletions test/loop/loop2.lua
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@

local loops = 0
local iters = tonumber(arg and arg[1]) or 100

local a = 0
while a < 100 do
while a < iters do
local b = 0
while b < 100 do
while b < iters do
local c = 0
while c < 100 do
while c < iters do
local d = 0
while d < 100 do
while d < iters do
d = d + 1
loops = loops + 1
end
c = c + 1
end
b = b + 1
end
a = a + 1
end

print(loops)
2 changes: 1 addition & 1 deletion tool/core.mak
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ CFLAGS := $(CFLAGS_$(OS)) $(CFLAGS_GCCJIT_$(GCCJIT)) $(CFLAGS_TB_WASM_$(TB_WASM)
LDFLAGS := $(FLAGS) $(LDFLAGS)
CFLAGS := $(FLAGS) $(CFLAGS)

MKDIR = @mkdir -p
MKDIR = mkdir -p

# find test -name '*.lua' | xargs echo
TEST_LUAS = test/closure/funcons.lua test/closure/ccall.lua test/closure/recursive.lua test/closure/funcret.lua test/closure/delay.lua test/closure/yodacall.lua test/tables/len.lua test/tables/test.lua test/tables/tbench.lua test/tables/concat.lua test/tables/trees_no_loop.lua test/tables/trees2.lua test/tables/abench.lua test/tables/trees.lua test/types/scary.lua test/basic/boolean.lua test/basic/countdown.lua test/basic/method.lua test/basic/mod.lua test/basic/if.lua test/basic/hello.lua test/basic/types.lua test/basic/while.lua test/basic/idiv.lua test/basic/numtype.lua test/basic/arg.lua test/rec/tak.lua test/rec/tarai.lua test/fib/tab.lua test/fib/ptr.lua test/fib/fib.lua test/loop/squares.lua test/loop/primes_for.lua test/loop/loop2.lua test/loop/eval.lua test/loop/primes4.lua test/loop/primes5.lua test/loop/primes2.lua test/loop/primes3.lua test/loop/primes1.lua test/loop/sqrt.lua test/loop/range.lua test/loop/loop.lua
Expand Down
17 changes: 0 additions & 17 deletions tool/pre.mak

This file was deleted.

5 changes: 2 additions & 3 deletions vm/ast/comp.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ static vm_arg_t vm_ast_comp_get_var(vm_ast_comp_t *comp, const char *name) {
}
if (slotnum < 0) {
slotnum = ++comp->names->caps.len;
if (slotnum + 1 >= (ptrdiff_t) comp->names->caps.alloc) {
if (slotnum + 1 >= (ptrdiff_t)comp->names->caps.alloc) {
comp->names->caps.alloc = slotnum * 2;
comp->names->caps.ptr = vm_realloc(comp->names->caps.ptr, sizeof(vm_ast_comp_cap_t) * comp->names->caps.alloc);
}
Expand All @@ -240,8 +240,7 @@ static vm_arg_t vm_ast_comp_get_var(vm_ast_comp_t *comp, const char *name) {
.lit = (vm_std_value_t){
.tag = VM_TAG_I32,
.value.i32 = slotnum,
}
};
}};
vm_ast_blocks_branch(
comp,
(vm_branch_t){
Expand Down
2 changes: 0 additions & 2 deletions vm/backend/interp/interp.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
#include "../std/std.h"

vm_std_value_t vm_int_run_main(vm_config_t *config, vm_block_t *entry, vm_blocks_t *blocks, vm_table_t *std) {

}

vm_std_value_t vm_int_run_repl(vm_config_t *config, vm_block_t *entry, vm_blocks_t *blocks, vm_table_t *std) {

}
84 changes: 42 additions & 42 deletions vm/backend/interp/opcode.h
Original file line number Diff line number Diff line change
@@ -1,53 +1,53 @@

enum {
// move (const)
VM_INT_OP_CONST_NIL , // (out: reg(nil ))
VM_INT_OP_CONST_NIL, // (out: reg(nil ))
VM_INT_OP_CONST_FALSE, // (out: reg(bool))
VM_INT_OP_CONST_TRUE , // (out: reg(bool))
VM_INT_OP_CONST_TRUE, // (out: reg(bool))
// move (reg)
VM_INT_OP_MOVE_BOOL , // (out: reg(bool), in: reg(bool))
VM_INT_OP_MOVE_I8 , // (out: reg(i8 ), in: reg(i8 ))
VM_INT_OP_MOVE_I16 , // (out: reg(i16 ), in: reg(i16 ))
VM_INT_OP_MOVE_V32 , // (out: reg(v32 ), in: reg(v32 ))
VM_INT_OP_MOVE_V64 , // (out: reg(v64 ), in: reg(v64 ))
VM_INT_OP_MOVE_PTR , // (out: reg(ptr ), in: reg(ptr ))
VM_INT_OP_MOVE_BOOL, // (out: reg(bool), in: reg(bool))
VM_INT_OP_MOVE_I8, // (out: reg(i8 ), in: reg(i8 ))
VM_INT_OP_MOVE_I16, // (out: reg(i16 ), in: reg(i16 ))
VM_INT_OP_MOVE_V32, // (out: reg(v32 ), in: reg(v32 ))
VM_INT_OP_MOVE_V64, // (out: reg(v64 ), in: reg(v64 ))
VM_INT_OP_MOVE_PTR, // (out: reg(ptr ), in: reg(ptr ))
// add
VM_INT_OP_ADD_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_ADD_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_ADD_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_ADD_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_ADD_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
VM_INT_OP_ADD_F32, // (out: reg(f32), lhs: reg(f32), rhs: reg(f32))
VM_INT_OP_ADD_F64, // (out: reg(f64), lhs: reg(f64), rhs: reg(f64))
// sub
VM_INT_OP_SUB_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_SUB_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_SUB_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_SUB_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_SUB_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
VM_INT_OP_SUB_F32, // (out: reg(f32), lhs: reg(f32), rhs: reg(f32))
VM_INT_OP_SUB_F64, // (out: reg(f64), lhs: reg(f64), rhs: reg(f64))
// mul
VM_INT_OP_MUL_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_MUL_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_MUL_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_MUL_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_MUL_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
VM_INT_OP_MUL_F32, // (out: reg(f32), lhs: reg(f32), rhs: reg(f32))
VM_INT_OP_MUL_F64, // (out: reg(f64), lhs: reg(f64), rhs: reg(f64))
// div
VM_INT_OP_DIV_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_DIV_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_DIV_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_DIV_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_DIV_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
VM_INT_OP_DIV_F32, // (out: reg(f32), lhs: reg(f32), rhs: reg(f32))
VM_INT_OP_DIV_F64, // (out: reg(f64), lhs: reg(f64), rhs: reg(f64))
// idiv
VM_INT_OP_IDIV_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_IDIV_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_IDIV_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_IDIV_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_IDIV_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
VM_INT_OP_IDIV_F32, // (out: reg(f32), lhs: reg(f32), rhs: reg(f32))
VM_INT_OP_IDIV_F64, // (out: reg(f64), lhs: reg(f64), rhs: reg(f64))
// mod
VM_INT_OP_MOD_i8 , // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_MOD_i8, // (out: reg(i8 ), lhs: reg(i8 ), rhs: reg(i8 ))
VM_INT_OP_MOD_I16, // (out: reg(i16), lhs: reg(i16), rhs: reg(i16))
VM_INT_OP_MOD_I32, // (out: reg(i32), lhs: reg(i32), rhs: reg(i32))
VM_INT_OP_MOD_I64, // (out: reg(i64), lhs: reg(i64), rhs: reg(i64))
Expand All @@ -64,50 +64,50 @@ enum {
// bb
VM_INT_OP_BRANCH_BOOL, // (cond: reg(bool), then: rblock, else: rblock)
// blt
VM_INT_OP_BRANCH_LT_I8 , // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_I8, // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_I16, // (lhs: reg(i16), rhs: reg(i16), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_I32, // (lhs: reg(i32), rhs: reg(i32), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_I64, // (lhs: reg(i64), rhs: reg(i64), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_F32, // (lhs: reg(f32), rhs: reg(f32), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LT_F64, // (lhs: reg(f64), rhs: reg(f64), then: rblock, else: rblock)
// blt
VM_INT_OP_BRANCH_LE_I8 , // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_I8, // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_I16, // (lhs: reg(i16), rhs: reg(i16), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_I32, // (lhs: reg(i32), rhs: reg(i32), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_I64, // (lhs: reg(i64), rhs: reg(i64), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_F32, // (lhs: reg(f32), rhs: reg(f32), then: rblock, else: rblock)
VM_INT_OP_BRANCH_LE_F64, // (lhs: reg(f64), rhs: reg(f64), then: rblock, else: rblock)
// beq
VM_INT_OP_BRANCH_EQ_BOOL, // (lhs: reg(bool ), rhs: reg(bool ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I8 , // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I16 , // (lhs: reg(i16 ), rhs: reg(i16 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I32 , // (lhs: reg(i32 ), rhs: reg(i32 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I64 , // (lhs: reg(i64 ), rhs: reg(i64 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_F32 , // (lhs: reg(f32 ), rhs: reg(f32 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_F64 , // (lhs: reg(f64 ), rhs: reg(f64 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_STR , // (lhs: reg(str ), rhs: reg(str ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_PTR , // (lhs: reg(bitcmp), rhs: reg(bitcmp), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I8, // (lhs: reg(i8 ), rhs: reg(i8 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I16, // (lhs: reg(i16 ), rhs: reg(i16 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I32, // (lhs: reg(i32 ), rhs: reg(i32 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_I64, // (lhs: reg(i64 ), rhs: reg(i64 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_F32, // (lhs: reg(f32 ), rhs: reg(f32 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_F64, // (lhs: reg(f64 ), rhs: reg(f64 ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_STR, // (lhs: reg(str ), rhs: reg(str ), then: rblock, else: rblock)
VM_INT_OP_BRANCH_EQ_PTR, // (lhs: reg(bitcmp), rhs: reg(bitcmp), then: rblock, else: rblock)
// ret (const)
VM_INT_OP_RET_NIL , // ()
VM_INT_OP_RET_NIL, // ()
VM_INT_OP_RET_FALSE, // ()
VM_INT_OP_RET_TRUE , // ()
VM_INT_OP_RET_TRUE, // ()
// ret (reg)
VM_INT_OP_RET_NIL , // (val: reg(nil ))
VM_INT_OP_RET_BOOL , // (val: reg(bool ))
VM_INT_OP_RET_I8 , // (val: reg(i8 ))
VM_INT_OP_RET_I16 , // (val: reg(i16 ))
VM_INT_OP_RET_I32 , // (val: reg(i32 ))
VM_INT_OP_RET_I64 , // (val: reg(i64 ))
VM_INT_OP_RET_F32 , // (val: reg(f32 ))
VM_INT_OP_RET_F64 , // (val: reg(f64 ))
VM_INT_OP_RET_STR , // (val: reg(str ))
VM_INT_OP_RET_CLOSURE, // (val: reg(closure))
VM_INT_OP_RET_FUN , // (val: reg(fun ))
VM_INT_OP_RET_TAB , // (val: reg(tab ))
VM_INT_OP_RET_FFI , // (val: reg(ffi ))
VM_INT_OP_RET_ERROR , // (val: reg(error ))
VM_INT_OP_RET_NIL, // (val: reg(nil ))
VM_INT_OP_RET_BOOL, // (val: reg(bool ))
VM_INT_OP_RET_I8, // (val: reg(i8 ))
VM_INT_OP_RET_I16, // (val: reg(i16 ))
VM_INT_OP_RET_I32, // (val: reg(i32 ))
VM_INT_OP_RET_I64, // (val: reg(i64 ))
VM_INT_OP_RET_F32, // (val: reg(f32 ))
VM_INT_OP_RET_F64, // (val: reg(f64 ))
VM_INT_OP_RET_STR, // (val: reg(str ))
VM_INT_OP_RET_CLOSURE, // (val: reg(closure))
VM_INT_OP_RET_FUN, // (val: reg(fun ))
VM_INT_OP_RET_TAB, // (val: reg(tab ))
VM_INT_OP_RET_FFI, // (val: reg(ffi ))
VM_INT_OP_RET_ERROR, // (val: reg(error ))
// call
VM_INT_OP_CALL_TAB , // (func: tab , n: i32, args: ...dyn[n], reg: dyn, then: rblock[#types])
VM_INT_OP_CALL_FFI , // (func: ffi , n: i32, args: ...dyn[n], reg: dyn, then: rblock[#types])
VM_INT_OP_CALL_TAB, // (func: tab , n: i32, args: ...dyn[n], reg: dyn, then: rblock[#types])
VM_INT_OP_CALL_FFI, // (func: ffi , n: i32, args: ...dyn[n], reg: dyn, then: rblock[#types])
VM_INT_OP_CALL_CLOSURE, // (func: closure, n: i32, args: ...dyn[n], reg: dyn, then: rblock[#types])
};
6 changes: 3 additions & 3 deletions vm/backend/tb.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,18 @@
#include "../../vendor/tcc/libtcc.h"

void vm_tb_tcc_error_func(void *user, const char *msg) {
(void) user;
(void)user;
printf("%s\n", msg);
exit(1);
}

static void *vm_tcc_new(void) {
unsigned long long __fixunsdfdi(double a1);

TCCState *state = tcc_new();
tcc_set_error_func(state, 0, vm_tb_tcc_error_func);
tcc_set_options(state, "-nostdlib");
tcc_add_symbol(state, "__fixunsdfdi", (const void *) &__fixunsdfdi);
tcc_add_symbol(state, "__fixunsdfdi", (const void *)&__fixunsdfdi);
return state;
}
#endif
Expand Down
Loading

0 comments on commit 0068ddd

Please sign in to comment.