Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b43e38112c 
								
							 
						 
						
							
							
								
								LibJS/JIT: Use JIT::Assembler::jump_if_zero() to improve code size  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								5b87d26027 
								
							 
						 
						
							
							
								
								LibJIT+LibJS: Move JIT::Assembler into a new LibJIT library  
							
							... 
							
							
							
							This will allow other parts of the system to generate machine code
at runtime. :^) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								bfb527e614 
								
							 
						 
						
							
							
								
								LibJS/JIT: Call throw_if_needed_for_call() in cxx_call()  
							
							... 
							
							
							
							This allows test-js to run to completion (although we do still have
some bugs to track down.) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								bcf7cdb679 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Un-templatize throw_if_needed_for_call()  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								72c31fdd01 
								
							 
						 
						
							
							
								
								LibJS: Remove all interactions between Assembler and BasicBlock  
							
							... 
							
							
							
							With this change, Assembler is now free from LibJS concepts and could
move out to its own apartment. :^) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								022974a43a 
								
							 
						 
						
							
							
								
								LibJS/JIT: Let Compiler keep per-BasicBlock state internally  
							
							... 
							
							
							
							Compiler now has a BasicBlockData struct for each BasicBlock. The struct
contains all the stuff that we previously stored with the
Bytecode::BasicBlock. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								8a24d00b1a 
								
							 
						 
						
							
							
								
								LibJS/JIT: Preserve the accumulator across PutByFoo  
							
							... 
							
							
							
							This ensures that we don't clobber the accumulator when putting a value
to a setter. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								5bd93f34af 
								
							 
						 
						
							
							
								
								LibJS/JIT: Sign-extend integers before comparing in LessThan fast path  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								4b7f5f4ae7 
								
							 
						 
						
							
							
								
								LibJS/JIT: Allow multiple jumps to the same Assembler::Label  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								1fb95c7df9 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add fast path for LessThan Int32 < Int32  
							
							... 
							
							
							
							This uses a new branch_if_both_int32() helper.
It's interesting to note that we can compare encoded Int32 values
without stripping the INT32_TAG, since it doesn't affect signedness
of values. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								895c613400 
								
							 
						 
						
							
							
								
								LibJS/JIT: Fix encoding of CMP reg,reg  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								ea65214c57 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add fast path for Increment with Int32 value  
							
							... 
							
							
							
							This uses a new branch_if_int32() mechanism that takes a code generating
lambda whose code will run if the input register is an Int32 JS::Value. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								aeb9bd3bf1 
								
							 
						 
						
							
							
								
								LibJS/JIT: Fix encoding of x86_64 AND reg, reg  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e4c4fb09f9 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add fast path for the ResolveThisBinding codegen  
							
							... 
							
							
							
							We now generate a fast path for cached `this` values. The first time
`this` is resolved within a function, we call out to C++, but then
all subsequent accesses will hit the cache in Register::this_value(). 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								7097169967 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the PutByValue bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								c2aad0f573 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move PutByValue impl to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								9c93d100d1 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the NewFunction bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								9f61cda27e 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move NewFunction impl into CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								a913ac5799 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the NewArray bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								6a16783c66 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the SetVariable bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								393d90abe1 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move SetVariable implementation to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e946440ed3 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the TypeofVariable bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								d368dc5d25 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move TypeofVariable impl to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								c65aecd878 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile all the unary bytecode instructions  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								640455b1d2 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the Call bytecode instruction  
							
							... 
							
							
							
							I've left a FIXME about dealing with some throwsy cases. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								7fc35fde09 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move throw_if_needed_for_call to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b56ecc7e34 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move perform_call helper to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								d866780235 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the NewObject bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								580249d650 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the PutById bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								10bf25999c 
								
							 
						 
						
							
							
								
								LibJS/JIT: Move VM pointers from R8,R9,R10 to R13,R14,R15  
							
							... 
							
							
							
							This way they don't clash with the SysV ABI function argument registers. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								decc221109 
								
							 
						 
						
							
							
								
								LibJS/JIT: Save and restore callee-saved registers in jitted code  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								3974ce2069 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the GetGlobal bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								12898f5aef 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the Decrement bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								966b6f78a6 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the GetByValue bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e8190105db 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Move GetByValue implementation to CommonImplementations  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								1c0efbec6b 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the ResolveThisBinding bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b2602a4bae 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the ToNumeric bytecode instruction  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								0f735b3502 
								
							 
						 
						
							
							
								
								LibJS/JIT: Log both success and failure from the JIT compiler  
							
							... 
							
							
							
							These logs will eventually go away, once the JIT compiler can always
compile everything. :^) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								310bcd4717 
								
							 
						 
						
							
							
								
								LibJS/JIT: Don't keep trying to JIT unsupported bytecode executables  
							
							... 
							
							
							
							We now only try jitting each Bytecode::Executable once, and then cache
the resulting NativeExecutable. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								6a6ef6670c 
								
							 
						 
						
							
							
								
								LibJS/JIT: Support the GetById bytecode op  
							
							... 
							
							
							
							We can now do basic property (get) access in jitted code! :^) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								8905682a16 
								
							 
						 
						
							
							
								
								LibJS/Bytecode: Begin moving shareable (JIT+Interpreter) stuff somewhere  
							
							... 
							
							
							
							There are a lot of native C++ functions that will be used by both the
bytecode interpreter and jitted code. Let's put them in their own file
instead of having them in Interpreter.cpp. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								b923ca392d 
								
							 
						 
						
							
							
								
								LibJS/JIT: Support all the binary bytecode ops :^)  
							
							... 
							
							
							
							(And use the X macro to avoid repeating ourselves!) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								c2fe7af095 
								
							 
						 
						
							
							
								
								LibJS/JIT: Support the NewString bytecode op  
							
							... 
							
							
							
							This necessitated making the JIT::Compiler aware of the current
Bytecode::Executable, since that's where all the string literals are
held, but that seems like a good thing. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								efe58ebf2f 
								
							 
						 
						
							
							
								
								LibJS/JIT: Support the Return bytecode op  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								45be2a8f72 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add support for Add/Sub/Mul/Div bytecode ops  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Geo25rey 
								
							 
						 
						
							
							
							
							
								
							
							
								891b071654 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add support for "throw" keyword  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								ed0d2bce83 
								
							 
						 
						
							
							
								
								LibJS/JIT: Handle exceptions in LessThan :^)  
							
							
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								9dd5be0186 
								
							 
						 
						
							
							
								
								LibJS/JIT: Compile the EnterUnwindContext and LeaveUnwindContext ops  
							
							... 
							
							
							
							These push a "valid" unwind context on the stack and check_exception()
now knows how to jump to the (catch) handler if present.
(finally) finalizers will require some more work, but with this change,
we now have basic support for try...catch. :^) 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								9d35016284 
								
							 
						 
						
							
							
								
								LibJS/JIT: Add Assembler::jump(Operand) and verify_not_reached()  
							
							... 
							
							
							
							Yet another jump() overload, and also a way to crash if we end up
somewhere we shouldn't be while in jitted code. 
							
						 
						
							2023-10-27 19:07:22 +02:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andreas Kling 
								
							 
						 
						
							
							
							
							
								
							
							
								e3560c2545 
								
							 
						 
						
							
							
								
								LibJS/JIT: Propagate exceptions in the simplest case :^)  
							
							... 
							
							
							
							We now establish a stack of "unwind contexts" similar to what the
bytecode interpreter does, but here, it's a stack of structs with
addresses to the catch and finally blocks.
Unwind contexts also have a "valid" flag, and the root unwind context
(always present, pushed on JIT code entry) has valid=false, which we
interpret in check_exception() as "return and let our caller deal with
the exception".
Anything in Compiler that may generate an exception should now also
call check_exception() ASAP to emit the code for handling this. 
							
						 
						
							2023-10-27 19:07:22 +02:00