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 -~----------~----~----~----~------~----~------~--~---
