Reviewers: Benedikt Meurer,

Message:
Hi Benedikt, can you have a look at this disassembly print support for
ArrayConstructorStub and friends?
Thx,
--Michael

Description:
Pretty printing for array code stubs. The minor keys encode things like
specialized ElementsKind for each stub. This can be useful to see in disassembly
traces.

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

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+38, -0 lines):
  M src/code-stubs.h
  M src/code-stubs.cc


Index: src/code-stubs.cc
diff --git a/src/code-stubs.cc b/src/code-stubs.cc
index 3fb61534287c1ab7b1075cde2c58844be3e16ae3..41653eebbc8e8bc7ebcf363d40b482ca9e528c49 100644
--- a/src/code-stubs.cc
+++ b/src/code-stubs.cc
@@ -584,6 +584,28 @@ void CallConstructStub::PrintName(StringStream* stream) {
 }


+void ArrayConstructorStub::PrintName(StringStream* stream) {
+  stream->Add("ArrayConstructorStub");
+  switch (argument_count_) {
+    case ANY: stream->Add("_Any"); break;
+    case NONE: stream->Add("_None"); break;
+    case ONE: stream->Add("_One"); break;
+    case MORE_THAN_ONE: stream->Add("_More_Than_One") break;;
+  }
+}
+
+
+void ArrayConstructorStubBase::BasePrintName(const char* name,
+                                             StringStream* stream) {
+  stream->Add(name);
+  stream->Add("_");
+  stream->Add(ElementsKindToString(elements_kind()));
+  if (override_mode() == DISABLE_ALLOCATION_SITES) {
+    stream->Add("_DISABLE_ALLOCATION_SITES");
+  }
+}
+
+
 bool ToBooleanStub::UpdateStatus(Handle<Object> object) {
   Types old_types(types_);
   bool to_boolean_value = types_.UpdateStatus(object);
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index f2de6166d3aefb8aa47b768dde69e0df08442560..c1773422855c34a7655714683d22fec280783c02 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -740,6 +740,7 @@ class ArrayConstructorStub: public PlatformCodeStub {
  private:
   void GenerateDispatchToArrayStub(MacroAssembler* masm,
                                    AllocationSiteOverrideMode mode);
+  virtual void PrintName(StringStream* stream);

   virtual CodeStub::Major MajorKey() { return ArrayConstructor; }
   virtual int MinorKey() { return argument_count_; }
@@ -1936,6 +1937,9 @@ class ArrayConstructorStubBase : public HydrogenCodeStub {
   static const int kConstructor = 0;
   static const int kPropertyCell = 1;

+ protected:
+  void BasePrintName(const char* name, StringStream* stream);
+
  private:
   int NotMissMinorKey() { return bit_field_; }

@@ -1971,6 +1975,10 @@ class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase {
  private:
   Major MajorKey() { return ArrayNoArgumentConstructor; }

+  virtual void PrintName(StringStream* stream) {
+    BasePrintName("ArrayNoArgumentConstructorStub", stream);
+  }
+
   DISALLOW_COPY_AND_ASSIGN(ArrayNoArgumentConstructorStub);
 };

@@ -1993,6 +2001,10 @@ class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase {
  private:
   Major MajorKey() { return ArraySingleArgumentConstructor; }

+  virtual void PrintName(StringStream* stream) {
+    BasePrintName("ArraySingleArgumentConstructorStub", stream);
+  }
+
   DISALLOW_COPY_AND_ASSIGN(ArraySingleArgumentConstructorStub);
 };

@@ -2015,6 +2027,10 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase {
  private:
   Major MajorKey() { return ArrayNArgumentsConstructor; }

+  virtual void PrintName(StringStream* stream) {
+    BasePrintName("ArrayNArgumentsConstructorStub", stream);
+  }
+
   DISALLOW_COPY_AND_ASSIGN(ArrayNArgumentsConstructorStub);
 };



--
--
v8-dev mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to