diff --git a/embed/README.md b/embed/README.md index 67af297..8a84595 100644 --- a/embed/README.md +++ b/embed/README.md @@ -1,6 +1,6 @@ # Embeddable Wasm build of SQLite -This folder includes an embeddable Wasm build of SQLite 3.50.4 for use with +This folder includes an embeddable Wasm build of SQLite 3.51.1 for use with [`github.com/ncruces/go-sqlite3`](https://pkg.go.dev/github.com/ncruces/go-sqlite3). The following optional features are compiled in: diff --git a/embed/bcw2/bcw2.wasm b/embed/bcw2/bcw2.wasm index e87b2d5..af915a1 100755 Binary files a/embed/bcw2/bcw2.wasm and b/embed/bcw2/bcw2.wasm differ diff --git a/embed/bcw2/build.sh b/embed/bcw2/build.sh index e1c46f6..cc561b6 100755 --- a/embed/bcw2/build.sh +++ b/embed/bcw2/build.sh @@ -15,9 +15,9 @@ cp "$ROOT"/sqlite3/*.[ch] build/ cp "$ROOT"/sqlite3/*.patch build/ cd sqlite/ -# https://sqlite.org/src/info/352b363a5d727047 -curl -#L https://github.com/sqlite/sqlite/archive/dbd613c.tar.gz | tar xz --strip-components=1 -# curl -#L https://sqlite.org/src/tarball/sqlite.tar.gz?r=352b363a5d | tar xz --strip-components=1 +# https://sqlite.org/src/info/f273f6b8245c5dca +curl -#L https://github.com/sqlite/sqlite/archive/7c126d7.tar.gz | tar xz --strip-components=1 +# curl -#L https://sqlite.org/src/tarball/sqlite.tar.gz?r=f273f6b824 | tar xz --strip-components=1 if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then MSYS_NO_PATHCONV=1 nmake /f makefile.msc sqlite3.c "OPTS=-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES" diff --git a/embed/bcw2/go.mod b/embed/bcw2/go.mod index 105324a..f56a5aa 100644 --- a/embed/bcw2/go.mod +++ b/embed/bcw2/go.mod @@ -2,7 +2,7 @@ module github.com/ncruces/go-sqlite3/embed/bcw2 go 1.24.0 -require github.com/ncruces/go-sqlite3 v0.30.1 +require github.com/ncruces/go-sqlite3 v0.30.2 require ( github.com/ncruces/julianday v1.0.0 // indirect diff --git a/embed/bcw2/go.sum b/embed/bcw2/go.sum index 30f7c87..8fef929 100644 --- a/embed/bcw2/go.sum +++ b/embed/bcw2/go.sum @@ -1,5 +1,5 @@ -github.com/ncruces/go-sqlite3 v0.30.1 h1:pHC3YsyRdJv4pCMB4MO1Q2BXw/CAa+Hoj7GSaKtVk+g= -github.com/ncruces/go-sqlite3 v0.30.1/go.mod h1:UVsWrQaq1qkcal5/vT5lOJnZCVlR5rsThKdwidjFsKc= +github.com/ncruces/go-sqlite3 v0.30.2 h1:1GVbHAkKAOwjJd3JYl8ldrYROudfZUOah7oXPD7VZbQ= +github.com/ncruces/go-sqlite3 v0.30.2/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/ncruces/sort v0.1.6 h1:TrsJfGRH1AoWoaeB4/+gCohot9+cA6u/INaH5agIhNk= @@ -8,5 +8,5 @@ github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2ww github.com/tetratelabs/wazero v1.10.1/go.mod h1:DRm5twOQ5Gr1AoEdSi0CLjDQF1J9ZAuyqFIjl1KKfQU= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= diff --git a/embed/build.sh b/embed/build.sh index 85a9e4d..47937a3 100755 --- a/embed/build.sh +++ b/embed/build.sh @@ -23,6 +23,7 @@ trap 'rm -f sqlite3.tmp' EXIT -Wl,--import-undefined \ -Wl,--initial-memory=327680 \ -D_HAVE_SQLITE_CONFIG_H \ + -DSQLITE_EXPERIMENTAL_PRAGMA_20251114 \ -DSQLITE_CUSTOM_INCLUDE=sqlite_opt.h \ $(awk '{print "-Wl,--export="$0}' exports.txt) diff --git a/embed/init_test.go b/embed/init_test.go index 64f988b..dab4d02 100644 --- a/embed/init_test.go +++ b/embed/init_test.go @@ -19,7 +19,7 @@ func Test_init(t *testing.T) { if err != nil { t.Fatal(err) } - if version != "3.51.0" { + if version != "3.51.1" { t.Error(version) } } diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 936c9a8..3b789c5 100755 Binary files a/embed/sqlite3.wasm and b/embed/sqlite3.wasm differ diff --git a/gormlite/go.mod b/gormlite/go.mod index 29f2e6a..c8fd049 100644 --- a/gormlite/go.mod +++ b/gormlite/go.mod @@ -3,7 +3,7 @@ module github.com/ncruces/go-sqlite3/gormlite go 1.24.0 require ( - github.com/ncruces/go-sqlite3 v0.30.1 + github.com/ncruces/go-sqlite3 v0.30.2 gorm.io/gorm v1.31.1 ) diff --git a/gormlite/go.sum b/gormlite/go.sum index 6141afc..3b618b6 100644 --- a/gormlite/go.sum +++ b/gormlite/go.sum @@ -2,8 +2,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/ncruces/go-sqlite3 v0.30.1 h1:pHC3YsyRdJv4pCMB4MO1Q2BXw/CAa+Hoj7GSaKtVk+g= -github.com/ncruces/go-sqlite3 v0.30.1/go.mod h1:UVsWrQaq1qkcal5/vT5lOJnZCVlR5rsThKdwidjFsKc= +github.com/ncruces/go-sqlite3 v0.30.2 h1:1GVbHAkKAOwjJd3JYl8ldrYROudfZUOah7oXPD7VZbQ= +github.com/ncruces/go-sqlite3 v0.30.2/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2wwFuH8= diff --git a/litestream/go.mod b/litestream/go.mod index 67dc7e3..78a0e3f 100644 --- a/litestream/go.mod +++ b/litestream/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.4 // indirect github.com/prometheus/procfs v0.19.2 // indirect - github.com/psanford/sqlite3vfs v0.0.0-20240315230605-24e1d98cf361 // indirect + github.com/psanford/sqlite3vfs v0.0.0-20251127171934-4e34e03a991a // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/crypto v0.45.0 // indirect google.golang.org/protobuf v1.36.10 // indirect diff --git a/litestream/go.sum b/litestream/go.sum index a7a06a1..b3c4b89 100644 --- a/litestream/go.sum +++ b/litestream/go.sum @@ -137,8 +137,8 @@ github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+L github.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI= github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= -github.com/psanford/sqlite3vfs v0.0.0-20240315230605-24e1d98cf361 h1:vAKifIJuYY306ZJSrwDgKonWcJGELijdaenABqbV03E= -github.com/psanford/sqlite3vfs v0.0.0-20240315230605-24e1d98cf361/go.mod h1:iW4cSew5PAb1sMZiTEkVJAIBNrepaB6jTYjeP47WtI0= +github.com/psanford/sqlite3vfs v0.0.0-20251127171934-4e34e03a991a h1:r4YWl0uVObCbBFvj1VsIlyHzgZwZOHvY1KdRaQjzzUc= +github.com/psanford/sqlite3vfs v0.0.0-20251127171934-4e34e03a991a/go.mod h1:iW4cSew5PAb1sMZiTEkVJAIBNrepaB6jTYjeP47WtI0= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= diff --git a/litestream/modernc/go.mod b/litestream/modernc/go.mod index a5d0334..3d1a4ca 100644 --- a/litestream/modernc/go.mod +++ b/litestream/modernc/go.mod @@ -2,7 +2,7 @@ module modernc.org/sqlite go 1.24.0 -require github.com/ncruces/go-sqlite3 v0.30.1 +require github.com/ncruces/go-sqlite3 v0.30.2 require ( github.com/ncruces/julianday v1.0.0 // indirect diff --git a/litestream/modernc/go.sum b/litestream/modernc/go.sum index 4f7cff3..40d07b3 100644 --- a/litestream/modernc/go.sum +++ b/litestream/modernc/go.sum @@ -1,10 +1,10 @@ -github.com/ncruces/go-sqlite3 v0.30.1 h1:pHC3YsyRdJv4pCMB4MO1Q2BXw/CAa+Hoj7GSaKtVk+g= -github.com/ncruces/go-sqlite3 v0.30.1/go.mod h1:UVsWrQaq1qkcal5/vT5lOJnZCVlR5rsThKdwidjFsKc= +github.com/ncruces/go-sqlite3 v0.30.2 h1:1GVbHAkKAOwjJd3JYl8ldrYROudfZUOah7oXPD7VZbQ= +github.com/ncruces/go-sqlite3 v0.30.2/go.mod h1:AxKu9sRxkludimFocbktlY6LiYSkxiI5gTA8r+os/Nw= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/tetratelabs/wazero v1.10.1 h1:2DugeJf6VVk58KTPszlNfeeN8AhhpwcZqkJj2wwFuH8= github.com/tetratelabs/wazero v1.10.1/go.mod h1:DRm5twOQ5Gr1AoEdSi0CLjDQF1J9ZAuyqFIjl1KKfQU= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= diff --git a/sqlite3/download.sh b/sqlite3/download.sh index 80a34be..d3f0580 100755 --- a/sqlite3/download.sh +++ b/sqlite3/download.sh @@ -3,11 +3,11 @@ set -euo pipefail cd -P -- "$(dirname -- "$0")" -curl -#OL "https://sqlite.org/2025/sqlite-autoconf-3510000.tar.gz" +curl -#OL "https://sqlite.org/2025/sqlite-autoconf-3510100.tar.gz" # Verify download. if hash=$(openssl dgst -sha3-256 sqlite-autoconf-*.tar.gz); then - if ! [[ $hash =~ fa52f9cc74dbca004aa650ae698036a3350611f672649e165078f4eae21d6a2e ]]; then + if ! [[ $hash =~ 9b2b1e73f577def1d5b75c5541555a7f42e6e073ad19f7a9118478389c9bbd9b ]]; then echo $hash exit 1 fi @@ -23,7 +23,7 @@ mv sqlite-*/sqlite3.h . mv sqlite-*/sqlite3ext.h . rm -r sqlite-* -GITHUB_TAG="https://github.com/sqlite/sqlite/raw/version-3.51.0" +GITHUB_TAG="https://github.com/sqlite/sqlite/raw/version-3.51.1" mkdir -p ext/ cd ext/ diff --git a/sqlite3/libc/libc.wasm b/sqlite3/libc/libc.wasm index 1ea2ef6..a8f01ab 100755 Binary files a/sqlite3/libc/libc.wasm and b/sqlite3/libc/libc.wasm differ diff --git a/sqlite3/libc/libc.wat b/sqlite3/libc/libc.wat index ca44de0..b295dbb 100644 --- a/sqlite3/libc/libc.wat +++ b/sqlite3/libc/libc.wat @@ -4,7 +4,8 @@ (type $2 (func (param i32 i32 i32 i32))) (type $3 (func (param i32) (result i32))) (memory $0 256) - (data $0 (i32.const 4096) "\01") + (data $.data (i32.const 4097) "\10\00\00\01\00\00\00\00\00\00\00\0c\10\00\00\0c\10\00\00\0c\10") + (data $.data.1 (i32.const 4157) "\10\00\00\00\10") (table $0 1 1 funcref) (export "memory" (memory $0)) (export "qsort" (func $qsort)) @@ -1493,33 +1494,243 @@ (local $2 i32) (local $3 i32) (local $4 i32) - (local $5 i32) + (local $5 v128) (local $6 v128) (local $7 v128) (local $8 v128) - (local $9 v128) - (block $block - (if - (local.tee $3 - (i32.load8_u - (local.get $1) + (block $block2 + (block $block + (br_if $block + (i32.eqz + (local.tee $3 + (i32.load8_u + (local.get $1) + ) + ) ) ) - (then - (br_if $block + (br_if $block + (i32.eqz (i32.load8_u offset=1 (local.get $1) ) ) ) + (loop $label + (v128.store + (i32.const 4080) + (local.get $6) + ) + (i32.store8 + (i32.or + (local.tee $3 + (i32.and + (local.tee $2 + (i32.load8_u + (local.get $1) + ) + ) + (i32.const 15) + ) + ) + (i32.const 4080) + ) + (i32.or + (i32.load8_u + (i32.or + (local.get $3) + (i32.const 4080) + ) + ) + (i32.shl + (i32.const 1) + (i32.sub + (local.tee $4 + (i32.shr_u + (local.get $2) + (i32.const 4) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (v128.store + (i32.const 4064) + (local.get $5) + ) + (i32.store8 + (local.tee $3 + (i32.or + (local.get $3) + (i32.const 4064) + ) + ) + (i32.or + (i32.load8_u + (local.get $3) + ) + (i32.shl + (i32.const 1) + (local.get $4) + ) + ) + ) + (local.set $1 + (i32.add + (local.get $1) + (i32.const 1) + ) + ) + (local.set $6 + (v128.load + (i32.const 4080) + ) + ) + (local.set $5 + (v128.load + (i32.const 4064) + ) + ) + (br_if $label + (local.get $2) + ) + ) + (block $block1 + (if + (v128.any_true + (local.tee $7 + (v128.and + (v128.or + (i8x16.swizzle + (local.get $6) + (v128.xor + (local.tee $8 + (v128.and + (local.tee $7 + (v128.load + (local.tee $2 + (i32.and + (local.get $0) + (i32.const -16) + ) + ) + ) + ) + (v128.const i32x4 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f) + ) + ) + (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) + ) + ) + (i8x16.swizzle + (local.get $5) + (local.get $8) + ) + ) + (i8x16.swizzle + (v128.const i32x4 0x08040201 0x80402010 0x08040201 0x80402010) + (i8x16.shr_u + (local.get $7) + (i32.const 4) + ) + ) + ) + ) + ) + (then + (br_if $block1 + (local.tee $1 + (i32.and + (i32.xor + (i8x16.bitmask + (i8x16.eq + (local.get $7) + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + ) + ) + (i32.const 65535) + ) + (i32.shl + (i32.const -1) + (i32.and + (local.get $0) + (i32.const 15) + ) + ) + ) + ) + ) + ) + ) + (loop $label1 + (br_if $label1 + (i32.eqz + (v128.any_true + (local.tee $7 + (v128.and + (v128.or + (i8x16.swizzle + (local.get $6) + (v128.xor + (local.tee $8 + (v128.and + (local.tee $7 + (v128.load + (local.tee $2 + (i32.add + (local.get $2) + (i32.const 16) + ) + ) + ) + ) + (v128.const i32x4 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f) + ) + ) + (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) + ) + ) + (i8x16.swizzle + (local.get $5) + (local.get $8) + ) + ) + (i8x16.swizzle + (v128.const i32x4 0x08040201 0x80402010 0x08040201 0x80402010) + (i8x16.shr_u + (local.get $7) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + (local.set $1 + (i32.xor + (i8x16.bitmask + (i8x16.eq + (local.get $7) + (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) + ) + ) + (i32.const 65535) + ) + ) + ) + (br $block2) ) - (block $block1 + (block $block3 (if (v128.any_true - (local.tee $6 + (local.tee $5 (v128.or (i8x16.eq - (local.tee $7 + (local.tee $6 (v128.load (local.tee $2 (i32.and @@ -1532,8 +1743,8 @@ (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) ) (i8x16.eq - (local.get $7) - (local.tee $7 + (local.get $6) + (local.tee $6 (i8x16.splat (local.get $3) ) @@ -1543,11 +1754,11 @@ ) ) (then - (br_if $block1 + (br_if $block3 (local.tee $1 (i32.and (i8x16.bitmask - (local.get $6) + (local.get $5) ) (i32.shl (i32.const -1) @@ -1561,14 +1772,14 @@ ) ) ) - (loop $label - (br_if $label + (loop $label2 + (br_if $label2 (i32.eqz (v128.any_true - (local.tee $6 + (local.tee $5 (v128.or (i8x16.eq - (local.tee $6 + (local.tee $5 (v128.load (local.tee $2 (i32.add @@ -1581,8 +1792,8 @@ (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) ) (i8x16.eq + (local.get $5) (local.get $6) - (local.get $7) ) ) ) @@ -1592,230 +1803,10 @@ ) (local.set $1 (i8x16.bitmask - (local.get $6) - ) - ) - ) - (return - (i32.add - (i32.ctz - (local.get $1) - ) - (i32.sub - (local.get $2) - (local.get $0) - ) - ) - ) - ) - (local.set $4 - (i32.and - (local.get $0) - (i32.const 15) - ) - ) - (loop $label1 - (v128.store - (i32.const 4080) - (local.get $7) - ) - (i32.store8 - (i32.or - (local.tee $3 - (i32.and - (local.tee $2 - (i32.load8_u - (local.get $1) - ) - ) - (i32.const 15) - ) - ) - (i32.const 4080) - ) - (i32.or - (i32.load8_u - (i32.or - (local.get $3) - (i32.const 4080) - ) - ) - (i32.shl - (i32.const 1) - (i32.sub - (local.tee $5 - (i32.shr_u - (local.get $2) - (i32.const 4) - ) - ) - (i32.const 8) - ) - ) - ) - ) - (v128.store - (i32.const 4064) - (local.get $6) - ) - (i32.store8 - (local.tee $3 - (i32.or - (local.get $3) - (i32.const 4064) - ) - ) - (i32.or - (i32.load8_u - (local.get $3) - ) - (i32.shl - (i32.const 1) (local.get $5) ) ) ) - (local.set $1 - (i32.add - (local.get $1) - (i32.const 1) - ) - ) - (local.set $7 - (v128.load - (i32.const 4080) - ) - ) - (local.set $6 - (v128.load - (i32.const 4064) - ) - ) - (br_if $label1 - (local.get $2) - ) - ) - (block $block2 - (if - (v128.any_true - (local.tee $8 - (v128.and - (v128.or - (i8x16.swizzle - (local.get $7) - (v128.xor - (local.tee $9 - (v128.and - (local.tee $8 - (v128.load - (local.tee $2 - (i32.and - (local.get $0) - (i32.const -16) - ) - ) - ) - ) - (v128.const i32x4 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f) - ) - ) - (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) - ) - ) - (i8x16.swizzle - (local.get $6) - (local.get $9) - ) - ) - (i8x16.swizzle - (v128.const i32x4 0x08040201 0x80402010 0x08040201 0x80402010) - (i8x16.shr_u - (local.get $8) - (i32.const 4) - ) - ) - ) - ) - ) - (then - (br_if $block2 - (local.tee $1 - (i32.and - (i32.xor - (i8x16.bitmask - (i8x16.eq - (local.get $8) - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - ) - ) - (i32.const 65535) - ) - (i32.shl - (i32.const -1) - (local.get $4) - ) - ) - ) - ) - ) - ) - (loop $label2 - (br_if $label2 - (i32.eqz - (v128.any_true - (local.tee $8 - (v128.and - (v128.or - (i8x16.swizzle - (local.get $7) - (v128.xor - (local.tee $9 - (v128.and - (local.tee $8 - (v128.load - (local.tee $2 - (i32.add - (local.get $2) - (i32.const 16) - ) - ) - ) - ) - (v128.const i32x4 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f 0x8f8f8f8f) - ) - ) - (v128.const i32x4 0x80808080 0x80808080 0x80808080 0x80808080) - ) - ) - (i8x16.swizzle - (local.get $6) - (local.get $9) - ) - ) - (i8x16.swizzle - (v128.const i32x4 0x08040201 0x80402010 0x08040201 0x80402010) - (i8x16.shr_u - (local.get $8) - (i32.const 4) - ) - ) - ) - ) - ) - ) - ) - ) - (local.set $1 - (i32.xor - (i8x16.bitmask - (i8x16.eq - (local.get $8) - (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000) - ) - ) - (i32.const 65535) - ) - ) ) (i32.add (i32.ctz diff --git a/vfs/tests/mptest/wasm/mptest.wasm b/vfs/tests/mptest/wasm/mptest.wasm index 3a8ccd3..ba2b658 100644 Binary files a/vfs/tests/mptest/wasm/mptest.wasm and b/vfs/tests/mptest/wasm/mptest.wasm differ diff --git a/vfs/tests/speedtest1/wasm/speedtest1.wasm b/vfs/tests/speedtest1/wasm/speedtest1.wasm index 42bb69c..65bc86b 100644 Binary files a/vfs/tests/speedtest1/wasm/speedtest1.wasm and b/vfs/tests/speedtest1/wasm/speedtest1.wasm differ