From: Brendan Hansen Date: Sat, 18 Jul 2020 17:05:00 +0000 (-0500) Subject: slight optimization X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=c526c0fdb546b5b1a7fbf5a67efc52bc29cd19fb;p=onyx.git slight optimization --- diff --git a/onyx b/onyx index 0dd2270d..c54562e3 100755 Binary files a/onyx and b/onyx differ diff --git a/progs/arrays.onyx b/progs/arrays.onyx index d0d56b65..ed01b721 100644 --- a/progs/arrays.onyx +++ b/progs/arrays.onyx @@ -39,14 +39,6 @@ sort :: proc (src: ^i32, len: i32) { } } -printarr :: proc (arr: ^i32, len: i32) { - i := 0; - while i < len { - print(arr[i]); - i += 1; - } -} - // Don't need to bind this function to a symbol proc #export "main" { print(min(10.0, 12.0)); @@ -60,11 +52,10 @@ proc #export "main" { i += 1; } - printarr(global_arr, len); + print(global_arr, len); sort(global_arr, len); print(1234567); - printarr(global_arr, len); + print(global_arr, len); } - diff --git a/progs/print_funcs.onyx b/progs/print_funcs.onyx index ac1e750e..5bffff33 100644 --- a/progs/print_funcs.onyx +++ b/progs/print_funcs.onyx @@ -4,10 +4,47 @@ print_f32 :: proc #foreign "host" "print" (value: f32) --- print_i64 :: proc #foreign "host" "print" (value: i64) --- print_f64 :: proc #foreign "host" "print" (value: f64) --- +print_i32arr :: proc (arr: ^i32, len: i32) { + i := 0; + while i < len { + print(arr[i]); + i += 1; + } +} + +print_i64arr :: proc (arr: ^i64, len: i32) { + i := 0; + while i < len { + print(arr[i]); + i += 1; + } +} + +print_f32arr :: proc (arr: ^f32, len: i32) { + i := 0; + while i < len { + print(arr[i]); + i += 1; + } +} + +print_f64arr :: proc (arr: ^f64, len: i32) { + i := 0; + while i < len { + print(arr[i]); + i += 1; + } +} + print :: proc #overloaded { print_bool, print_i32, print_f32, print_i64, - print_f64 + print_f64, + + print_i32arr, + print_i64arr, + print_f32arr, + print_f64arr, } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 9ac75ced..fcb14543 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -326,9 +326,11 @@ COMPILE_FUNC(assignment, AstBinaryOp* assign) { } else if (lval->kind == Ast_Kind_Array_Access) { AstArrayAccess* aa = (AstArrayAccess *) lval; - WID(WI_I32_CONST, aa->elem_size); compile_expression(mod, &code, aa->expr); - WI(WI_I32_MUL); + if (aa->elem_size != 1) { + WID(WI_I32_CONST, aa->elem_size); + WI(WI_I32_MUL); + } compile_expression(mod, &code, aa->addr); WI(WI_I32_ADD);