Age | Commit message (Collapse) | Author |
|
We have a dedicated format specifier which adds the "0x" prefix, so
let's use that instead of adding it manually.
|
|
There are no multiple exit paths in that function, so we can just put
the ending logic right at the end of the function instead.
|
|
...and enable it for LibWeb and test-wasm.
Note that `wasm` will not be limited by this.
|
|
These are mostly pretty small functions too, and they were about ~10%
of runtime.
|
|
This reverts commit 35394dbfaa23b44a293da85b20a63a10f73572c3.
I pushed the wrong button again, hopefully this will be the last of
such incidents.
|
|
* wasm: Don't try to print the function results if it traps
* LibWasm: Inline some very hot functions
These are mostly pretty small functions too, and they were about ~10%
of runtime.
* LibWasm+Everywhere: Make the instruction count limit configurable
...and enable it for LibWeb and test-wasm.
Note that `wasm` will not be limited by this.
* LibWasm: Remove a useless use of ScopeGuard
There are no multiple exit paths in that function, so we can just put
the ending logic right at the end of the function instead.
|
|
Perform signed integer shifts, addition, subtraction, and rotations
using their corresponding unsigned type. Additionally, mod the right
hand side of shifts and rotations by the bit width of the integer per
the spec. This seems strange, but the spec is clear on the desired
wrapping behavior of arithmetic operations.
|
|
|
|
This way, we can make sure that it doesn't overflow when ASAN is
enabled.
|
|
These strings are only used when execution traps, so there's no reason
to create actual strings until that happens; instead switch to using
StringViews.
|
|
|
|
|
|
The spec mentions this, and anything past that can't be correctly
addressed by the 32-bit indices anyhow.
|
|
|
|
Also adds a forgotten Wasm::Printer implementation for printing table
branch arguments.
|
|
...instead of comparing page count with byte count.
|
|
If the stack is empty, let's just trap.
|
|
Specifically, explicitly specify the checked type, use the resulting
value instead of doing the same calculation twice, and break down
calculations to discrete operations to ensure no intermediary overflows
are missed.
|
|
This makes debugging wasm code a bit easier, as we now know what fails
instead of just "too bad, something went wrong".
|
|
I accidentally renamed these to verify_cast() when doing the global
AK::downcast() rename.
|
|
This makes it much clearer what this cast actually does: it will
VERIFY that the thing we're casting is a T (using is<T>()).
|
|
These limits are described in the spec, and we're supposed to stop
execution at some point.
The limits are arbitrarily chosen.
|
|
Otherwise we'd just crash, which is not a good thing
|
|
This commit makes the linking tests in the wasm spec test run.
|
|
This was moved to BytecodeInterpreter.cpp, so this is unused now.
|
|
Let's make it a bit more clear when we're appending the elements from
one vector to the end of another vector.
|
|
These function couldn't be inlined before because the compiler would've
started flagging invalid paths in Variant as maybe-uninitialized.
|
|
With these, the only remaining unimplemented instructions are the
following:
- memory.init
- data.drop
- memory.copy
- memory.fill
- table.init
- elem.drop
- table.copy
- table.grow
- table.size
- table.fill
|
|
|
|
|
|
|
|
Against my better judgement, this change is mandated by the project code
style rules, even if it's not actually enforced.
|
|
This commit is a fairly large refactor, mainly because it unified the
two different ways that existed to represent references.
Now Reference values are also a kind of value.
It also implements a printer for values/references instead of copying
the implementation everywhere.
|
|
Unlike its name, this instruction has nothing to do with tables, it's
just a very simple switch-case instruction.
|
|
The spec says so, we must do so.
|
|
|
|
|
|
Checking for this (and get()'ing it) is always invalid, so let's just
disallow it.
This also finds two bugs where the code is checking for types that can
never actually be in the variant (which was actually a refactor
artifact).
|
|
Also makes normal arithmetic operations more spec-compliant by actually
ignoring overflow on them.
|
|
|
|
|
|
This should allow running modules with their imports stubbed out
in wasm, to debug them.
|
|
|
|
Previously ByteBuffer::grow() behaved like Vector<T>::resize().
However the function name was somewhat ambiguous - and so this patch
updates ByteBuffer to behave more like Vector<T> by replacing grow()
with resize() and adding an ensure_capacity() method.
This also lets the user change the buffer's capacity without affecting
the size which was not previously possible.
Additionally this patch makes the capacity() method public (again).
|
|
Instead of applying a unary operator to the ToS.
This alone fixes 4% of the spec test issues.
|
|
Just trap instead of crashing.
|
|
The check was negated, and it errored out when the read actually
succeeded.
|
|
Also make the stack a lot bigger, since we now have only one of these
instead of one per function call.
|
|
|
|
|