Simon Wanner
4e9edb8c53
LibJS/JIT: Compile the GetPrivateById instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
4ce2878394
LibJS/JIT: Compile the GetObjectPropertyIterator instruction
2023-10-29 22:57:19 +01:00
Jakub Berkop
6a7b9b85a4
LibJS/JIT: Compile the DeleteByValueWithThis instruction
2023-10-29 21:51:46 +01:00
Jakub Berkop
0776404e03
LibJS/JIT: Compile the DeleteByValue instruction
2023-10-29 21:51:46 +01:00
Jakub Berkop
f5fcd4596c
LibJS/JIT: Compile the DeleteById instruction
2023-10-29 21:51:46 +01:00
Simon Wanner
40064d872f
LibJS/JIT: Compile the Append instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
3dc5c8d28e
LibJS/JIT: Compile the IteratorToArray instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
c697ff61f6
LibJS/JIT: Compile the IteratorClose instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
233502a10c
LibJS/JIT: Compile the IteratorResultValue instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
e7fdf9c7e5
LibJS/JIT: Compile the ThrowIfNullish instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
9e2edc3085
LibJS/JIT: Compile the ThrowIfNotObject instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
39deb365d2
LibJS/JIT: Compile the IteratorResultDone instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
045a1386d8
LibJS/JIT: Compile the IteratorNext instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
4f8f8b7792
LibJS/JIT: Compile the GetIterator instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
d247744a3e
LibJS/JIT: Compile the SuperCallWithArgumentArray instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
09dce5f1bd
LibJS/JIT: Compile the BlockDeclarationInstantiation instruction
2023-10-29 17:36:09 +01:00
Simon Wanner
f89bfb3f27
LibJS/JIT: Declare compile_* methods using X macro
2023-10-29 17:36:09 +01:00
iliadsh
4f3945024a
LibJS/JIT: Add fast path for Add Int32, Int32
...
This uses the 32-bit registers to perform the addition and bail if the
overflow flag (OF) is set.
2023-10-29 08:02:00 +01:00
Simon Wanner
4b23a7dfb4
LibJS/JIT: Compile the NewClass bytecode instruction
2023-10-29 07:44:11 +01:00
Simon Wanner
224f92f6e4
LibJS/JIT: Compile the CreateVariable bytecode instruction
2023-10-29 07:44:11 +01:00
Simon Wanner
1d3062de9e
LibJS/JIT: Compile the ConcatString bytecode instruction
2023-10-29 07:44:11 +01:00
Simon Wanner
2cbc9d6970
LibJS/JIT: Consolidate exception handling code
...
Instead of emitting the lengthy exception checking/handling routine,
we only emit code for checking the presence of an exception and jump
to a common exception handler.
This code size optimization saves 2.08MiB on Kraken/ai-astar.js
2023-10-28 20:44:49 +02:00
Idan Horowitz
b2d8d0c270
LibJS: Compile the CallWithArgumentArray bytecode instruction
2023-10-28 20:27:16 +02:00
Idan Horowitz
2b65a80ecb
LibJS: Compile the NewBigInt bytecode instruction
2023-10-28 20:27:16 +02:00
Andreas Kling
9c0c672839
LibJS/JIT: Store the VM register array base in RBX
...
This allows us to use the displacement-less MOV encoding when accessing
register $0 (the accumulator).
This reduces code size by 158 KiB on Kraken/ai-astar.js :^)
2023-10-28 20:26:35 +02:00
Andreas Kling
926786e8d1
LibJS+LibJIT: Let users of JIT::Assembler handle caller-saved registers
...
Instead of JIT::Assembler making the decision for everyone and forcing
out every caller-saved register in the ABI onto the stack, we now leave
that decision to users of JIT::Assembler.
2023-10-28 18:20:07 +02:00
Andreas Kling
9afd12a8ba
LibJS/JIT: Consolidate exits from the jitted code
...
Instead of emitting the "restore callee-saved registers and return"
sequence again and again, just emit it once at the end of the generated
code, and have everyone jump to it.
This is a code size optimization that saves 207KiB on Kraken/ai-astar.js
2023-10-28 18:20:07 +02:00
Idan Horowitz
0768bf2623
LibJS: Execute the finalizer when returning from a try block in the JIT
...
This fixes 1 of the 2 remaining failing test-js tests.
2023-10-28 17:11:47 +02:00
Andreas Kling
c1551a64dc
LibJS/JIT: Compile the NewRegExp bytecode instruction
2023-10-27 19:07:22 +02:00
Andreas Kling
d6756decb9
LibJS/JIT: Compile the JumpNullish bytecode instruction
2023-10-27 19:07:22 +02:00
Andreas Kling
17b2c7d965
LibJS/JIT: Compile the TypeofLocal bytecode instruction
2023-10-27 19:07:22 +02:00
Andreas Kling
a645b9c6c3
LibJS/JIT: Stub out the JIT compiler on everything but ARCH(X86_64)
...
We don't support other architectures yet!
2023-10-27 19:07:22 +02:00
Andreas Kling
d1c701f79f
LibJS/JIT: Compile the Create/LeaveLexicalEnvironment instructions
2023-10-27 19:07:22 +02:00
Andreas Kling
935d67cfcf
LibJS/JIT: Compile the GetCalleeAndThisFromEnvironment instruction
2023-10-27 19:07:22 +02:00
Andreas Kling
dabaaabfc0
LibJS/JIT: Support the GetVariable bytecode instruction
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
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
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
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
7097169967
LibJS/JIT: Compile the PutByValue bytecode instruction
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
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
e946440ed3
LibJS/JIT: Compile the TypeofVariable bytecode instruction
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
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
3974ce2069
LibJS/JIT: Compile the GetGlobal bytecode instruction
2023-10-27 19:07:22 +02:00