Commit 1302c935 authored by Santiago Aboy Solanes's avatar Santiago Aboy Solanes Committed by Commit Bot

[ia32][builtins] Hoist up common load bytecode code

There is some code common to both wide and extra wide that we are
able to hoist up since they do not affect the flags after testing
to see which version to use.

Port of https://chromium-review.googlesource.com/c/v8/v8/+/1826725

Bug: v8:9771
Change-Id: I2e40a16b784a9666df4cc5ac3ec7e8c8df5fd146
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1847358Reviewed-by: 's avatarDan Elphick <delphick@chromium.org>
Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64184}
parent 73dbe9ac
...@@ -884,20 +884,21 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm, ...@@ -884,20 +884,21 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide)); static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
__ cmp(bytecode, Immediate(0x3)); __ cmp(bytecode, Immediate(0x3));
__ j(above, &process_bytecode, Label::kNear); __ j(above, &process_bytecode, Label::kNear);
// The code to load the next bytecode is common to both wide and extra wide.
// We can hoist them up here. inc has to happen before test since it
// modifies the ZF flag.
__ inc(bytecode_offset);
__ test(bytecode, Immediate(0x1)); __ test(bytecode, Immediate(0x1));
__ movzx_b(bytecode, Operand(bytecode_array, bytecode_offset, times_1, 0));
__ j(not_equal, &extra_wide, Label::kNear); __ j(not_equal, &extra_wide, Label::kNear);
// Load the next bytecode and update table to the wide scaled table. // Load the next bytecode and update table to the wide scaled table.
__ inc(bytecode_offset);
__ movzx_b(bytecode, Operand(bytecode_array, bytecode_offset, times_1, 0));
__ add(bytecode_size_table, __ add(bytecode_size_table,
Immediate(kIntSize * interpreter::Bytecodes::kBytecodeCount)); Immediate(kIntSize * interpreter::Bytecodes::kBytecodeCount));
__ jmp(&process_bytecode, Label::kNear); __ jmp(&process_bytecode, Label::kNear);
__ bind(&extra_wide); __ bind(&extra_wide);
// Load the next bytecode and update table to the extra wide scaled table. // Update table to the extra wide scaled table.
__ inc(bytecode_offset);
__ movzx_b(bytecode, Operand(bytecode_array, bytecode_offset, times_1, 0));
__ add(bytecode_size_table, __ add(bytecode_size_table,
Immediate(2 * kIntSize * interpreter::Bytecodes::kBytecodeCount)); Immediate(2 * kIntSize * interpreter::Bytecodes::kBytecodeCount));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment