summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWasm
AgeCommit message (Collapse)Author
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-04-22LibWasm: Make memory_grow validation push back the old memory sizeAli Mohammad Pur
2022-04-22LibWasm: Make local_tee validation keep the value on the stackAli Mohammad Pur
2022-04-01Everywhere: Run clang-formatIdan Horowitz
2022-03-20LibWasm: Increase the arbitrary local value count per type limitAli Mohammad Pur
It was arbitrary, it's still arbitrary, but now it's funny too :^)
2022-03-20LibWasm: Use some template magic to greatly simplify stack validationAli Mohammad Pur
This also auto-fixes a few bugs that were present before as we were manually checking the stack.
2022-03-20LibWasm: Allow Limits max value to be equal to 2^k-1Ali Mohammad Pur
That value fits in k bits, so we should allow it.
2022-02-16LibWasm: Fix validation of if-else blocksAli Mohammad Pur
We were doing a number of things wrong: - Switching to the parent context in the else meant that we couldn't break out of the else section anymore - We were not validating the resulting values, and so the stack was in a relatively unknown state after 'else' This commit fixes these issues :^)
2022-02-16LibWasm: Make MemoryInstance allocation fail if initial growth failsAli Mohammad Pur
...instead of silently ignoring the failure in the constructor.
2022-01-07Everywhere: Fix many spelling errorsmjz19910
2022-01-04Userland: Resolve tautological-constant-out-of-range-compare warningsAndrew Kaster
Stop comparing platform-specific sized integer types to max() values of other interger types. Enable the warning everywhere.
2021-12-21AK+Everywhere: Replace __builtin bit functionsNick Johnson
In order to reduce our reliance on __builtin_{ffs, clz, ctz, popcount}, this commit removes all calls to these functions and replaces them with the equivalent functions in AK/BuiltinWrappers.h.
2021-12-21LibWasm: Tolerate modules with invalid sections and mark them as invalidAli Mohammad Pur
We should not crash, but rather just fail to verify them.
2021-12-21LibWasm: Make shown instruction names match the names in the specAli Mohammad Pur
2021-12-21LibWasm: Add a instruction_from_name getterAli Mohammad Pur
2021-12-21LibWasm: Print the block type for structured argumentsAli Mohammad Pur
2021-12-21LibWasm: Fix silly typo in f32 reinterpret validationAli Mohammad Pur
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-17AK: Convert AK::Format formatting helpers to returning ErrorOr<void>Andreas Kling
This isn't a complete conversion to ErrorOr<void>, but a good chunk. The end goal here is to propagate buffer allocation failures to the caller, and allow the use of TRY() with formatting functions.
2021-11-11LibWasm: Fix broken build after merging un-rebased Validator changesAndreas Kling
2021-11-11LibWasm: Remove traps caught by validationAli Mohammad Pur
2021-11-11LibWasm: Implement module validationAli Mohammad Pur
2021-11-11LibWasm: Make opcode definitions enumerable through a macroAli Mohammad Pur
2021-11-10AK: Make ByteBuffer::try_* functions return ErrorOr<void>Andreas Kling
Same as Vector, ByteBuffer now also signals allocation failure by returning an ENOMEM Error instead of a bool, allowing us to use the TRY() and MUST() patterns.
2021-11-10AK: Make Vector::try_* functions return ErrorOr<void>Andreas Kling
Instead of signalling allocation failure with a bool return value (false), we now use ErrorOr<void> and return ENOMEM as appropriate. This allows us to use TRY() and MUST() with Vector. :^)
2021-10-06LibWasm: Add missing forward declaration to Printer/Printer.hBen Wiederhake
2021-09-21Libraries: Use AK::Variant default initialization where appropriateBen Wiederhake
2021-09-11LibWasm: Avoid making StringView of temporary ByteBufferBen Wiederhake
2021-09-07Everywhere: Behaviour => BehaviorAndreas Kling
2021-09-06Everywhere: Make ByteBuffer::{create_*,copy}() OOM-safeAli Mohammad Pur
2021-09-06Everywhere: Use OOM-safe ByteBuffer APIs where possibleAli Mohammad Pur
If we can easily communicate failure, let's avoid asserting and report failure instead.
2021-09-05LibWeb+LibWasm: Implement the WebAssembly.Table objectAli Mohammad Pur
2021-09-05LibWasm: Move the vector size limit to Constants.h and increase it a bitAli Mohammad Pur
2021-08-31LibWasm: Limit the number of function localsAli Mohammad Pur
It's possible for the module to request too many locals, we now reject such modules instead of trying to allocate space for them. The value itself is chosen arbitrarily, so future tweaks _might_ be necessary. Found by OSS-Fuzz: https://oss-fuzz.com/testcase?key=4755809098661888
2021-08-30LibWasm: Make the Truncate operator trap on undefined resultsAli Mohammad Pur
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: Generate Value::type() on the fly instead of storing itAli Mohammad Pur
The variant member already contains enough information to give us the type when needed, so remove the type member and synthesize it when needed, this allows lots of optimisation opportunaties when copying and moving Values around.
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-22Everywhere: Prefer using {:#x} over 0x{:x}Gunnar Beutner
We have a dedicated format specifier which adds the "0x" prefix, so let's use that instead of adding it manually.
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-17LibWasm: Inline some very hot functionsAli Mohammad Pur
These are mostly pretty small functions too, and they were about ~10% of runtime.