WIP fibonacci
This commit is contained in:
parent
492f20f74a
commit
eb23d26731
|
|
@ -50,33 +50,42 @@ void test_add_two_num() {
|
|||
}
|
||||
|
||||
void test_fibonacci() {
|
||||
/* fn main() */
|
||||
i32 fib = 6;
|
||||
i32 base_case = 20;
|
||||
/* function main() */
|
||||
i32 main_local_count = 3;
|
||||
mp += (4 * main_local_count);
|
||||
/* fib(35) */
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 0, 35);
|
||||
code[cp++] = ENCODE_B(OP_PUSH, 0, 0);
|
||||
i32 fib = cp + 4;
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 1, fib);
|
||||
code[cp++] = ENCODE_A(OP_CALL, 1, 3, 2);
|
||||
code[cp++] = ENCODE_A(OP_CALL, 1, 9, 2);
|
||||
/* print */
|
||||
code[cp++] = ENCODE_A(OP_SYSCALL, SYSCALL_DBG_PRINT, 1, 2);
|
||||
code[cp++] = ENCODE_A(OP_HALT, 0, 0, 0);
|
||||
|
||||
/* fn fib */
|
||||
/* function fib (int n) int */
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 8, fib);
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 1, 2);
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 2, fib);
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 2, base_case);
|
||||
code[cp++] = ENCODE_A(OP_JLT_INT, 2, 0, 1);
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 3, 2);
|
||||
code[cp++] = ENCODE_A(OP_SUB_INT, 4, 0, 3);
|
||||
code[cp++] = ENCODE_B(OP_PUSH, 4, 0);
|
||||
code[cp++] = ENCODE_A(OP_CALL, 2, 3, 2);
|
||||
|
||||
code[cp++] = ENCODE_A(OP_CALL, 8, 9, 5);
|
||||
code[cp++] = ENCODE_B(OP_LOAD_IMM, 3, 1);
|
||||
code[cp++] = ENCODE_A(OP_SUB_INT, 4, 0, 3);
|
||||
code[cp++] = ENCODE_B(OP_PUSH, 4, 0);
|
||||
code[cp++] = ENCODE_A(OP_CALL, 8, 9, 6);
|
||||
code[cp++] = ENCODE_A(OP_ADD_INT, 7, 6, 5);
|
||||
code[cp++] = ENCODE_B(OP_RETURN, 7, 0);
|
||||
code[cp++] = ENCODE_B(OP_RETURN, 0, 0);
|
||||
}
|
||||
|
||||
i32 main() {
|
||||
init_vm();
|
||||
|
||||
test_add_two_num();
|
||||
/* test_add_two_num(); */
|
||||
test_fibonacci();
|
||||
|
||||
while(step_vm()) {
|
||||
// do stuff
|
||||
|
|
|
|||
Loading…
Reference in New Issue