add zlc benchmarks
This commit is contained in:
parent
5184b60136
commit
c43761a8da
|
@ -2,7 +2,7 @@
|
|||
# -----------------------
|
||||
# Native build (gcc)
|
||||
CC_NATIVE = gcc
|
||||
CFLAGS_NATIVE = -g -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter -I.
|
||||
CFLAGS_NATIVE = -g -O2 -std=c89 -Wall -Wextra -Werror -Wno-unused-parameter -I.
|
||||
LDFLAGS_NATIVE =
|
||||
LDLIBS_NATIVE = -lSDL2
|
||||
|
||||
|
|
|
@ -13,8 +13,12 @@ int main(int argc, char **argv) {
|
|||
/* test_add_compile(&vm); */
|
||||
/* test_add_function_compile(&vm); */
|
||||
/* test_loop_compile(&vm); */
|
||||
test_hello_world_compile(&vm);
|
||||
/* test_recursive_function_compile(&vm); */
|
||||
/* test_hello_world_compile(&vm); */
|
||||
test_recursive_function_compile(&vm);
|
||||
|
||||
while(step_vm(&vm));
|
||||
|
||||
return 0;
|
||||
|
||||
uint32_t buffer_size = 640 * 480 * sizeof(uint32_t);
|
||||
|
||||
|
@ -58,6 +62,7 @@ int main(int argc, char **argv) {
|
|||
bool running = true;
|
||||
while (running) {
|
||||
step_vm(&vm);
|
||||
SDL_PumpEvents();
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
switch (event.type) {
|
||||
|
|
20
src/test.c
20
src/test.c
|
@ -34,6 +34,23 @@ bool test_add_compile(VM *vm) {
|
|||
}
|
||||
|
||||
bool test_loop_compile(VM *vm) {
|
||||
vm->memory[vm->mp++].u = 17;
|
||||
vm->memory[vm->mp].c[0] = 'E';
|
||||
vm->memory[vm->mp].c[1] = 'n';
|
||||
vm->memory[vm->mp].c[2] = 't';
|
||||
vm->memory[vm->mp++].c[3] = 'e';
|
||||
vm->memory[vm->mp].c[0] = 'r';
|
||||
vm->memory[vm->mp].c[1] = ' ';
|
||||
vm->memory[vm->mp].c[2] = 'a';
|
||||
vm->memory[vm->mp++].c[3] = ' ';
|
||||
vm->memory[vm->mp].c[0] = 's';
|
||||
vm->memory[vm->mp].c[1] = 't';
|
||||
vm->memory[vm->mp].c[2] = 'r';
|
||||
vm->memory[vm->mp++].c[3] = 'i';
|
||||
vm->memory[vm->mp].c[0] = 'n';
|
||||
vm->memory[vm->mp].c[1] = 'g';
|
||||
vm->memory[vm->mp].c[2] = ':';
|
||||
vm->memory[vm->mp++].c[3] = '\0';
|
||||
vm->code[vm->cp++].u = OP(OP_LOADF, 0, 0, 0); /* let a = 5.0 */
|
||||
vm->code[vm->cp++].f = 5.0f;
|
||||
vm->code[vm->cp++].u = OP(OP_LOADI, 1, 0, 0); /* do (i = 50000, 0, -1) { */
|
||||
|
@ -51,6 +68,9 @@ bool test_loop_compile(VM *vm) {
|
|||
vm->code[vm->cp++].u = OP(OP_ADD_INT, 1, 1, 3); /* (implied by loop) i = i + (-1) */
|
||||
vm->code[vm->cp++].u = OP(OP_JGE_INT, 4, 1, 2); /* } */
|
||||
vm->code[vm->cp++].u = OP(OP_REAL_TO_UINT, 1, 0, 0); /* let b = a as nat; */
|
||||
vm->code[vm->cp++].u = OP(OP_LOADU, 5, 0, 0);
|
||||
vm->code[vm->cp++].u = 0;
|
||||
vm->code[vm->cp++].u = OP(OP_PRINT_STRING, 0, 5, 0); /* print("Enter a string: "); */
|
||||
vm->code[vm->cp++].u = OP(OP_READ_STRING, 2, 0, 0); /* let user_string = gets(); */
|
||||
vm->code[vm->cp++].u = OP(OP_UINT_TO_STRING, 3, 1, 0);
|
||||
vm->code[vm->cp++].u = OP(OP_PRINT_STRING, 0, 3, 0); /* print(a.toS()); */
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
fn add(a, b) {
|
||||
return a + b;
|
||||
}
|
||||
let sum = add(1, 1);
|
||||
print sum;
|
|
@ -1,6 +1,6 @@
|
|||
int add(int a, int b) {
|
||||
fn add(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
int sum = add(1, 1);
|
||||
let sum = add(1, 1);
|
||||
print(sum.toS());
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
fn fib(n) {
|
||||
if (n < 2) return n;
|
||||
return fib(n - 2) + fib(n - 1);
|
||||
}
|
||||
|
||||
let result = fib(35);
|
||||
print result;
|
|
@ -1,6 +1,10 @@
|
|||
.memory
|
||||
.ascii Enter a string:
|
||||
|
||||
.code
|
||||
main:
|
||||
loadf $0 5.0
|
||||
loadi $1 5
|
||||
loadi $1 50000
|
||||
loadi $2 0
|
||||
loadi $3 -1
|
||||
loop:
|
||||
|
@ -10,6 +14,8 @@ loop:
|
|||
loadu $4 &loop
|
||||
jgei $4 $1 $2
|
||||
rtou $1 $0
|
||||
loadu $5 0
|
||||
puts $5
|
||||
gets $2
|
||||
utos $3 $1
|
||||
puts $3
|
||||
|
|
|
@ -3,7 +3,7 @@ for i = 50000, 0, -1 do
|
|||
a = a + 5.0
|
||||
end
|
||||
local b = math.floor(a)
|
||||
io.write("Enter a string: ")
|
||||
io.write("Enter a string:")
|
||||
local user_string = io.read("*l")
|
||||
print(tostring(a))
|
||||
print(tostring(b))
|
||||
|
|
|
@ -3,7 +3,7 @@ for (my $i = 50000; $i >= 0; $i--) {
|
|||
$a += 5.0;
|
||||
}
|
||||
my $b = int($a);
|
||||
print "Enter a string: ";
|
||||
print "Enter a string:";
|
||||
my $user_string = <STDIN>;
|
||||
chomp($user_string);
|
||||
print($a . "\n");
|
||||
|
|
|
@ -2,7 +2,7 @@ a = 5.0
|
|||
for i in range(50000, -1, -1):
|
||||
a += 5.0
|
||||
b = int(a)
|
||||
user_string = input("Enter a string: ")
|
||||
user_string = input("Enter a string:")
|
||||
print(str(a))
|
||||
print(str(b))
|
||||
print(user_string)
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
let a = 5.0;
|
||||
for (let i = 50000; i > 0; i = i - 1) {
|
||||
a = a + 5.0;
|
||||
}
|
||||
let b = a;
|
||||
print "Enter a string:";
|
||||
let user_string = read();
|
||||
print(a);
|
||||
print(b);
|
||||
print(user_string);
|
|
@ -32,6 +32,10 @@ print_section "Perl ($FILENAME.pl)"
|
|||
print_section "Python ($FILENAME.py)"
|
||||
echo "test input" | time python3 "$FILENAME.py"
|
||||
|
||||
# ZLC Implementation
|
||||
print_section "zlc ($FILENAME.zl)"
|
||||
echo "test input" | time zlc "$FILENAME.zl"
|
||||
|
||||
# ZRE Implementation
|
||||
print_section "zre ($FILENAME.zre)"
|
||||
echo "test input" | time ../src/zre "$FILENAME.zre"
|
||||
|
|
Loading…
Reference in New Issue