Reviewers: jbramley,

Message:
Hi Jacob, would you mind taking a look?

Description:
ARM: make sure that the expected code size is computed in predictable scope.

BUG=v8:4277
LOG=NO

Please review this at https://codereview.chromium.org/1251443002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+13, -5 lines):
  M src/arm/code-stubs-arm.cc
  M src/arm/full-codegen-arm.cc
  M src/arm/lithium-codegen-arm.cc
  M src/assembler.h
  M src/assembler.cc


Index: src/arm/code-stubs-arm.cc
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
index 005fb97513d0277325c9ff516612aeb922f1949c..2dcb53dd175f24968b775796febddf9df395dd0d 100644
--- a/src/arm/code-stubs-arm.cc
+++ b/src/arm/code-stubs-arm.cc
@@ -4667,8 +4667,9 @@ void VectorKeyedStoreICStub::GenerateImpl(MacroAssembler* masm, bool in_frame) {
 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
   if (masm->isolate()->function_entry_hook() != NULL) {
     ProfileEntryHookStub stub(masm->isolate());
-    int code_size = masm->CallStubSize(&stub) + 2 * Assembler::kInstrSize;
-    PredictableCodeSizeScope predictable(masm, code_size);
+    PredictableCodeSizeScope predictable(masm);
+    predictable.ExpectSize(masm->CallStubSize(&stub) +
+                           2 * Assembler::kInstrSize);
     __ push(lr);
     __ CallStub(&stub);
     __ pop(lr);
Index: src/arm/full-codegen-arm.cc
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc
index 476bd05e7395afa602c8b0e5b179ec7b0443b0b8..d9a6884fad1dbb68c46a2666f0665c453003adef 100644
--- a/src/arm/full-codegen-arm.cc
+++ b/src/arm/full-codegen-arm.cc
@@ -364,7 +364,8 @@ void FullCodeGenerator::Generate() {
       __ cmp(sp, Operand(ip));
       __ b(hs, &ok);
       Handle<Code> stack_check = isolate()->builtins()->StackCheck();
-      PredictableCodeSizeScope predictable(masm_,
+      PredictableCodeSizeScope predictable(masm_);
+      predictable.ExpectSize(
           masm_->CallSize(stack_check, RelocInfo::CODE_TARGET));
       __ Call(stack_check, RelocInfo::CODE_TARGET);
       __ bind(&ok);
Index: src/arm/lithium-codegen-arm.cc
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
index 04f6e6d9be480dd4703e9b8ef6317430cb3db021..a1534adb9b987ce6d074e1586b2d815024d1af1b 100644
--- a/src/arm/lithium-codegen-arm.cc
+++ b/src/arm/lithium-codegen-arm.cc
@@ -5801,8 +5801,8 @@ void LCodeGen::DoStackCheck(LStackCheck* instr) {
     __ cmp(sp, Operand(ip));
     __ b(hs, &done);
     Handle<Code> stack_check = isolate()->builtins()->StackCheck();
-    PredictableCodeSizeScope predictable(masm(),
-        CallCodeSize(stack_check, RelocInfo::CODE_TARGET));
+    PredictableCodeSizeScope predictable(masm());
+ predictable.ExpectSize(CallCodeSize(stack_check, RelocInfo::CODE_TARGET));
     DCHECK(instr->context()->IsRegister());
     DCHECK(ToRegister(instr->context()).is(cp));
     CallCode(stack_check, RelocInfo::CODE_TARGET, instr);
Index: src/assembler.cc
diff --git a/src/assembler.cc b/src/assembler.cc
index 70d35b0f21538b9ad8b589a4af640a733c51d9ff..6b08d34a24bd8dc74c21b52e1240e59898a6ab4b 100644
--- a/src/assembler.cc
+++ b/src/assembler.cc
@@ -158,6 +158,10 @@ AssemblerBase::~AssemblerBase() {
// -----------------------------------------------------------------------------
 // Implementation of PredictableCodeSizeScope

+PredictableCodeSizeScope::PredictableCodeSizeScope(AssemblerBase* assembler)
+    : PredictableCodeSizeScope(assembler, -1) {}
+
+
PredictableCodeSizeScope::PredictableCodeSizeScope(AssemblerBase* assembler,
                                                    int expected_size)
     : assembler_(assembler),
Index: src/assembler.h
diff --git a/src/assembler.h b/src/assembler.h
index 1b4c76540757a17de02e341327d7f4dacc812064..ee7026a8753466d7096686bbf664ee727368a696 100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -158,8 +158,10 @@ class DontEmitDebugCodeScope BASE_EMBEDDED {
 // snapshot and the running VM.
 class PredictableCodeSizeScope {
  public:
+  explicit PredictableCodeSizeScope(AssemblerBase* assembler);
   PredictableCodeSizeScope(AssemblerBase* assembler, int expected_size);
   ~PredictableCodeSizeScope();
+  void ExpectSize(int expected_size) { expected_size_ = expected_size; }

  private:
   AssemblerBase* assembler_;


--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to