ladybird/Userland/Libraries/LibJS/Bytecode
Andreas Kling 021a141b53 LibJS: Make array-like Put access on ordinary objects much faster
This patch adds a fast path to the PutByValue bytecode op that bypasses
a ton of things *if* a set of assumptions hold:

- The property key must be a non-negative Int32
- The base object must not interfere with indexed property access
- The base object must have simple indexed property storage
- The property key must already be present as an own property
- The existing value must not have any accessors defined

If this holds (which it should in many common cases), we can skip all
kinds of checks and poke directly at the property storage, saving time.

16% speed-up on the entire Kraken benchmark :^)
(including: 88% speed-up on Kraken/imaging-desaturate.js)
(including: 55% speed-up on Kraken/audio-fft.js)
(including: 54% speed-up on Kraken/audio-beat-detection.js)
2023-10-05 16:57:45 +02:00
..
ASTCodegen.cpp LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
BasicBlock.cpp LibJS: Pad the capacity of BasicBlock while growing it 2023-09-30 09:33:11 +02:00
BasicBlock.h LibJS: Use a Vector<u8> for BasicBlock instruction storage 2023-09-28 11:25:19 +02:00
CodeGenerationError.cpp LibJS: Add to_string definitions to CodeGenerationError and ParserError 2023-02-17 09:14:23 -05:00
CodeGenerationError.h LibJS: Remove unused CodeGenerationError::to_deprecated_string 2023-02-17 09:14:23 -05:00
Executable.cpp LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Executable.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Generator.cpp LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
Generator.h LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
IdentifierTable.cpp LibJS: Don't worry about deduplicating bytecode string tables 2023-10-04 20:10:12 +02:00
IdentifierTable.h AK+Everywhere: Rename FlyString to DeprecatedFlyString 2023-01-09 23:00:24 +00:00
Instruction.cpp LibJS: Add file & line number to bytecode VM stack traces :^) 2023-09-02 15:37:53 +02:00
Instruction.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Interpreter.cpp LibJS: Make array-like Put access on ordinary objects much faster 2023-10-05 16:57:45 +02:00
Interpreter.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Label.h Everywhere: Add sv suffix to strings relying on StringView(char const*) 2022-07-12 23:11:35 +02:00
Op.h LibJS: Remove last user of Op::Jump::set_targets() and API itself 2023-09-28 14:52:03 +02:00
RegexTable.cpp LibJS/Bytecode: Don't reparse regular expressions on instantiation 2023-07-13 13:30:49 +02:00
RegexTable.h LibJS/Bytecode: Don't reparse regular expressions on instantiation 2023-07-13 13:30:49 +02:00
Register.h LibJS: Keep return value in a call frame register 2023-09-28 06:09:16 +02:00
StringTable.cpp LibJS: Don't worry about deduplicating bytecode string tables 2023-10-04 20:10:12 +02:00
StringTable.h AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00