Stephan Vedder
84eecbb10e
LibJS/JIT: Add fastpath for set variable
2023-11-19 22:36:07 +01:00
Idan Horowitz
f19349e1b6
LibJS: Instantiate primitive array expressions using a single operation
...
This will not meaningfully affect short array literals, but it does
give us a bit of extra perf when evaluating huge array expressions like
in Kraken/imaging-darkroom.js
2023-11-18 08:37:34 +01:00
Simon Wanner
86b85aa68b
LibJS: Introduce Builtins
...
Builtins are functions that can be detected during bytecode generation
and enable fast-paths in the JIT.
2023-11-17 19:06:25 +01:00
Andreas Kling
cfdb8a2756
LibJS/JIT: Update "unwind context" stack in JIT code
...
Until now, the unwind context stack has not been maintained by jitted
code, which meant we were unable to support the `with` statement.
This is a first step towards supporting that by making jitted code
call out to C++ to update the unwind context stack when entering/leaving
unwind contexts.
We also introduce a new "Catch" bytecode instruction that moves the
current exception into the accumulator. It's always emitted at the start
of a "catch" block.
2023-11-12 14:21:41 +01:00
Andreas Kling
298dfa96a4
LibJS: Remove unused members from EnterUnwindContext instruction
2023-11-12 14:21:41 +01:00
Andreas Kling
b6435ca280
LibJS: Unify bytecode instruction names with their helper names
2023-11-12 14:21:41 +01:00
Andreas Kling
b1b2ca1485
LibJS: Add basic monomorphic caching for PutById property access
...
This patch makes it possible for JS::Object::internal_set() to populate
a CacheablePropertyMetadata, and uses this to implement a basic
monomorphic cache for the most common form of property write access.
2023-11-09 16:02:14 +01:00
Simon Wanner
dd466ec83a
LibJS/Bytecode: Remove the PushDeclarativeEnvironment instruction
2023-11-03 07:31:11 +01:00
Simon Wanner
a2b0154661
LibJS/JIT: Compile the AsyncIteratorClose instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
ac59e982a9
LibJS/JIT: Compile the CopyObjectExcludingProperties instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
9494fbe670
LibJS/JIT: Compile the PutByValueWithThis instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
847889343f
LibJS/JIT: Compile the New##ErrorName instructions
2023-10-30 07:10:24 +01:00
Simon Wanner
a16082c6a5
LibJS/JIT: Compile the HasPrivateId instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
19045d6431
LibJS/JIT: Compile the GetMethod instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
c0c40110c1
LibJS/JIT: Compile the ImportCall instruction
2023-10-30 07:10:24 +01:00
Simon Wanner
ac43d3f6db
LibJS/JIT: Compile the PutPrivateById instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
81697549b7
LibJS/JIT: Compile the PutByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
38d5d7979b
LibJS/JIT: Compile the DeleteByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
b53277110e
LibJS/JIT: Compile the GetByValueWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
569ca57e22
LibJS/JIT: Compile the GetByIdWithThis instruction
2023-10-29 22:57:19 +01:00
Simon Wanner
4e9edb8c53
LibJS/JIT: Compile the GetPrivateById 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
c697ff61f6
LibJS/JIT: Compile the IteratorClose 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
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
Idan Horowitz
2b65a80ecb
LibJS: Compile the NewBigInt bytecode instruction
2023-10-28 20:27:16 +02:00
Andreas Kling
c1551a64dc
LibJS/JIT: Compile the NewRegExp 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
935d67cfcf
LibJS/JIT: Compile the GetCalleeAndThisFromEnvironment instruction
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
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
580249d650
LibJS/JIT: Compile the PutById bytecode instruction
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
e8190105db
LibJS/Bytecode: Move GetByValue implementation to CommonImplementations
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
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
babdc0a25b
LibJS: Work-in-progress JIT compiler :^)
2023-10-27 19:07:22 +02:00
Andreas Kling
2e23f00a2f
LibJS/Bytecode: Move environment coordinate caches to Executable
...
Moving them out of the respective instructions allows the bytecode
stream to be immutable.
2023-10-27 07:26:37 +02:00
Andreas Kling
887183cad6
LibJS: Remove last user of Op::Jump::set_targets() and API itself
...
This was just a matter of instantiating a BasicBlock earlier so we
can reference it when making the jump.
2023-09-28 14:52:03 +02:00
Andreas Kling
bdd21cf9db
LibJS: Remove almost all uses of Op::Jump::set_targets()
...
We should initialize jump targets when constructing the jump instruction
instead of doing it later. This was already the case in all construction
sites but one. This first patch converts all those sites to pass final
targets to the constructor directly.
2023-09-28 14:52:03 +02:00
Andreas Kling
f3606adc58
LibJS: Inline bytecode ops for direct local/register access
...
These can do a lot less stuff if we put them directly in the interpreter
loop and allow them to access the locals/registers arrays directly.
2023-09-28 06:09:16 +02:00