Store compact cache indexes in bytecode instructions instead of raw pointers to the executable cache vectors. This keeps the instruction stream independent from heap addresses and removes pointer fixups when materializing cached bytecode. Resolve the mutable cache pointers at execution time from the current Executable. Bytecode test expectations are updated for the smaller cache operands and resulting instruction offsets.
162 lines
4.4 KiB
Text
162 lines
4.4 KiB
Text
$78a7573a optional-chain.js:25:1
|
|
Registers: 8
|
|
Blocks: 1
|
|
Constants:
|
|
[0] = Undefined
|
|
[1] = Null
|
|
|
|
block0:
|
|
[ 0] GetGlobal dst:reg6, `member`
|
|
[ 10] Call dst:reg5, callee:reg6, this_value:Undefined, member, arguments:[Null]
|
|
[ 38] GetGlobal dst:reg7, `nested_member`
|
|
[ 48] Call dst:reg6, callee:reg7, this_value:Undefined, nested_member, arguments:[Null]
|
|
[ 70] GetGlobal dst:reg7, `call_no_args`
|
|
[ 80] Call dst:reg5, callee:reg7, this_value:Undefined, call_no_args, arguments:[Null]
|
|
[ a8] GetGlobal dst:reg7, `call_with_args`
|
|
[ b8] Call dst:reg6, callee:reg7, this_value:Undefined, call_with_args, arguments:[Null]
|
|
[ e0] GetGlobal dst:reg7, `computed`
|
|
[ f0] Call dst:reg5, callee:reg7, this_value:Undefined, computed, arguments:[Null]
|
|
[ 118] GetGlobal dst:reg7, `member_then_call`
|
|
[ 128] Call dst:reg6, callee:reg7, this_value:Undefined, member_then_call, arguments:[Null]
|
|
[ 150] End value:reg6
|
|
|
|
|
|
member$36eb39cf optional-chain.js:7:5
|
|
Registers: 7
|
|
Blocks: 3
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `x`
|
|
[ 68] Return value:reg6
|
|
|
|
|
|
nested_member$85d10998 optional-chain.js:10:5
|
|
Registers: 7
|
|
Blocks: 4
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `x`
|
|
[ 68] JumpNullish condition:reg6, true_target:block1, false_target:block3
|
|
|
|
block3:
|
|
[ 78] Mov dst:reg5, src:reg6
|
|
[ 88] GetById dst:reg6, base:reg6, `y`
|
|
[ a0] Return value:reg6
|
|
|
|
|
|
call_no_args$70a09739 optional-chain.js:13:5
|
|
Registers: 8
|
|
Blocks: 3
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `foo`
|
|
[ 68] NewArray dst:reg7
|
|
[ 78] CallWithArgumentArray dst:reg6, callee:reg6, this_value:reg5, arguments:reg7
|
|
[ 90] Mov dst:reg5, src:Undefined
|
|
[ a0] Return value:reg6
|
|
|
|
|
|
call_with_args$b7c2071f optional-chain.js:16:5
|
|
Registers: 11
|
|
Blocks: 3
|
|
Constants:
|
|
[0] = Undefined
|
|
[1] = Int32(1)
|
|
[2] = Int32(2)
|
|
[3] = Int32(3)
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `foo`
|
|
[ 68] Mov3 dst1:reg8, src1:Int32(1), dst2:reg9, src2:Int32(2), dst3:reg10, src3:Int32(3)
|
|
[ 88] NewArray dst:reg7, elements:[reg8, reg9, reg10]
|
|
[ a8] CallWithArgumentArray dst:reg6, callee:reg6, this_value:reg5, arguments:reg7
|
|
[ c0] Mov dst:reg5, src:Undefined
|
|
[ d0] Return value:reg6
|
|
|
|
|
|
computed$9ef8515a optional-chain.js:19:5
|
|
Registers: 7
|
|
Blocks: 3
|
|
Constants:
|
|
[0] = Undefined
|
|
[1] = String("hello")
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `hello`
|
|
[ 68] Return value:reg6
|
|
|
|
|
|
member_then_call$b60035e3 optional-chain.js:22:5
|
|
Registers: 8
|
|
Blocks: 3
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] Mov2 dst1:reg5, src1:Undefined, dst2:reg6, src2:arg0
|
|
[ 18] JumpNullish condition:reg6, true_target:block1, false_target:block2
|
|
|
|
block1:
|
|
[ 28] Mov dst:reg6, src:Undefined
|
|
[ 38] Return value:reg6
|
|
|
|
block2:
|
|
[ 40] Mov dst:reg5, src:reg6
|
|
[ 50] GetById dst:reg6, base:reg6, `x`
|
|
[ 68] Mov dst:reg5, src:reg6
|
|
[ 78] GetById dst:reg6, base:reg6, `foo`
|
|
[ 90] NewArray dst:reg7
|
|
[ a0] CallWithArgumentArray dst:reg6, callee:reg6, this_value:reg5, arguments:reg7
|
|
[ b8] Mov dst:reg5, src:Undefined
|
|
[ c8] Return value:reg6
|