Revision: 3454
Author: [email protected]
Date: Fri Dec 11 02:40:01 2009
Log: Give the binary op stubs better names to make profiles more  
informative.
Review URL: http://codereview.chromium.org/488017
http://code.google.com/p/v8/source/detail?r=3454

Modified:
  /branches/bleeding_edge/src/arm/codegen-arm.cc
  /branches/bleeding_edge/src/arm/codegen-arm.h
  /branches/bleeding_edge/src/bootstrapper.cc
  /branches/bleeding_edge/src/bootstrapper.h
  /branches/bleeding_edge/src/ia32/codegen-ia32.cc
  /branches/bleeding_edge/src/ia32/codegen-ia32.h
  /branches/bleeding_edge/src/token.cc
  /branches/bleeding_edge/src/token.h
  /branches/bleeding_edge/src/x64/codegen-x64.cc
  /branches/bleeding_edge/src/x64/codegen-x64.h

=======================================
--- /branches/bleeding_edge/src/arm/codegen-arm.cc      Wed Dec  9 03:14:45 2009
+++ /branches/bleeding_edge/src/arm/codegen-arm.cc      Fri Dec 11 02:40:01 2009
@@ -5678,6 +5678,29 @@
        *required_shift = 0;
    }
  }
+
+
+const char* GenericBinaryOpStub::GetName() {
+  if (name_ != NULL) return name_;
+  const int len = 100;
+  name_ = Bootstrapper::AllocateAutoDeletedArray(len);
+  if (name_ == NULL) return "OOM";
+  const char* op_name = Token::Name(op_);
+  const char* overwrite_name;
+  switch (mode_) {
+    case NO_OVERWRITE: overwrite_name = "Alloc"; break;
+    case OVERWRITE_RIGHT: overwrite_name = "OverwriteRight"; break;
+    case OVERWRITE_LEFT: overwrite_name = "OverwriteLeft"; break;
+    default: overwrite_name = "UnknownOverwrite"; break;
+  }
+
+  OS::SNPrintF(Vector<char>(name_, len),
+               "GenericBinaryOpStub_%s_%s%s",
+               op_name,
+               overwrite_name,
+               specialized_on_rhs_ ? "_ConstantRhs" : 0);
+  return name_;
+}


  void GenericBinaryOpStub::Generate(MacroAssembler* masm) {
=======================================
--- /branches/bleeding_edge/src/arm/codegen-arm.h       Wed Dec  2 23:56:21 2009
+++ /branches/bleeding_edge/src/arm/codegen-arm.h       Fri Dec 11 02:40:01 2009
@@ -455,13 +455,15 @@
        : op_(op),
          mode_(mode),
          constant_rhs_(constant_rhs),
-        specialized_on_rhs_(RhsIsOneWeWantToOptimizeFor(op, constant_rhs))  
{ }
+        specialized_on_rhs_(RhsIsOneWeWantToOptimizeFor(op, constant_rhs)),
+        name_(NULL) { }

   private:
    Token::Value op_;
    OverwriteMode mode_;
    int constant_rhs_;
    bool specialized_on_rhs_;
+  char* name_;

    static const int kMaxKnownRhs = 0x40000000;

@@ -506,22 +508,7 @@
      return key;
    }

-  const char* GetName() {
-    switch (op_) {
-      case Token::ADD: return "GenericBinaryOpStub_ADD";
-      case Token::SUB: return "GenericBinaryOpStub_SUB";
-      case Token::MUL: return "GenericBinaryOpStub_MUL";
-      case Token::DIV: return "GenericBinaryOpStub_DIV";
-      case Token::MOD: return "GenericBinaryOpStub_MOD";
-      case Token::BIT_OR: return "GenericBinaryOpStub_BIT_OR";
-      case Token::BIT_AND: return "GenericBinaryOpStub_BIT_AND";
-      case Token::BIT_XOR: return "GenericBinaryOpStub_BIT_XOR";
-      case Token::SAR: return "GenericBinaryOpStub_SAR";
-      case Token::SHL: return "GenericBinaryOpStub_SHL";
-      case Token::SHR: return "GenericBinaryOpStub_SHR";
-      default:         return "GenericBinaryOpStub";
-    }
-  }
+  const char* GetName();

  #ifdef DEBUG
    void Print() {
=======================================
--- /branches/bleeding_edge/src/bootstrapper.cc Tue Dec  1 06:36:45 2009
+++ /branches/bleeding_edge/src/bootstrapper.cc Fri Dec 11 02:40:01 2009
@@ -95,6 +95,8 @@
  static SourceCodeCache extensions_cache(Script::TYPE_EXTENSION);
  // This is for delete, not delete[].
  static List<char*>* delete_these_non_arrays_on_tear_down = NULL;
+// This is for delete[]
+static List<char*>* delete_these_arrays_on_tear_down = NULL;


  NativesExternalStringResource::NativesExternalStringResource(const char*  
source)
@@ -148,6 +150,18 @@
    natives_cache.Initialize(create_heap_objects);
    extensions_cache.Initialize(create_heap_objects);
  }
+
+
+char* Bootstrapper::AllocateAutoDeletedArray(int bytes) {
+  char* memory = new char[bytes];
+  if (memory != NULL) {
+    if (delete_these_arrays_on_tear_down == NULL) {
+      delete_these_arrays_on_tear_down = new List<char*>(2);
+    }
+    delete_these_arrays_on_tear_down->Add(memory);
+  }
+  return memory;
+}


  void Bootstrapper::TearDown() {
@@ -156,10 +170,22 @@
      ASSERT(len < 20);  // Don't use this mechanism for unbounded  
allocations.
      for (int i = 0; i < len; i++) {
        delete delete_these_non_arrays_on_tear_down->at(i);
+      delete_these_non_arrays_on_tear_down->at(i) = NULL;
      }
      delete delete_these_non_arrays_on_tear_down;
      delete_these_non_arrays_on_tear_down = NULL;
    }
+
+  if (delete_these_arrays_on_tear_down != NULL) {
+    int len = delete_these_arrays_on_tear_down->length();
+    ASSERT(len < 1000);  // Don't use this mechanism for unbounded  
allocations.
+    for (int i = 0; i < len; i++) {
+      delete[] delete_these_arrays_on_tear_down->at(i);
+      delete_these_arrays_on_tear_down->at(i) = NULL;
+    }
+    delete delete_these_arrays_on_tear_down;
+    delete_these_arrays_on_tear_down = NULL;
+  }

    natives_cache.Initialize(false);  // Yes, symmetrical
    extensions_cache.Initialize(false);
=======================================
--- /branches/bleeding_edge/src/bootstrapper.h  Mon Nov  9 05:30:50 2009
+++ /branches/bleeding_edge/src/bootstrapper.h  Fri Dec 11 02:40:01 2009
@@ -74,6 +74,10 @@
    static char* ArchiveState(char* to);
    static char* RestoreState(char* from);
    static void FreeThreadResources();
+
+  // This will allocate a char array that is deleted when V8 is shut down.
+  // It should only be used for strictly finite allocations.
+  static char* AllocateAutoDeletedArray(int bytes);
  };


=======================================
--- /branches/bleeding_edge/src/ia32/codegen-ia32.cc    Wed Dec  9 01:35:41  
2009
+++ /branches/bleeding_edge/src/ia32/codegen-ia32.cc    Fri Dec 11 02:40:01  
2009
@@ -763,19 +763,27 @@


  const char* GenericBinaryOpStub::GetName() {
-  switch (op_) {
-    case Token::ADD: return "GenericBinaryOpStub_ADD";
-    case Token::SUB: return "GenericBinaryOpStub_SUB";
-    case Token::MUL: return "GenericBinaryOpStub_MUL";
-    case Token::DIV: return "GenericBinaryOpStub_DIV";
-    case Token::BIT_OR: return "GenericBinaryOpStub_BIT_OR";
-    case Token::BIT_AND: return "GenericBinaryOpStub_BIT_AND";
-    case Token::BIT_XOR: return "GenericBinaryOpStub_BIT_XOR";
-    case Token::SAR: return "GenericBinaryOpStub_SAR";
-    case Token::SHL: return "GenericBinaryOpStub_SHL";
-    case Token::SHR: return "GenericBinaryOpStub_SHR";
-    default:         return "GenericBinaryOpStub";
-  }
+  if (name_ != NULL) return name_;
+  const int len = 100;
+  name_ = Bootstrapper::AllocateAutoDeletedArray(len);
+  if (name_ == NULL) return "OOM";
+  const char* op_name = Token::Name(op_);
+  const char* overwrite_name;
+  switch (mode_) {
+    case NO_OVERWRITE: overwrite_name = "Alloc"; break;
+    case OVERWRITE_RIGHT: overwrite_name = "OverwriteRight"; break;
+    case OVERWRITE_LEFT: overwrite_name = "OverwriteLeft"; break;
+    default: overwrite_name = "UnknownOverwrite"; break;
+  }
+
+  OS::SNPrintF(Vector<char>(name_, len),
+               "GenericBinaryOpStub_%s_%s%s_%s%s",
+               op_name,
+               overwrite_name,
+               (flags_ & NO_SMI_CODE_IN_STUB) ? "_NoSmiInStub" : "",
+               args_in_registers_ ? "RegArgs" : "StackArgs",
+               args_reversed_ ? "_R" : "");
+  return name_;
  }


=======================================
--- /branches/bleeding_edge/src/ia32/codegen-ia32.h     Wed Dec  9 01:35:41 2009
+++ /branches/bleeding_edge/src/ia32/codegen-ia32.h     Fri Dec 11 02:40:01 2009
@@ -665,7 +665,8 @@
          mode_(mode),
          flags_(flags),
          args_in_registers_(false),
-        args_reversed_(false) {
+        args_reversed_(false),
+        name_(NULL) {
      use_sse3_ = CpuFeatures::IsSupported(SSE3);
      ASSERT(OpBits::is_valid(Token::NUM_TOKENS));
    }
@@ -684,6 +685,7 @@
    bool args_in_registers_;  // Arguments passed in registers not on the  
stack.
    bool args_reversed_;  // Left and right argument are swapped.
    bool use_sse3_;
+  char* name_;

    const char* GetName();

=======================================
--- /branches/bleeding_edge/src/token.cc        Thu Nov  5 02:24:20 2009
+++ /branches/bleeding_edge/src/token.cc        Fri Dec 11 02:40:01 2009
@@ -32,13 +32,11 @@
  namespace v8 {
  namespace internal {

-#ifdef DEBUG
  #define T(name, string, precedence) #name,
  const char* Token::name_[NUM_TOKENS] = {
    TOKEN_LIST(T, T, IGNORE_TOKEN)
  };
  #undef T
-#endif


  #define T(name, string, precedence) string,
=======================================
--- /branches/bleeding_edge/src/token.h Thu Nov  5 02:24:20 2009
+++ /branches/bleeding_edge/src/token.h Fri Dec 11 02:40:01 2009
@@ -211,14 +211,12 @@
    };
  #undef T

-#ifdef DEBUG
    // Returns a string corresponding to the C++ token name
    // (e.g. "LT" for the token LT).
    static const char* Name(Value tok) {
      ASSERT(0 <= tok && tok < NUM_TOKENS);
      return name_[tok];
    }
-#endif

    // Predicates
    static bool IsAssignmentOp(Value tok) {
@@ -261,9 +259,7 @@
    }

   private:
-#ifdef DEBUG
    static const char* name_[NUM_TOKENS];
-#endif
    static const char* string_[NUM_TOKENS];
    static int8_t precedence_[NUM_TOKENS];
  };
=======================================
--- /branches/bleeding_edge/src/x64/codegen-x64.cc      Wed Dec  9 01:35:41 2009
+++ /branches/bleeding_edge/src/x64/codegen-x64.cc      Fri Dec 11 02:40:01 2009
@@ -7372,19 +7372,28 @@


  const char* GenericBinaryOpStub::GetName() {
-  switch (op_) {
-    case Token::ADD: return "GenericBinaryOpStub_ADD";
-    case Token::SUB: return "GenericBinaryOpStub_SUB";
-    case Token::MUL: return "GenericBinaryOpStub_MUL";
-    case Token::DIV: return "GenericBinaryOpStub_DIV";
-    case Token::BIT_OR: return "GenericBinaryOpStub_BIT_OR";
-    case Token::BIT_AND: return "GenericBinaryOpStub_BIT_AND";
-    case Token::BIT_XOR: return "GenericBinaryOpStub_BIT_XOR";
-    case Token::SAR: return "GenericBinaryOpStub_SAR";
-    case Token::SHL: return "GenericBinaryOpStub_SHL";
-    case Token::SHR: return "GenericBinaryOpStub_SHR";
-    default:         return "GenericBinaryOpStub";
-  }
+  if (name_ != NULL) return name_;
+  const int len = 100;
+  name_ = Bootstrapper::AllocateAutoDeletedArray(len);
+  if (name_ == NULL) return "OOM";
+  const char* op_name = Token::Name(op_);
+  const char* overwrite_name;
+  switch (mode_) {
+    case NO_OVERWRITE: overwrite_name = "Alloc"; break;
+    case OVERWRITE_RIGHT: overwrite_name = "OverwriteRight"; break;
+    case OVERWRITE_LEFT: overwrite_name = "OverwriteLeft"; break;
+    default: overwrite_name = "UnknownOverwrite"; break;
+  }
+
+  OS::SNPrintF(Vector<char>(name_, len),
+               "GenericBinaryOpStub_%s_%s%s_%s%s_%s",
+               op_name,
+               overwrite_name,
+               (flags_ & NO_SMI_CODE_IN_STUB) ? "_NoSmiInStub" : "",
+               args_in_registers_ ? "RegArgs" : "StackArgs",
+               args_reversed_ ? "_R" : "",
+               use_sse3_ ? "SSE3" : "SSE2");
+  return name_;
  }


=======================================
--- /branches/bleeding_edge/src/x64/codegen-x64.h       Wed Dec  9 01:35:41 2009
+++ /branches/bleeding_edge/src/x64/codegen-x64.h       Fri Dec 11 02:40:01 2009
@@ -670,7 +670,8 @@
          mode_(mode),
          flags_(flags),
          args_in_registers_(false),
-        args_reversed_(false) {
+        args_reversed_(false),
+        name_(NULL) {
      use_sse3_ = CpuFeatures::IsSupported(SSE3);
      ASSERT(OpBits::is_valid(Token::NUM_TOKENS));
    }
@@ -689,6 +690,7 @@
    bool args_in_registers_;  // Arguments passed in registers not on the  
stack.
    bool args_reversed_;  // Left and right argument are swapped.
    bool use_sse3_;
+  char* name_;

    const char* GetName();

-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to