add zlc benchmarks
This commit is contained in:
parent
5184b60136
commit
c43761a8da
|
@ -2,7 +2,7 @@
|
||||||
# -----------------------
|
# -----------------------
|
||||||
# Native build (gcc)
|
# Native build (gcc)
|
||||||
CC_NATIVE = 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 =
|
LDFLAGS_NATIVE =
|
||||||
LDLIBS_NATIVE = -lSDL2
|
LDLIBS_NATIVE = -lSDL2
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,12 @@ int main(int argc, char **argv) {
|
||||||
/* test_add_compile(&vm); */
|
/* test_add_compile(&vm); */
|
||||||
/* test_add_function_compile(&vm); */
|
/* test_add_function_compile(&vm); */
|
||||||
/* test_loop_compile(&vm); */
|
/* test_loop_compile(&vm); */
|
||||||
test_hello_world_compile(&vm);
|
/* test_hello_world_compile(&vm); */
|
||||||
/* test_recursive_function_compile(&vm); */
|
test_recursive_function_compile(&vm);
|
||||||
|
|
||||||
|
while(step_vm(&vm));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
uint32_t buffer_size = 640 * 480 * sizeof(uint32_t);
|
uint32_t buffer_size = 640 * 480 * sizeof(uint32_t);
|
||||||
|
|
||||||
|
@ -58,6 +62,7 @@ int main(int argc, char **argv) {
|
||||||
bool running = true;
|
bool running = true;
|
||||||
while (running) {
|
while (running) {
|
||||||
step_vm(&vm);
|
step_vm(&vm);
|
||||||
|
SDL_PumpEvents();
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
switch (event.type) {
|
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) {
|
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++].u = OP(OP_LOADF, 0, 0, 0); /* let a = 5.0 */
|
||||||
vm->code[vm->cp++].f = 5.0f;
|
vm->code[vm->cp++].f = 5.0f;
|
||||||
vm->code[vm->cp++].u = OP(OP_LOADI, 1, 0, 0); /* do (i = 50000, 0, -1) { */
|
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_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_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_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_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_UINT_TO_STRING, 3, 1, 0);
|
||||||
vm->code[vm->cp++].u = OP(OP_PRINT_STRING, 0, 3, 0); /* print(a.toS()); */
|
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;
|
return a + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sum = add(1, 1);
|
let sum = add(1, 1);
|
||||||
print(sum.toS());
|
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:
|
main:
|
||||||
loadf $0 5.0
|
loadf $0 5.0
|
||||||
loadi $1 5
|
loadi $1 50000
|
||||||
loadi $2 0
|
loadi $2 0
|
||||||
loadi $3 -1
|
loadi $3 -1
|
||||||
loop:
|
loop:
|
||||||
|
@ -10,6 +14,8 @@ loop:
|
||||||
loadu $4 &loop
|
loadu $4 &loop
|
||||||
jgei $4 $1 $2
|
jgei $4 $1 $2
|
||||||
rtou $1 $0
|
rtou $1 $0
|
||||||
|
loadu $5 0
|
||||||
|
puts $5
|
||||||
gets $2
|
gets $2
|
||||||
utos $3 $1
|
utos $3 $1
|
||||||
puts $3
|
puts $3
|
||||||
|
|
|
@ -3,7 +3,7 @@ for i = 50000, 0, -1 do
|
||||||
a = a + 5.0
|
a = a + 5.0
|
||||||
end
|
end
|
||||||
local b = math.floor(a)
|
local b = math.floor(a)
|
||||||
io.write("Enter a string: ")
|
io.write("Enter a string:")
|
||||||
local user_string = io.read("*l")
|
local user_string = io.read("*l")
|
||||||
print(tostring(a))
|
print(tostring(a))
|
||||||
print(tostring(b))
|
print(tostring(b))
|
||||||
|
|
|
@ -3,7 +3,7 @@ for (my $i = 50000; $i >= 0; $i--) {
|
||||||
$a += 5.0;
|
$a += 5.0;
|
||||||
}
|
}
|
||||||
my $b = int($a);
|
my $b = int($a);
|
||||||
print "Enter a string: ";
|
print "Enter a string:";
|
||||||
my $user_string = <STDIN>;
|
my $user_string = <STDIN>;
|
||||||
chomp($user_string);
|
chomp($user_string);
|
||||||
print($a . "\n");
|
print($a . "\n");
|
||||||
|
|
|
@ -2,7 +2,7 @@ a = 5.0
|
||||||
for i in range(50000, -1, -1):
|
for i in range(50000, -1, -1):
|
||||||
a += 5.0
|
a += 5.0
|
||||||
b = int(a)
|
b = int(a)
|
||||||
user_string = input("Enter a string: ")
|
user_string = input("Enter a string:")
|
||||||
print(str(a))
|
print(str(a))
|
||||||
print(str(b))
|
print(str(b))
|
||||||
print(user_string)
|
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)"
|
print_section "Python ($FILENAME.py)"
|
||||||
echo "test input" | time python3 "$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
|
# ZRE Implementation
|
||||||
print_section "zre ($FILENAME.zre)"
|
print_section "zre ($FILENAME.zre)"
|
||||||
echo "test input" | time ../src/zre "$FILENAME.zre"
|
echo "test input" | time ../src/zre "$FILENAME.zre"
|
||||||
|
|
Loading…
Reference in New Issue