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

Reply via email to