add wasm builds

This commit is contained in:
Jörg Breitbart
2023-06-27 13:49:49 +02:00
parent 2bcc653293
commit 0027b27ea3
3 changed files with 211 additions and 0 deletions
@@ -0,0 +1 @@
{"def":{"name":"decode","type":0,"mode":1,"srctype":"Clang-C","imports":{"env":{"memory":{}}},"exports":{},"compile":{"switches":["-Wl,-z,stack-size=0","-Wl,--stack-first"]},"code":"\n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int b_size;\n unsigned int dummy[3];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) 1024;\n unsigned int *D1 = (unsigned int *) 2048;\n unsigned int *D2 = (unsigned int *) 3072;\n unsigned int *D3 = (unsigned int *) 4096;\n State *state = (State *) 5120;\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int accu;\n\n while (src < end) {\n if ((accu = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]]) >> 24) return 1;\n *((unsigned int *) dst) = accu;\n dst += 3;\n src += 4;\n }\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return 1;\n rem = state->wp - state->sp;\n if (rem < 2) return 1;\n\n unsigned char *src = state->data + state->sp;\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2 && src[2] != 61) {\n accu |= D2[src[2]];\n dp++;\n }\n if (rem == 4 && src[3] != 61) {\n accu |= D3[src[3]];\n dp++;\n }\n if (accu >> 24) return 1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return state->dp != state->b_size;\n }\n "},"memorySettings":{"descriptor":{"initial":1,"shared":false},"mode":"imported"},"srcDef":"{\n name: 'decode',\n type: 0 /* OutputType.INSTANCE */,\n mode: 1 /* OutputMode.SYNC */,\n srctype: 'Clang-C',\n imports: {\n env: { memory: new WebAssembly.Memory({ initial: 1 }) }\n },\n exports: {\n dec: () => 0,\n end: () => 0\n },\n compile: {\n switches: ['-Wl,-z,stack-size=0', '-Wl,--stack-first']\n },\n code: `\n typedef struct {\n unsigned int wp;\n unsigned int sp;\n unsigned int dp;\n unsigned int e_size;\n unsigned int b_size;\n unsigned int dummy[3];\n unsigned char data[0];\n } State;\n\n unsigned int *D0 = (unsigned int *) ${256 /* P32.D0 */ * 4};\n unsigned int *D1 = (unsigned int *) ${512 /* P32.D1 */ * 4};\n unsigned int *D2 = (unsigned int *) ${768 /* P32.D2 */ * 4};\n unsigned int *D3 = (unsigned int *) ${1024 /* P32.D3 */ * 4};\n State *state = (State *) ${1280 /* P32.STATE */ * 4};\n\n __attribute__((noinline)) int dec() {\n unsigned int nsp = (state->wp - 1) & ~3;\n unsigned char *src = state->data + state->sp;\n unsigned char *end = state->data + nsp;\n unsigned char *dst = state->data + state->dp;\n unsigned int accu;\n\n while (src < end) {\n if ((accu = D0[src[0]] | D1[src[1]] | D2[src[2]] | D3[src[3]]) >> 24) return 1;\n *((unsigned int *) dst) = accu;\n dst += 3;\n src += 4;\n }\n state->sp = nsp;\n state->dp = dst - state->data;\n return 0;\n }\n\n int end() {\n int rem = state->wp - state->sp;\n if (rem > 4 && dec()) return 1;\n rem = state->wp - state->sp;\n if (rem < 2) return 1;\n\n unsigned char *src = state->data + state->sp;\n unsigned int accu = D0[src[0]] | D1[src[1]];\n int dp = 1;\n if (rem > 2 && src[2] != 61) {\n accu |= D2[src[2]];\n dp++;\n }\n if (rem == 4 && src[3] != 61) {\n accu |= D3[src[3]];\n dp++;\n }\n if (accu >> 24) return 1;\n *((unsigned int *) (state->data + state->dp)) = accu;\n state->dp += dp;\n return state->dp != state->b_size;\n }\n `\n}","hash":""}
@@ -0,0 +1,210 @@
(module
(type (;0;) (func (result i32)))
(import "env" "memory" (memory (;0;) 1))
(func (;0;) (type 0) (result i32)
(local i32 i32 i32 i32 i32)
i32.const 5128
i32.load
i32.const 5152
i32.add
local.set 1
i32.const 5124
i32.load
local.tee 0
i32.const 5120
i32.load
i32.const 1
i32.sub
i32.const -4
i32.and
local.tee 2
i32.lt_s
if ;; label = @1
local.get 2
i32.const 5152
i32.add
local.set 3
local.get 0
i32.const 5152
i32.add
local.set 0
loop ;; label = @2
local.get 0
i32.load8_u offset=3
i32.const 2
i32.shl
i32.load offset=4096
local.get 0
i32.load8_u offset=2
i32.const 2
i32.shl
i32.load offset=3072
local.get 0
i32.load8_u offset=1
i32.const 2
i32.shl
i32.load offset=2048
local.get 0
i32.load8_u
i32.const 2
i32.shl
i32.load offset=1024
i32.or
i32.or
i32.or
local.tee 4
i32.const 16777215
i32.gt_u
if ;; label = @3
i32.const 1
return
end
local.get 1
local.get 4
i32.store
local.get 1
i32.const 3
i32.add
local.set 1
local.get 0
i32.const 4
i32.add
local.tee 0
local.get 3
i32.lt_u
br_if 0 (;@2;)
end
end
i32.const 5124
local.get 2
i32.store
i32.const 5128
local.get 1
i32.const 5152
i32.sub
i32.store
i32.const 0)
(func (;1;) (type 0) (result i32)
(local i32 i32 i32 i32 i32 i32)
block ;; label = @1
i32.const 5120
i32.load
local.tee 1
i32.const 5124
i32.load
local.tee 0
i32.sub
i32.const 5
i32.ge_s
if ;; label = @2
i32.const 1
local.set 3
call 0
br_if 1 (;@1;)
i32.const 5120
i32.load
local.set 1
i32.const 5124
i32.load
local.set 0
end
i32.const 1
local.set 3
local.get 1
local.get 0
i32.sub
local.tee 4
i32.const 2
i32.lt_s
br_if 0 (;@1;)
local.get 0
i32.const 5153
i32.add
i32.load8_u
i32.const 2
i32.shl
i32.load offset=2048
local.get 0
i32.const 5152
i32.add
i32.load8_u
i32.const 2
i32.shl
i32.load offset=1024
i32.or
local.set 1
block ;; label = @2
local.get 4
i32.const 2
i32.eq
if ;; label = @3
i32.const 1
local.set 2
br 1 (;@2;)
end
i32.const 1
local.set 2
local.get 0
i32.load8_u offset=5154
local.tee 5
i32.const 61
i32.ne
if ;; label = @3
i32.const 2
local.set 2
local.get 5
i32.const 2
i32.shl
i32.load offset=3072
local.get 1
i32.or
local.set 1
end
local.get 4
i32.const 4
i32.ne
br_if 0 (;@2;)
local.get 0
i32.load8_u offset=5155
local.tee 0
i32.const 61
i32.eq
br_if 0 (;@2;)
local.get 2
i32.const 1
i32.add
local.set 2
local.get 0
i32.const 2
i32.shl
i32.load offset=4096
local.get 1
i32.or
local.set 1
end
local.get 1
i32.const 16777215
i32.gt_u
br_if 0 (;@1;)
i32.const 5128
i32.load
i32.const 5152
i32.add
local.get 1
i32.store
i32.const 5128
i32.const 5128
i32.load
local.get 2
i32.add
local.tee 0
i32.store
local.get 0
i32.const 5136
i32.load
i32.ne
local.set 3
end
local.get 3)
(export "dec" (func 0))
(export "end" (func 1)))