Skip to content

Commit 7a07d74

Browse files
hashseedCommit Bot
authored andcommitted
[interpreter] correctly advance over debug scaling prefixes.
[email protected], [email protected] Bug: chromium:835973 Change-Id: I35600e1da60bb6cd3b87cd1573791355e310aa9c Reviewed-on: https://chromium-review.googlesource.com/1032430 Commit-Queue: Yang Guo <[email protected]> Reviewed-by: Leszek Swirski <[email protected]> Reviewed-by: Ulan Degenbaev <[email protected]> Cr-Commit-Position: refs/heads/master@{#52933}
1 parent 01712bd commit 7a07d74

8 files changed

Lines changed: 342 additions & 29 deletions

File tree

src/builtins/arm/builtins-arm.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -857,9 +857,13 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
857857
Label process_bytecode, extra_wide;
858858
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
859859
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
860-
__ cmp(bytecode, Operand(0x1));
860+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
861+
STATIC_ASSERT(3 ==
862+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
863+
__ cmp(bytecode, Operand(0x3));
861864
__ b(hi, &process_bytecode);
862-
__ b(eq, &extra_wide);
865+
__ tst(bytecode, Operand(0x1));
866+
__ b(ne, &extra_wide);
863867

864868
// Load the next bytecode and update table to the wide scaled table.
865869
__ add(bytecode_offset, bytecode_offset, Operand(1));

src/builtins/arm64/builtins-arm64.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -940,9 +940,13 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
940940
Label process_bytecode, extra_wide;
941941
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
942942
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
943-
__ Cmp(bytecode, Operand(0x1));
943+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
944+
STATIC_ASSERT(3 ==
945+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
946+
__ Cmp(bytecode, Operand(0x3));
944947
__ B(hi, &process_bytecode);
945-
__ B(eq, &extra_wide);
948+
__ Tst(bytecode, Operand(0x1));
949+
__ B(ne, &extra_wide);
946950

947951
// Load the next bytecode and update table to the wide scaled table.
948952
__ Add(bytecode_offset, bytecode_offset, Operand(1));

src/builtins/ia32/builtins-ia32.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -796,9 +796,13 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
796796
Label process_bytecode, extra_wide;
797797
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
798798
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
799-
__ cmpb(bytecode, Immediate(0x1));
799+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
800+
STATIC_ASSERT(3 ==
801+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
802+
__ cmpb(bytecode, Immediate(0x3));
800803
__ j(above, &process_bytecode, Label::kNear);
801-
__ j(equal, &extra_wide, Label::kNear);
804+
__ test(bytecode, Immediate(0x1));
805+
__ j(not_equal, &extra_wide, Label::kNear);
802806

803807
// Load the next bytecode and update table to the wide scaled table.
804808
__ inc(bytecode_offset);

src/builtins/mips/builtins-mips.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -836,8 +836,12 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
836836
Label process_bytecode, extra_wide;
837837
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
838838
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
839-
__ Branch(&process_bytecode, hi, bytecode, Operand(1));
840-
__ Branch(&extra_wide, eq, bytecode, Operand(1));
839+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
840+
STATIC_ASSERT(3 ==
841+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
842+
__ Branch(&process_bytecode, hi, bytecode, Operand(3));
843+
__ And(scratch2, bytecode, Operand(1));
844+
__ Branch(&extra_wide, ne, scratch2, Operand(zero_reg));
841845

842846
// Load the next bytecode and update table to the wide scaled table.
843847
__ Addu(bytecode_offset, bytecode_offset, Operand(1));

src/builtins/mips64/builtins-mips64.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -833,8 +833,12 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
833833
Label process_bytecode, extra_wide;
834834
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
835835
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
836-
__ Branch(&process_bytecode, hi, bytecode, Operand(1));
837-
__ Branch(&extra_wide, eq, bytecode, Operand(1));
836+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
837+
STATIC_ASSERT(3 ==
838+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
839+
__ Branch(&process_bytecode, hi, bytecode, Operand(3));
840+
__ And(scratch2, bytecode, Operand(1));
841+
__ Branch(&extra_wide, ne, scratch2, Operand(zero_reg));
838842

839843
// Load the next bytecode and update table to the wide scaled table.
840844
__ Daddu(bytecode_offset, bytecode_offset, Operand(1));

src/builtins/x64/builtins-x64.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,9 +859,13 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm,
859859
Label process_bytecode, extra_wide;
860860
STATIC_ASSERT(0 == static_cast<int>(interpreter::Bytecode::kWide));
861861
STATIC_ASSERT(1 == static_cast<int>(interpreter::Bytecode::kExtraWide));
862-
__ cmpb(bytecode, Immediate(0x1));
862+
STATIC_ASSERT(2 == static_cast<int>(interpreter::Bytecode::kDebugBreakWide));
863+
STATIC_ASSERT(3 ==
864+
static_cast<int>(interpreter::Bytecode::kDebugBreakExtraWide));
865+
__ cmpb(bytecode, Immediate(0x3));
863866
__ j(above, &process_bytecode, Label::kNear);
864-
__ j(equal, &extra_wide, Label::kNear);
867+
__ testb(bytecode, Immediate(0x1));
868+
__ j(not_equal, &extra_wide, Label::kNear);
865869

866870
// Load the next bytecode and update table to the wide scaled table.
867871
__ incl(bytecode_offset);

src/interpreter/bytecodes.h

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,23 @@ namespace interpreter {
2828
V(Wide, AccumulatorUse::kNone) \
2929
V(ExtraWide, AccumulatorUse::kNone) \
3030
\
31+
/* Debug Breakpoints - one for each possible size of unscaled bytecodes */ \
32+
/* and one for each operand widening prefix bytecode */ \
33+
V(DebugBreakWide, AccumulatorUse::kReadWrite) \
34+
V(DebugBreakExtraWide, AccumulatorUse::kReadWrite) \
35+
V(DebugBreak0, AccumulatorUse::kReadWrite) \
36+
V(DebugBreak1, AccumulatorUse::kReadWrite, OperandType::kReg) \
37+
V(DebugBreak2, AccumulatorUse::kReadWrite, OperandType::kReg, \
38+
OperandType::kReg) \
39+
V(DebugBreak3, AccumulatorUse::kReadWrite, OperandType::kReg, \
40+
OperandType::kReg, OperandType::kReg) \
41+
V(DebugBreak4, AccumulatorUse::kReadWrite, OperandType::kReg, \
42+
OperandType::kReg, OperandType::kReg, OperandType::kReg) \
43+
V(DebugBreak5, AccumulatorUse::kReadWrite, OperandType::kRuntimeId, \
44+
OperandType::kReg, OperandType::kReg) \
45+
V(DebugBreak6, AccumulatorUse::kReadWrite, OperandType::kRuntimeId, \
46+
OperandType::kReg, OperandType::kReg, OperandType::kReg) \
47+
\
3148
/* Loading the accumulator */ \
3249
V(LdaZero, AccumulatorUse::kWrite) \
3350
V(LdaSmi, AccumulatorUse::kWrite, OperandType::kImm) \
@@ -328,23 +345,6 @@ namespace interpreter {
328345
/* Debugger */ \
329346
V(Debugger, AccumulatorUse::kNone) \
330347
\
331-
/* Debug Breakpoints - one for each possible size of unscaled bytecodes */ \
332-
/* and one for each operand widening prefix bytecode */ \
333-
V(DebugBreak0, AccumulatorUse::kReadWrite) \
334-
V(DebugBreak1, AccumulatorUse::kReadWrite, OperandType::kReg) \
335-
V(DebugBreak2, AccumulatorUse::kReadWrite, OperandType::kReg, \
336-
OperandType::kReg) \
337-
V(DebugBreak3, AccumulatorUse::kReadWrite, OperandType::kReg, \
338-
OperandType::kReg, OperandType::kReg) \
339-
V(DebugBreak4, AccumulatorUse::kReadWrite, OperandType::kReg, \
340-
OperandType::kReg, OperandType::kReg, OperandType::kReg) \
341-
V(DebugBreak5, AccumulatorUse::kReadWrite, OperandType::kRuntimeId, \
342-
OperandType::kReg, OperandType::kReg) \
343-
V(DebugBreak6, AccumulatorUse::kReadWrite, OperandType::kRuntimeId, \
344-
OperandType::kReg, OperandType::kReg, OperandType::kReg) \
345-
V(DebugBreakWide, AccumulatorUse::kReadWrite) \
346-
V(DebugBreakExtraWide, AccumulatorUse::kReadWrite) \
347-
\
348348
/* Block Coverage */ \
349349
V(IncBlockCounter, AccumulatorUse::kNone, OperandType::kIdx) \
350350
\

0 commit comments

Comments
 (0)