Revision: 3127
Author: [email protected]
Date: Mon Oct 26 05:26:42 2009
Log: Handle the list of code-stub types using macro expansion.

As the list of code-stubs is used in two places it is now handled through a  
macro to keep this in sync. As some code-stubs is only used on ARM the list  
have been split into two parts to indicate this and get rid of dummy  
implementation on ia32 and x64 platforms.

BUG=484
Review URL: http://codereview.chromium.org/335025
http://code.google.com/p/v8/source/detail?r=3127

Modified:
  /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc
  /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.h
  /branches/bleeding_edge/src/code-stubs.cc
  /branches/bleeding_edge/src/code-stubs.h
  /branches/bleeding_edge/src/heap.cc
  /branches/bleeding_edge/src/ia32/regexp-macro-assembler-ia32.cc
  /branches/bleeding_edge/src/regexp-macro-assembler.h
  /branches/bleeding_edge/src/x64/regexp-macro-assembler-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc       Wed Sep 
  
2 02:10:49 2009
+++ /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.cc       Mon Oct 
 
26 05:26:42 2009
@@ -29,6 +29,7 @@
  #include "unicode.h"
  #include "log.h"
  #include "ast.h"
+#include "code-stubs.h"
  #include "regexp-stack.h"
  #include "macro-assembler.h"
  #include "regexp-macro-assembler.h"
=======================================
--- /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.h        Wed Sep 
 2  
00:34:51 2009
+++ /branches/bleeding_edge/src/arm/regexp-macro-assembler-arm.h        Mon Oct 
26  
05:26:42 2009
@@ -260,6 +260,21 @@
  };


+// Enter C code from generated RegExp code in a way that allows
+// the C code to fix the return address in case of a GC.
+// Currently only needed on ARM.
+class RegExpCEntryStub: public CodeStub {
+ public:
+  RegExpCEntryStub() {}
+  virtual ~RegExpCEntryStub() {}
+  void Generate(MacroAssembler* masm);
+
+ private:
+  Major MajorKey() { return RegExpCEntry; }
+  int MinorKey() { return 0; }
+  const char* GetName() { return "RegExpCEntryStub"; }
+};
+
  #endif  // V8_NATIVE_REGEXP


=======================================
--- /branches/bleeding_edge/src/code-stubs.cc   Thu Oct  8 08:10:14 2009
+++ /branches/bleeding_edge/src/code-stubs.cc   Mon Oct 26 05:26:42 2009
@@ -96,46 +96,9 @@

  const char* CodeStub::MajorName(CodeStub::Major major_key) {
    switch (major_key) {
-    case CallFunction:
-      return "CallFunction";
-    case GenericBinaryOp:
-      return "GenericBinaryOp";
-    case SmiOp:
-      return "SmiOp";
-    case Compare:
-      return "Compare";
-    case RecordWrite:
-      return "RecordWrite";
-    case StackCheck:
-      return "StackCheck";
-    case UnarySub:
-      return "UnarySub";
-    case RevertToNumber:
-      return "RevertToNumber";
-    case ToBoolean:
-      return "ToBoolean";
-    case Instanceof:
-      return "Instanceof";
-    case CounterOp:
-      return "CounterOp";
-    case ArgumentsAccess:
-      return "ArgumentsAccess";
-    case Runtime:
-      return "Runtime";
-    case CEntry:
-      return "CEntry";
-    case JSEntry:
-      return "JSEntry";
-    case GetProperty:
-      return "GetProperty";
-    case SetProperty:
-      return "SetProperty";
-    case InvokeBuiltin:
-      return "InvokeBuiltin";
-    case ConvertToDouble:
-      return "ConvertToDouble";
-    case WriteInt32ToHeapNumber:
-      return "WriteInt32ToHeapNumber";
+#define DEF_CASE(name) case name: return #name;
+    CODE_STUB_LIST_ALL(DEF_CASE)
+#undef DEF_CASE
      default:
        UNREACHABLE();
        return NULL;
=======================================
--- /branches/bleeding_edge/src/code-stubs.h    Thu Oct  8 08:10:14 2009
+++ /branches/bleeding_edge/src/code-stubs.h    Mon Oct 26 05:26:42 2009
@@ -31,32 +31,50 @@
  namespace v8 {
  namespace internal {

+// List of code stubs used on all platforms. The order in this list is  
important
+// as only the stubs up to and including RecordWrite allows nested stub  
calls.
+#define CODE_STUB_LIST_ALL(V)  \
+  V(CallFunction)              \
+  V(GenericBinaryOp)           \
+  V(SmiOp)                     \
+  V(Compare)                   \
+  V(RecordWrite)               \
+  V(ConvertToDouble)           \
+  V(WriteInt32ToHeapNumber)    \
+  V(StackCheck)                \
+  V(UnarySub)                  \
+  V(RevertToNumber)            \
+  V(ToBoolean)                 \
+  V(Instanceof)                \
+  V(CounterOp)                 \
+  V(ArgumentsAccess)           \
+  V(Runtime)                   \
+  V(CEntry)                    \
+  V(JSEntry)
+
+// List of code stubs only used on ARM platforms.
+#ifdef V8_TARGET_ARCH_ARM
+#define CODE_STUB_LIST_ARM(V)  \
+  V(GetProperty)               \
+  V(SetProperty)               \
+  V(InvokeBuiltin)             \
+  V(RegExpCEntry)
+#else
+#define CODE_STUB_LIST_ARM(V)
+#endif
+
+// Combined list of code stubs.
+#define CODE_STUB_LIST(V)  \
+  CODE_STUB_LIST_ALL(V)    \
+  CODE_STUB_LIST_ARM(V)

  // Stub is base classes of all stubs.
  class CodeStub BASE_EMBEDDED {
   public:
    enum Major {
-    CallFunction,
-    GenericBinaryOp,
-    SmiOp,
-    Compare,
-    RecordWrite,  // Last stub that allows stub calls inside.
-    ConvertToDouble,
-    WriteInt32ToHeapNumber,
-    StackCheck,
-    UnarySub,
-    RevertToNumber,
-    ToBoolean,
-    Instanceof,
-    CounterOp,
-    ArgumentsAccess,
-    Runtime,
-    CEntry,
-    JSEntry,
-    GetProperty,   // ARM only
-    SetProperty,   // ARM only
-    InvokeBuiltin,  // ARM only
-    RegExpCEntry,  // ARM only
+#define DEF_ENUM(name) name,
+    CODE_STUB_LIST(DEF_ENUM)
+#undef DEF_ENUM
      NUMBER_OF_IDS
    };

=======================================
--- /branches/bleeding_edge/src/heap.cc Fri Oct 23 05:54:48 2009
+++ /branches/bleeding_edge/src/heap.cc Mon Oct 26 05:26:42 2009
@@ -43,6 +43,7 @@
  #include "v8threads.h"
  #if V8_TARGET_ARCH_ARM && V8_NATIVE_REGEXP
  #include "regexp-macro-assembler.h"
+#include "arm/regexp-macro-assembler-arm.h"
  #endif

  namespace v8 {
=======================================
--- /branches/bleeding_edge/src/ia32/regexp-macro-assembler-ia32.cc     Wed  
Sep  9 03:49:40 2009
+++ /branches/bleeding_edge/src/ia32/regexp-macro-assembler-ia32.cc     Mon Oct 
 
26 05:26:42 2009
@@ -1163,10 +1163,6 @@
  }


-void RegExpCEntryStub::Generate(MacroAssembler* masm_) {
-  __ int3();  // Unused on ia32.
-}
-
  #undef __

  #endif  // V8_NATIVE_REGEXP
=======================================
--- /branches/bleeding_edge/src/regexp-macro-assembler.h        Wed Sep  9  
03:49:40 2009
+++ /branches/bleeding_edge/src/regexp-macro-assembler.h        Mon Oct 26  
05:26:42 2009
@@ -215,22 +215,6 @@
                          bool at_start);
  };

-
-// Enter C code from generated RegExp code in a way that allows
-// the C code to fix the return address in case of a GC.
-// Currently only needed on ARM.
-class RegExpCEntryStub: public CodeStub {
- public:
-  RegExpCEntryStub() {}
-  virtual ~RegExpCEntryStub() {}
-  void Generate(MacroAssembler* masm);
-
- private:
-  Major MajorKey() { return RegExpCEntry; }
-  int MinorKey() { return 0; }
-  const char* GetName() { return "RegExpCEntryStub"; }
-};
-
  #endif  // V8_NATIVE_REGEXP

  } }  // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/x64/regexp-macro-assembler-x64.cc       Tue Sep 
  
8 04:52:05 2009
+++ /branches/bleeding_edge/src/x64/regexp-macro-assembler-x64.cc       Mon Oct 
 
26 05:26:42 2009
@@ -1286,11 +1286,6 @@
      }
    }
  }
-
-
-void RegExpCEntryStub::Generate(MacroAssembler* masm_) {
-  __ int3();  // Unused on x64.
-}

  #undef __


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

Reply via email to