summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWasm/AbstractMachine/BytecodeInterpreter.cpp
AgeCommit message (Collapse)Author
2023-04-12LibWasm: Replace usages of the Endian bytes accessorTim Schumacher
2023-03-13AK: Rename Stream::read_entire_buffer to Stream::read_until_filledTim Schumacher
No functional changes.
2023-02-26LibWasm+LibWeb: Sneak a JS::Completion into Wasm::ResultAli Mohammad Pur
Imported functions in Wasm may throw JS exceptions, and we need to preserve these exceptions so we can pass them to the calling JS code. This also adds a `assert_wasm_result()` API to Result for cases where only Wasm traps or values are expected (e.g. internal uses) to avoid making LibWasm (pointlessly) handle JS exceptions that will never show up in reality.
2023-02-13LibCore: Remove `Stream.h`Tim Schumacher
2023-02-08AK: Remove the fallible constructor from `FixedMemoryStream`Tim Schumacher
2023-01-29AK: Move memory streams from `LibCore`Tim Schumacher
2023-01-28LibWasm: Implement data.drop instructionSam Atkins
2023-01-28LibWasm: Move memory.init code together with other memory.foo implsSam Atkins
And add a spec link while I'm at it.
2023-01-28LibWasm: Implement memory.copy instructionSam Atkins
2023-01-28LibWasm: Implement memory.fill instructionSam Atkins
2023-01-25LibWasm: Use `Core::Stream` to read values in the bytecode interpreterTim Schumacher
2022-12-06AK+Everywhere: Rename String to DeprecatedStringLinus Groh
We have a new, improved string type coming up in AK (OOM aware, no null state), and while it's going to use UTF-8, the name UTF8String is a mouthful - so let's free up the String name by renaming the existing class. Making the old one have an annoying name will hopefully also help with quick adoption :^)
2022-04-22LibWasm: Simplify the return instruction execution code a bitAli Mohammad Pur
2022-04-22LibWasm: Push call results back in reverse order to preserve stack orderAli Mohammad Pur
2022-01-07Everywhere: Fix many spelling errorsmjz19910
2021-12-21LibWasm: Make blocks that take arguments actually workAli Mohammad Pur
Previously we were ignoring the actual parameters and setting the arity to an incorrect value, which could cause crashes (or unexpected traps).
2021-12-21LibWasm: Implement memory.init and passive mode dataAli Mohammad Pur
2021-11-11LibWasm: Remove traps caught by validationAli Mohammad Pur
2021-09-07Everywhere: Behaviour => BehaviorAndreas Kling
2021-08-30LibWasm: Implement fx.nearest using nearbyint() instead of round()Ali Mohammad Pur
This instruction wants RoundingMode::ToEven, so let's use the correct function.
2021-08-26LibWasm: Use Operators::BitShiftRight for i64.shruAli Mohammad Pur
Using a left-shift operator for a right shift operation is not exactly the most correct action :P
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