News for hackers. Stuff that matters.
Re:I Wrote a WebAssembly VM in C by kouteiheika on Monday February 03, 2025 @02:44PM (#42922004)
> anything involving memory [..] needs safety checks that becomes multi-instruction

Not necessarily; on AMD64 you can do memory accesses in a single instruction relatively easily by using the CPU's paging machinery for safety checks plus some clever use of address space.

> branches could mostly be direct _unless_ the runtime has any kind of metering (it should) to stop eternal loops

Even with metering the branches would be direct, you'd just insert the metering code at the start of each basic block (so that's two extra instructions at the start of each basic block). Or did you mean something else?

Re:I Wrote a WebAssembly VM in C by charleslmunger on Monday February 03, 2025 @03:23PM (#42922517)
Metering also doesn't require a branch if you implement it with page faults. See "Implicit suspend checks" in https://android-developers.googleblog.com/2023/11/the-secret...
Re:I Wrote a WebAssembly VM in C by kouteiheika on Monday February 03, 2025 @04:23PM (#42923389)
Yep. That's a nice trick; unfortunately it's non-deterministic.
Re:I Wrote a WebAssembly VM in C by csjh on Wednesday February 05, 2025 @09:39PM (#42958349)
How's it nondeterministic?
Re:I Wrote a WebAssembly VM in C by dist1ll on Tuesday February 04, 2025 @07:11AM (#42931349)
How do you avoid branches in 64-bit WASM?
Re:I Wrote a WebAssembly VM in C by kouteiheika on Tuesday February 04, 2025 @02:59PM (#42937768)
You can run the guest in another thread/process and give it its own dedicated address space, or use something like memory protection keys.
Re:I Wrote a WebAssembly VM in C by whizzter on Wednesday February 05, 2025 @09:07AM (#42948654)
Can't remember exactly what one but I remember reading an article about some VM that added interruption checks not at block boundaries, but rather only at _backwards_ branches and call-sites, so "safe" forward jumps (if/else/break) wouldn't cost anything extra but anything that could go on "forever" had the checks.

Reserving 4gb address space oughta work on any 64bit machine with a decent OS/paging system though? I was looking into it but couldn't use it in my case however since it needs to cooperate with another VM that already hooks the PF handler (although maybe I should take another stab if there is a way to put in a hierarhcy).