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 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								9c5d38b7db 
								
							 
						 
						
							
							
								
								Meta+LibWasm: Add support for module linking tests  
							
							... 
							
							
							
							This commit makes the linking tests in the wasm spec test run. 
							
						 
						
							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 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								dc65f54c06 
								
							 
						 
						
							
							
								
								AK: Rename Vector::append(Vector) => Vector::extend(Vector)  
							
							... 
							
							
							
							Let's make it a bit more clear when we're appending the elements from
one vector to the end of another vector. 
							
						 
						
							2021-06-12 13:24:45 +02: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 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								9db418e1fb 
								
							 
						 
						
							
							
								
								LibWasm: Read from and write to memory as little-endian  
							
							... 
							
							
							
							The spec says so, we must do so. 
							
						 
						
							2021-06-04 16:07:42 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									BrandonKi 
								
							 
						 
						
							
							
							
							
								
							
							
								0d1481be7d 
								
							 
						 
						
							
							
								
								LibWasm: Use builtins for clz, ctz, and popcnt  
							
							
							
						 
						
							2021-06-03 03:45:06 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									BrandonKi 
								
							 
						 
						
							
							
							
							
								
							
							
								e53df2ca9d 
								
							 
						 
						
							
							
								
								LibWasm: Implement rotr and rotl  
							
							
							
						 
						
							2021-06-03 03:45:06 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								ea7ba34a31 
								
							 
						 
						
							
							
								
								AK+LibWasm+LibJS: Disallow Variant.has() on types that aren't contained  
							
							... 
							
							
							
							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). 
							
						 
						
							2021-06-02 18:02:47 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								b15a5d6ada 
								
							 
						 
						
							
							
								
								LibWasm: Ensure that value signs are preserved when casting  
							
							... 
							
							
							
							Also makes normal arithmetic operations more spec-compliant by actually
ignoring overflow on them. 
							
						 
						
							2021-06-02 16:09:16 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								02b3238c41 
								
							 
						 
						
							
							
								
								LibWasm: Parse the "extend" set of instructions  
							
							
							
						 
						
							2021-06-02 16:09:16 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								9a1853c388 
								
							 
						 
						
							
							
								
								LibWasm: Don't execute the last instruction in the frame after return  
							
							
							
						 
						
							2021-06-02 16:09:16 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								b250a6ae7e 
								
							 
						 
						
							
							
								
								wasm: Add a way to create dummy function exports  
							
							... 
							
							
							
							This should allow running modules with their imports stubbed out
in wasm, to debug them. 
							
						 
						
							2021-06-02 16:09:16 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								56bf80251c 
								
							 
						 
						
							
							
								
								LibWasm: Implement reference instructions (ref.{null,func,is_null})  
							
							
							
						 
						
							2021-06-02 16:09:16 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Gunnar Beutner 
								
							 
						 
						
							
							
							
							
								
							
							
								5f18cf75c5 
								
							 
						 
						
							
							
								
								AK: Replace ByteBuffer::grow with resize()/ensure_capacity()  
							
							... 
							
							
							
							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). 
							
						 
						
							2021-05-31 14:49:00 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								e0b17988bd 
								
							 
						 
						
							
							
								
								LibWasm: Make f32-add/sub actually perform addition/subtraction  
							
							... 
							
							
							
							Instead of applying a unary operator to the ToS.
This alone fixes 4% of the spec test issues. 
							
						 
						
							2021-05-30 01:34:28 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								08b567e137 
								
							 
						 
						
							
							
								
								LibWasm: Avoid OOB accesses caused by user input  
							
							... 
							
							
							
							Just trap instead of crashing. 
							
						 
						
							2021-05-30 01:34:28 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								8ce015742d 
								
							 
						 
						
							
							
								
								LibWasm: Fix logic error in Limits::parse()  
							
							... 
							
							
							
							The check was negated, and it errored out when the read actually
succeeded. 
							
						 
						
							2021-05-29 23:03:18 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								578bf6c45e 
								
							 
						 
						
							
							
								
								LibWasm: Avoid excessive pop()-then-push() on the stack  
							
							... 
							
							
							
							Also make the stack a lot bigger, since we now have only one of these
instead of one per function call. 
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								477ab6dc4c 
								
							 
						 
						
							
							
								
								LibWasm: Let the interpreter itself manage the call frame  
							
							
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								85794f8244 
								
							 
						 
						
							
							
								
								LibWasm: Add a copy assignment operator to Value  
							
							
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								c5df55a8a2 
								
							 
						 
						
							
							
								
								LibWasm: Make Interpreter a virtual interface  
							
							... 
							
							
							
							This allows multiply different kinds of interpreters to be used by the
runtime; currently a BytecodeInterpreter and a
DebuggerBytecodeInterpreter is provided. 
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								f91fa79fc5 
								
							 
						 
						
							
							
								
								LibWasm: Use the current configuration to run call ops  
							
							... 
							
							
							
							This should make it easier to implement multiple types of interpreters
on top of a configuration, and also give a small speed boost in not
initialising as many Stack objects. 
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								bc936a5fac 
								
							 
						 
						
							
							
								
								LibWasm: Make Frame a value type as well  
							
							... 
							
							
							
							This means stack operations will no longer do extra allocations. 
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								73eb0785e0 
								
							 
						 
						
							
							
								
								LibWasm: Don't put values and labels in OwnPtrs  
							
							... 
							
							
							
							Doing that was causing a lot of malloc/free traffic, but since there's
no need to have a stable pointer to them, we can just store them by
value.
This makes execution significantly faster :^) 
							
						 
						
							2021-05-27 17:28:41 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								ba5da79617 
								
							 
						 
						
							
							
								
								LibWasm: Add execution hooks and a debugger mode to the wasm tool  
							
							... 
							
							
							
							This is useful for debugging *our* implementation of wasm :P 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								800bcb9965 
								
							 
						 
						
							
							
								
								LibWasm: Drop previous frame when a structured end instruction is run  
							
							
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								7966168fea 
								
							 
						 
						
							
							
								
								LibWasm: Turn memory read failures into traps  
							
							
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								c31a4e9013 
								
							 
						 
						
							
							
								
								LibWasm: Once more fix structured instruction label indices  
							
							... 
							
							
							
							This finally works correctly. ™️  
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								d05e5dbdcf 
								
							 
						 
						
							
							
								
								LibWasm: Drop the correct number of frames  
							
							... 
							
							
							
							Prior to this commit, we would be dropping an extra frame. 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								a21ebae652 
								
							 
						 
						
							
							
								
								LibWasm: Implement checked truncation instructions  
							
							... 
							
							
							
							This implements the 8 i<n>.truncate.f<n>_<s> instructions. 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								cf8b75c2e5 
								
							 
						 
						
							
							
								
								LibWasm+LibWeb: Partially resolve memory exports  
							
							... 
							
							
							
							This allows the JS side to access the wasm memory, assuming it's
exported by the module.
This can be used to draw stuff on the wasm side and display them from
the js side, for example :^) 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								4a459d2430 
								
							 
						 
						
							
							
								
								LibWasm: Correct memory init size when instantiating  
							
							... 
							
							
							
							These limits are in units of page size, not bytes.
Also fixes incorrect debug logs. 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								3926eab3b7 
								
							 
						 
						
							
							
								
								LibWasm+LibWeb: Implement (a very basic version of) the JS link/import  
							
							... 
							
							
							
							This allows Wasm code to call javascript functions. 
							
						 
						
							2021-05-26 15:34:13 +04:30 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								8cbdcffd05 
								
							 
						 
						
							
							
								
								LibWasm: Print instruction arguments too  
							
							
							
						 
						
							2021-05-21 00:15:23 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								207379165f 
								
							 
						 
						
							
							
								
								LibWasm: Fix nested structured instruction parsing  
							
							... 
							
							
							
							Previously, the ip would not be propagated correctly, and we would
produce invalid jumps when more than one level of nesting was involved.
This makes loops work :P 
							
						 
						
							2021-05-21 00:15:23 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								29b193d25d 
								
							 
						 
						
							
							
								
								LibWasm: Resolve labels starting from the top of the stack  
							
							... 
							
							
							
							Otherwise "label index 0" would be the first ever created label, not the
last one (as the spec wants) :^( 
							
						 
						
							2021-05-21 00:15:23 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								35b3ae26ed 
								
							 
						 
						
							
							
								
								LibWasm: Implement a very basic linker  
							
							... 
							
							
							
							This will simply "link" any given module instances and produce a list of
external values that can be used to instantiate a module.
Note that this is extremely basic and cannot resolve circular
dependencies, and depends on the instance order. 
							
						 
						
							2021-05-21 00:15:23 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Ali Mohammad Pur 
								
							 
						 
						
							
							
							
							
								
							
							
								3283c8a495 
								
							 
						 
						
							
							
								
								LibWasm: Make the instantiation process produce an OwnPtr  
							
							... 
							
							
							
							Managing the instantiated modules becomes a pain if they're on the
stack, since an instantiated module will eventually reference itself.
To make using this simpler, just avoid copying the instance. 
							
						 
						
							2021-05-21 00:15:23 +01:00