From 0f22b1efb9c7f3485e2147911c3e57f75d18fb48 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Tue, 28 Dec 2021 21:43:58 +0100 Subject: [PATCH] some more loader size optimizations --- platform/bin/loader.wasm | Bin 1251 -> 1235 bytes platform/src/loader.cwa | 33 ++++++++++++++------------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/platform/bin/loader.wasm b/platform/bin/loader.wasm index 5030f0ffec7aa90ab6abe625af78f4a756d4cb3b..ab4860eab482370a4b37670fc5d815f3bfb0e732 100644 GIT binary patch delta 305 zcmXYrJx;?w5QXQ>+PjK25vxc@l(Q?hbW{uXelP=;%T1&Xem?r||x8V)Op^F^o^?&2CSr9hBS zI62|i(1a=7Rjqwk(HHJa!QCa%hG>Zx;~U@&Y@pPz>79<)&^VsiWN}W9?$)BXb*)nJ zr8YBEryraTg>P0a>IbJfdqXW-xc~E>t7V9vQoR|}iX2Q76nhED?@G{-Cu^gEwfQHa g)VW$xv~#=y4~AIxF8L{U9#w1;-n(7K`x9^Z7og58lK=n! delta 342 zcmXX?J5B>J5cSM>y^5R&*Hq(GL`O-JYNtRTN{-4p6PUW!AtYU4+qBKL*+eo{W zi%PFAbU9o(1@*!A;MS409Tz3#0-24&7qBtD5e2xdVYOyJtIEcW;{_%vu$$x_K!%LD z6uRJhZTw)=*vKhF-`m8gfjk27?MkA3V$VYhF{*ysv)?&pTa&bq1ZOTLMhBG?_MJeo rnt>%X;Xfm4$juU2mEsNYQ2V4BgXSZppp0wOg-f2BmdwkKi68k7dU!I} diff --git a/platform/src/loader.cwa b/platform/src/loader.cwa index 658d5ac..1b1b2f2 100644 --- a/platform/src/loader.cwa +++ b/platform/src/loader.cwa @@ -43,17 +43,16 @@ export fn load_uw8(module_size: i32) -> i32 { } fn section_size(ptr: i32) -> i32 { - let p = ptr + 1; - let l = 0; - let shift = 0; + let p = ptr; + let l: i32; + let shift: i32; loop size { - let lazy b = p?0; + let lazy b = (p := p + 1)?0; l = l | ((b & 127) << shift); shift = shift + 7; - p = p + 1; - branch_if b & 128: size; + branch_if b >> 7: size; } - p - ptr + l + p + 1 - ptr + l } fn copy_section(dest: i32, src: i32) -> i32 { @@ -63,10 +62,10 @@ fn copy_section(dest: i32, src: i32) -> i32 { } fn copy(dest: i32, src: i32, len: i32) { - if len > 0 { - loop bytes { + loop bytes { + if len > 0 { (dest + (len := len - 1))?0 = (src + len)?0; - branch_if len: bytes + branch bytes; } } } @@ -84,12 +83,10 @@ export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 { let offset: i32; - let byte: i32; - let i: i32; loop init_contexts { i?0x3c000 = 0x80; - branch_if (i := i + 1) < 256 + 1 + 128: init_contexts + branch_if (i := i + 1) < 256 + 1 + 128: init_contexts; } let prev_was_match: i32; @@ -100,8 +97,7 @@ export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 { if is_match { let inline new_offset = if prev_was_match { 1 } else { upkr_bit(256) }; if new_offset { - offset = upkr_length(257) - 1; - branch_if !offset: finished + branch_if !(offset := upkr_length(257) - 1): finished; } let length = upkr_length(257 + 64); loop copy { @@ -111,7 +107,7 @@ export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 { } } else { // literal - byte = 1; + let byte = 1; loop literal { branch_if (byte := (byte << 1) | upkr_bit(byte)) < 256: literal; } @@ -130,9 +126,8 @@ fn upkr_length(context_index: i32) -> i32 { let length: i32; let bit_pos: i32; loop bits { - if upkr_bit(context_index) { - length = length | (upkr_bit(context_index + 1) << bit_pos); - context_index = context_index + 2; + if upkr_bit(context_index + bit_pos) { + length = length | (upkr_bit(context_index + bit_pos + 32) << bit_pos); bit_pos = bit_pos + 1; branch bits; }