Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 83e85f875a707c58a94138d4e6cca9aae8b41e97
https://github.com/WebKit/WebKit/commit/83e85f875a707c58a94138d4e6cca9aae8b41e97
Author: Yusuke Suzuki <[email protected]>
Date: 2026-05-15 (Fri, 15 May 2026)
Changed paths:
M Source/JavaScriptCore/bytecode/InstructionStream.h
M Source/JavaScriptCore/bytecompiler/BytecodeGeneratorBase.h
M Source/JavaScriptCore/bytecompiler/BytecodeGeneratorBaseInlines.h
M Source/JavaScriptCore/generator/Argument.rb
M Source/JavaScriptCore/generator/Fits.rb
M Source/JavaScriptCore/generator/Opcode.rb
Log Message:
-----------
[JSC] Simplify bytecode writer
https://bugs.webkit.org/show_bug.cgi?id=314878
rdar://177142767
Reviewed by Keith Miller.
Currently bytecode writer generated by a script is emitting things like,
```
gen->write(Fits<OpcodeID, OpcodeIDWidthBySize<JSOpcodeTraits,
__size>::opcodeIDSize>::convert(opcodeID));
gen->write(Fits<VirtualRegister, __size>::convert(dst));
gen->write(Fits<VirtualRegister, __size>::convert(scope));
gen->write(Fits<unsigned, __size>::convert(var));
gen->write(Fits<GetPutInfo, __size>::convert(getPutInfo));
gen->write(Fits<unsigned, __size>::convert(localScopeDepth));
gen->write(Fits<unsigned, __size>::convert(offset));
gen->write(Fits<unsigned, __size>::convert(valueProfile));
gen->write(Fits<unsigned, __size>::convert(__metadataID));
```
and each write function is checking capacity and writing byte. And we
are checking for each byte. So this is slow. Instead, we generate things
like,
```
gen->template writeOpcode<__size>(opcodeID, message, errorType);
```
and this function will use variadic-templatized `write` function which
accumulate necessary size, reserve region and emit them via
WTF::unalignedStore.
```
m_writer.write(
Fits<OpcodeIDType, opcodeIDSize>::convert(opcodeID),
Fits<Ops, size>::convert(ops)...);
```
This is significantly faster for JS code which generates huge amount of
bytecode.
* Source/JavaScriptCore/bytecode/InstructionStream.h:
(JSC::InstructionStreamWriter::write):
(JSC::InstructionStreamWriter::reserve):
* Source/JavaScriptCore/bytecompiler/BytecodeGeneratorBase.h:
(JSC::BytecodeGeneratorBase::write):
* Source/JavaScriptCore/bytecompiler/BytecodeGeneratorBaseInlines.h:
(JSC::BytecodeGeneratorBase<Traits>::writeOpcode):
(JSC::BytecodeGeneratorBase<Traits>::write): Deleted.
* Source/JavaScriptCore/generator/Argument.rb:
* Source/JavaScriptCore/generator/Fits.rb:
* Source/JavaScriptCore/generator/Opcode.rb:
Canonical link: https://commits.webkit.org/313312@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications