2023-03-06 23:15:30 -08:00
|
|
|
module RubyVM::RJIT
|
2023-02-07 00:17:13 -08:00
|
|
|
# Branch shapes
|
|
|
|
Next0 = :Next0 # target0 is a fallthrough
|
|
|
|
Next1 = :Next1 # target1 is a fallthrough
|
|
|
|
Default = :Default # neither targets is a fallthrough
|
|
|
|
|
|
|
|
class BranchStub < Struct.new(
|
2023-03-06 23:15:30 -08:00
|
|
|
:iseq, # @param [RubyVM::RJIT::CPointer::Struct_rb_iseq_struct] Branch target ISEQ
|
2023-02-07 00:17:13 -08:00
|
|
|
:shape, # @param [Symbol] Next0, Next1, or Default
|
2023-03-06 23:15:30 -08:00
|
|
|
:target0, # @param [RubyVM::RJIT::BranchTarget] First branch target
|
|
|
|
:target1, # @param [RubyVM::RJIT::BranchTarget,NilClass] Second branch target (optional)
|
2023-02-07 00:17:13 -08:00
|
|
|
:compile, # @param [Proc] A callback to (re-)generate this branch stub
|
|
|
|
:start_addr, # @param [Integer] Stub source start address to be re-generated
|
|
|
|
:end_addr, # @param [Integer] Stub source end address to be re-generated
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
class BranchTarget < Struct.new(
|
|
|
|
:pc,
|
|
|
|
:ctx,
|
|
|
|
:address,
|
|
|
|
)
|
|
|
|
end
|
2023-01-07 13:21:14 -08:00
|
|
|
end
|