summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp
AgeCommit message (Collapse)Author
2021-08-12LibWasm: Move some Values and Vector<Value>s instead of copying themAli Mohammad Pur
2021-08-12LibWasm: Avoid calculating stack bounds on each wasm callAli Mohammad Pur
We only need to know the initial bounds, which we calculate by default when the interpreter is constructed. This cuts down on syscalls and makes wasm calls a lot cheaper.
2021-08-12LibWasm: Replace memory write macros with templated functionsAli Mohammad Pur
2021-08-12LibWasm: Make memory operation address calculation match the specAli Mohammad Pur
...or rather, match what the spec _means_ to say, not what it actually says.
2021-08-12LibWasm: Replace memory read macros with templated functionsAli Mohammad Pur
2021-08-12LibWasm: Replace the numeric operation macros with templated functionsAli Mohammad Pur
This should make debugging and profiling much better, at little to no runtime cost. Also moves off the operator definitions to a separate header, so it should also improve the editing experience quite a bit.
2021-07-17LibWasm: Remove a useless use of ScopeGuardAli Mohammad Pur
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.
2021-07-17LibWasm+Everywhere: Make the instruction count limit configurableAli Mohammad Pur
...and enable it for LibWeb and test-wasm. Note that `wasm` will not be limited by this.
2021-07-17Revert "LibWasm: Some more performance stuff (#8812)"Ali Mohammad Pur
This reverts commit 35394dbfaa23b44a293da85b20a63a10f73572c3. I pushed the wrong button again, hopefully this will be the last of such incidents.
2021-07-17LibWasm: Some more performance stuff (#8812)Ali Mohammad Pur
* 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.
2021-07-12LibWasm: Adjust signed integer operations to avoid UBAndrew Kaster
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.
2021-07-12LibWasm: Use AK::StackInfo to track stack sizeAli Mohammad Pur
This way, we can make sure that it doesn't overflow when ASAN is enabled.
2021-07-06LibWasm: Don't create useless temporary strings for trap reasonsAli Mohammad Pur
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.
2021-07-06LibWasm: Allow overflow in normal 64-bit arithmetic instructionsAli Mohammad Pur
2021-07-06LibWasm: Jump to the default label in br_table with negative valuesAli Mohammad Pur
Also adds a forgotten Wasm::Printer implementation for printing table branch arguments.
2021-07-06LibWasm: Guard stack accesses with checksAli Mohammad Pur
If the stack is empty, let's just trap.
2021-07-04Everywhere: Fix incorrect usages of AK::CheckedIdan Horowitz
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.
2021-07-02LibWasm: Give traps a reason and display it when neededAli Mohammad Pur
This makes debugging wasm code a bit easier, as we now know what fails instead of just "too bad, something went wrong".
2021-06-22LibWasm: Limit the call stack depth and the number of executed instsAli Mohammad Pur
These limits are described in the spec, and we're supposed to stop execution at some point. The limits are arbitrarily chosen.
2021-06-22LibWasm: Trap if a non-Value is used as a ValueAli Mohammad Pur
Otherwise we'd just crash, which is not a good thing
2021-06-09LibWasm: Implement saturating float truncation instructionsAli Mohammad Pur
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
2021-06-09LibWasm: Implement sign extension instructionsAli Mohammad Pur
2021-06-09LibWasm: Implement spec-compliant float min/max opsAli Mohammad Pur
2021-06-05LibWasm: Move Wasm::BytecodeInterpreter into its own headerSahan Fernando