Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								03ddda7979 
								
							 
						 
						
							
							
								
								LibWasm: Fix broken build after merging un-rebased Validator changes  
							
							
							
						 
						
							2021-11-11 09:27:00 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								3680aa253d 
								
							 
						 
						
							
							
								
								LibWasm: Remove traps caught by validation  
							
							
							
						 
						
							2021-11-11 09:20:04 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								7d1142e2c8 
								
							 
						 
						
							
							
								
								LibWasm: Implement module validation  
							
							
							
						 
						
							2021-11-11 09:20:04 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								a15ed8743d 
								
							 
						 
						
							
							
								
								AK: Make ByteBuffer::try_* functions return ErrorOr<void>  
							
							... 
							
							
							
							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-10 21:58:58 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								88b6428c25 
								
							 
						 
						
							
							
								
								AK: Make Vector::try_* functions return ErrorOr<void>  
							
							... 
							
							
							
							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-11-10 21:58:58 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ben Wiederhake 
								
							 
						 
						
							
							
							
							
								
							
							
								32e98d0924 
								
							 
						 
						
							
							
								
								Libraries: Use AK::Variant default initialization where appropriate  
							
							
							
						 
						
							2021-09-21 04:22:52 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ben Wiederhake 
								
							 
						 
						
							
							
							
							
								
							
							
								6c8eea6f5e 
								
							 
						 
						
							
							
								
								LibWasm: Avoid making StringView of temporary ByteBuffer  
							
							
							
						 
						
							2021-09-11 13:22:51 +03:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								6ad427993a 
								
							 
						 
						
							
							
								
								Everywhere: Behaviour => Behavior  
							
							
							
						 
						
							2021-09-07 13:53:14 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								3a9f00c59b 
								
							 
						 
						
							
							
								
								Everywhere: Use OOM-safe ByteBuffer APIs where possible  
							
							... 
							
							
							
							If we can easily communicate failure, let's avoid asserting and report
failure instead. 
							
						 
						
							2021-09-06 01:53:26 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								09dd397160 
								
							 
						 
						
							
							
								
								LibWeb+LibWasm: Implement the WebAssembly.Table object  
							
							
							
						 
						
							2021-09-05 15:42:50 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								f492e98f19 
								
							 
						 
						
							
							
								
								LibWasm: Make the Truncate operator trap on undefined results  
							
							
							
						 
						
							2021-08-30 22:47:02 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								2c7e2e351a 
								
							 
						 
						
							
							
								
								LibWasm: Implement fx.nearest using nearbyint() instead of round()  
							
							... 
							
							
							
							This instruction wants RoundingMode::ToEven, so let's use the correct
function. 
							
						 
						
							2021-08-30 22:47:02 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								04e3965b09 
								
							 
						 
						
							
							
								
								LibWasm: Use Operators::BitShiftRight for i64.shru  
							
							... 
							
							
							
							Using a left-shift operator for a right shift operation is not exactly
the most correct action :P 
							
						 
						
							2021-08-26 00:51:30 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								8b6397446e 
								
							 
						 
						
							
							
								
								LibWasm: Move some Values and Vector<Value>s instead of copying them  
							
							
							
						 
						
							2021-08-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								fa2ae02564 
								
							 
						 
						
							
							
								
								LibWasm: Avoid calculating stack bounds on each wasm call  
							
							... 
							
							
							
							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-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								2b35e9f9be 
								
							 
						 
						
							
							
								
								LibWasm: Generate Value::type() on the fly instead of storing it  
							
							... 
							
							
							
							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-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								4060f18d7e 
								
							 
						 
						
							
							
								
								LibWasm: Replace memory write macros with templated functions  
							
							
							
						 
						
							2021-08-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								b6381f785d 
								
							 
						 
						
							
							
								
								LibWasm: Make memory operation address calculation match the spec  
							
							... 
							
							
							
							...or rather, match what the spec _means_ to say, not what it actually
says. 
							
						 
						
							2021-08-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								ad3de4648a 
								
							 
						 
						
							
							
								
								LibWasm: Replace memory read macros with templated functions  
							
							
							
						 
						
							2021-08-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								563b402f04 
								
							 
						 
						
							
							
								
								LibWasm: Replace the numeric operation macros with templated functions  
							
							... 
							
							
							
							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-08-12 21:03:53 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								52a2518a69 
								
							 
						 
						
							
							
								
								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-17 01:13:39 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								65cd5526cb 
								
							 
						 
						
							
							
								
								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. 
							
						 
						
							2021-07-17 01:13:39 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								70b94f58b2 
								
							 
						 
						
							
							
								
								LibWasm: Inline some very hot functions  
							
							... 
							
							
							
							These are mostly pretty small functions too, and they were about ~10%
of runtime. 
							
						 
						
							2021-07-17 01:13:39 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								23b48f8fe1 
								
							 
						 
						
							
							
								
								Revert "LibWasm: Some more performance stuff ( #8812 )"  
							
							... 
							
							
							
							This reverts commit 35394dbfaa 
							
						 
						
							2021-07-17 01:11:28 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								35394dbfaa 
								
							 
						 
						
							
							
								
								LibWasm: Some more performance stuff ( #8812 )  
							
							... 
							
							
							
							* 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-17 01:04:37 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andrew Kaster 
								
							 
						 
						
							
							
							
							
								
							
							
								2af591267c 
								
							 
						 
						
							
							
								
								LibWasm: Adjust signed integer operations to avoid UB  
							
							... 
							
							
							
							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-12 18:42:45 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								d74eca78aa 
								
							 
						 
						
							
							
								
								LibWasm: Skip initializing active empty data sections  
							
							
							
						 
						
							2021-07-12 18:42:45 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								65355c388b 
								
							 
						 
						
							
							
								
								LibWasm: Use AK::StackInfo to track stack size  
							
							... 
							
							
							
							This way, we can make sure that it doesn't overflow when ASAN is
enabled. 
							
						 
						
							2021-07-12 18:42:45 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								06ffc0c4db 
								
							 
						 
						
							
							
								
								LibWasm: Don't create useless temporary strings for trap reasons  
							
							... 
							
							
							
							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-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								5636f8143d 
								
							 
						 
						
							
							
								
								LibWasm: Allow overflow in normal 64-bit arithmetic instructions  
							
							
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								c4d4c657d0 
								
							 
						 
						
							
							
								
								LibWasm: Limit module memory to 65536 pages  
							
							... 
							
							
							
							The spec mentions this, and anything past that can't be correctly
addressed by the 32-bit indices anyhow. 
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								03fe50d5e7 
								
							 
						 
						
							
							
								
								LibWasm: Fix data section initialization bounds checking  
							
							
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								d2212a1f51 
								
							 
						 
						
							
							
								
								LibWasm: Jump to the default label in br_table with negative values  
							
							... 
							
							
							
							Also adds a forgotten Wasm::Printer implementation for printing table
branch arguments. 
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								0b08392e54 
								
							 
						 
						
							
							
								
								LibWasm: Use the number of bytes when comparing memory limits  
							
							... 
							
							
							
							...instead of comparing page count with byte count. 
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								4bdb0ad132 
								
							 
						 
						
							
							
								
								LibWasm: Guard stack accesses with checks  
							
							... 
							
							
							
							If the stack is empty, let's just trap. 
							
						 
						
							2021-07-06 17:55:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Idan Horowitz 
								
							 
						 
						
							
							
							
							
								
							
							
								301c1a3a58 
								
							 
						 
						
							
							
								
								Everywhere: Fix incorrect usages of AK::Checked  
							
							... 
							
							
							
							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-04 20:08:28 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								b538e15548 
								
							 
						 
						
							
							
								
								LibWasm: Give traps a reason and display it when needed  
							
							... 
							
							
							
							This makes debugging wasm code a bit easier, as we now know what fails
instead of just "too bad, something went wrong". 
							
						 
						
							2021-07-02 04:53:01 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								beb43f673e 
								
							 
						 
						
							
							
								
								AK: Undo bogus Variant::downcast() rename  
							
							... 
							
							
							
							I accidentally renamed these to verify_cast() when doing the global
AK::downcast() rename. 
							
						 
						
							2021-06-26 21:27:58 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								ee3a73ddbb 
								
							 
						 
						
							
							
								
								AK: Rename downcast<T> => verify_cast<T>  
							
							... 
							
							
							
							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>()). 
							
						 
						
							2021-06-24 19:57:01 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								c4b82ace74 
								
							 
						 
						
							
							
								
								LibWasm: Limit the call stack depth and the number of executed insts  
							
							... 
							
							
							
							These limits are described in the spec, and we're supposed to stop
execution at some point.
The limits are arbitrarily chosen. 
							
						 
						
							2021-06-22 00:26:25 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								9971d13844 
								
							 
						 
						
							
							
								
								LibWasm: Trap if a non-Value is used as a Value  
							
							... 
							
							
							
							Otherwise we'd just crash, which is not a good thing 
							
						 
						
							2021-06-22 00:26:25 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Linus Groh 
								
							 
						 
						
							
							
							
							
								
							
							
								34b338702a 
								
							 
						 
						
							
							
								
								LibWasm: Remove empty AbstractMachine/Interpreter.cpp  
							
							... 
							
							
							
							This was moved to BytecodeInterpreter.cpp, so this is unused now. 
							
						 
						
							2021-06-20 01:49:56 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								aa2916c21b 
								
							 
						 
						
							
							
								
								LibWasm: ALWAYS_INLINE some very hot functions  
							
							... 
							
							
							
							These function couldn't be inlined before because the compiler would've
started flagging invalid paths in Variant as maybe-uninitialized. 
							
						 
						
							2021-06-09 23:05:32 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								45710d0724 
								
							 
						 
						
							
							
								
								LibWasm: Implement saturating float truncation instructions  
							
							... 
							
							
							
							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-09 23:05:32 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								3a44011cd4 
								
							 
						 
						
							
							
								
								LibWasm: Implement sign extension instructions  
							
							
							
						 
						
							2021-06-09 23:05:32 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								a4c4dd928b 
								
							 
						 
						
							
							
								
								LibWasm: Implement spec-compliant float min/max ops  
							
							
							
						 
						
							2021-06-09 23:05:32 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Sahan Fernando 
								
							 
						 
						
							
							
							
							
								
							
							
								d02e7b3811 
								
							 
						 
						
							
							
								
								LibWasm: Move Wasm::BytecodeInterpreter into its own header  
							
							
							
						 
						
							2021-06-05 14:31:54 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								1b083392fa 
								
							 
						 
						
							
							
								
								LibWasm+wasm: Switch to east-const to comply with project style  
							
							... 
							
							
							
							Against my better judgement, this change is mandated by the project code
style rules, even if it's not actually enforced. 
							
						 
						
							2021-06-04 16:07:42 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								be62e4d1d7 
								
							 
						 
						
							
							
								
								LibWasm: Load and instantiate tables  
							
							... 
							
							
							
							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. 
							
						 
						
							2021-06-04 16:07:42 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								c392a0cf7f 
								
							 
						 
						
							
							
								
								LibWasm: Implement the br.table instruction  
							
							... 
							
							
							
							Unlike its name, this instruction has nothing to do with tables, it's
just a very simple switch-case instruction. 
							
						 
						
							2021-06-04 16:07:42 +04:30