summaryrefslogtreecommitdiff
path: root/wasm
AgeCommit message (Collapse)Author
2022-03-15wasm/README.md: add manual config.guess download and autoconf stepsYuta Saito
Autoconf distributed with Ubuntu 22.04 is very old and doesn't support WASI as an OS, so add instructions to download the latest config.guess, then run `./autogen.sh`. See also: https://github.com/ruby/chkbuild/commit/2297012efd6364f6fde45f54531b6fc0f0838ec9 Notes: Merged: https://github.com/ruby/ruby/pull/5659
2022-02-18[wasm] vm.c: stop unwinding to main for every vm_exec call by setjmpYuta Saito
the original rb_wasm_setjmp implementation always unwinds to the root call frame to have setjmp compatible interface, and simulate sjlj's undefined behavior. Therefore, every vm_exec call unwinds to main, and a deep call stack makes setjmp call very expensive. The following snippet from optcarrot takes 5s even though it takes less than 0.3s on native. ``` [0x0, 0x4, 0x8, 0xc].map do |attr| (0..7).map do |j| (0...0x10000).map do |i| clr = i[15 - j] * 2 + i[7 - j] clr != 0 ? attr | clr : 0 end end end ``` This patch adds a WASI specialized vm_exec which uses lightweight try-catch API without unwinding to the root frame. After this patch, the above snippet takes only 0.5s. Notes: Merged: https://github.com/ruby/ruby/pull/5502
2022-01-19* expand tabs. [ci skip]git
Tabs were expanded because the file did not have any tab indentation in unedited lines. Please update your editor config, and use misc/expand_tabs.rb in the pre-commit hook.
2022-01-19[wasm] wasm/README.md: write a brief instruction to cross buildYuta Saito
Notes: Merged: https://github.com/ruby/ruby/pull/5407
2022-01-19[wasm] add unit test suite for fiber, register scan, sjlj in platform dirYuta Saito
Notes: Merged: https://github.com/ruby/ruby/pull/5407
2022-01-19[wasm] wasm/missing.{c,h}: add missing libc stubs for wasi-libcYuta Saito
Notes: Merged: https://github.com/ruby/ruby/pull/5407
2022-01-19[wasm] add asyncify based setjmp, fiber, register scan emulationYuta Saito
configure.ac: setup build tools and register objects main.c: wrap main with rb_wasm_rt_start to handle asyncify unwinds tool/m4/ruby_wasm_tools.m4: setup default command based on WASI_SDK_PATH environment variable. checks wasm-opt which is used for asyncify. tool/wasm-clangw wasm/wasm-opt: a clang wrapper which replaces real wasm-opt with do-nothing wasm-opt to avoid misoptimization before asyncify. asyncify is performed at POSTLINK, but clang linker driver tries to run optimization by wasm-opt unconditionally. inlining pass at wasm level breaks asyncify's assumption, so should not optimize before POSTLIK. wasm/GNUmakefile.in: wasm specific rules to compile objects Notes: Merged: https://github.com/ruby/ruby/pull/5407