Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: src/code-stubs.h

Issue 6894003: Better support for 'polymorphic' JS and external arrays (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: merge with latest Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index 05750f535f6677ba97788f4040a1510316a014f5..f8e014498b7f506afbaa7faf1311a5f20cc18db1 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -66,6 +66,28 @@ namespace internal {
V(NumberToString) \
V(CEntry) \
V(JSEntry) \
+ V(ObjectKeyedLoad) \
+ V(JSArrayKeyedLoad) \
+ V(ObjectKeyedStore) \
+ V(JSArrayKeyedStore) \
+ V(ExternalByteArrayLoad) \
+ V(ExternalUnsignedByteArrayLoad) \
+ V(ExternalShortArrayLoad) \
+ V(ExternalUnsignedShortArrayLoad) \
+ V(ExternalIntArrayLoad) \
+ V(ExternalUnsignedIntArrayLoad) \
+ V(ExternalFloatArrayLoad) \
+ V(ExternalDoubleArrayLoad) \
+ V(ExternalPixelArrayLoad) \
+ V(ExternalByteArrayStore) \
+ V(ExternalUnsignedByteArrayStore) \
+ V(ExternalShortArrayStore) \
+ V(ExternalUnsignedShortArrayStore) \
+ V(ExternalIntArrayStore) \
+ V(ExternalUnsignedIntArrayStore) \
+ V(ExternalFloatArrayStore) \
+ V(ExternalDoubleArrayStore) \
+ V(ExternalPixelArrayStore) \
V(DebuggerStatement) \
V(StringDictionaryNegativeLookup)
@@ -921,6 +943,166 @@ class AllowStubCallsScope {
DISALLOW_COPY_AND_ASSIGN(AllowStubCallsScope);
};
+#ifdef DEBUG
+#define DECLARE_ARRAY_STUB_PRINT(name) void Print() { PrintF(#name); }
+#else
+#define DECLARE_ARRAY_STUB_PRINT(name)
+#endif
+
+
+class KeyedLoadStub : public CodeStub {
+ public:
+ explicit KeyedLoadStub(bool is_js_array)
+ : is_js_array_(is_js_array) {
+ }
+
+ void Generate(MacroAssembler* masm);
+ private:
+ bool is_js_array_;
+};
+
+
+class ObjectKeyedLoadStub: public KeyedLoadStub {
+ public:
+ ObjectKeyedLoadStub() : KeyedLoadStub(false) { }
+
+ private:
+ Major MajorKey() { return ObjectKeyedLoad; }
+ int MinorKey() { return 0; }
+
+ const char* GetName() { return "ObjectKeyedLoadStub"; }
+
+ DECLARE_ARRAY_STUB_PRINT(ObjectKeyedLoadStub)
+};
+
+
+class JSArrayKeyedLoadStub: public KeyedLoadStub {
+ public:
+ JSArrayKeyedLoadStub() : KeyedLoadStub(true) { }
+
+ private:
+ Major MajorKey() { return JSArrayKeyedLoad; }
+ int MinorKey() { return 0; }
+
+ const char* GetName() { return "JSArrayKeyedLoadStub"; }
+
+ DECLARE_ARRAY_STUB_PRINT(JSArrayKeyedLoadStub)
+};
+
+
+class KeyedStoreStub : public CodeStub {
Mads Ager (chromium) 2011/05/10 13:38:06 Why not just have this one and have a minor key fo
danno 2011/05/11 14:20:19 Yes, that's a really good idea. Should have though
+ public:
+ explicit KeyedStoreStub(bool is_js_array)
+ : is_js_array_(is_js_array) { }
+
+ void Generate(MacroAssembler* masm);
+ private:
+ bool is_js_array_;
+};
+
+
+class ObjectKeyedStoreStub: public KeyedStoreStub {
+ public:
+ ObjectKeyedStoreStub() : KeyedStoreStub(false) { }
+
+ private:
+ Major MajorKey() { return ObjectKeyedStore; }
+ int MinorKey() { return 0; }
+
+ const char* GetName() { return "ObjectKeyedStoreStub"; }
+
+ DECLARE_ARRAY_STUB_PRINT(ObjectKeyedStoreStub)
+};
+
+
+class JSArrayKeyedStoreStub: public KeyedStoreStub {
+ public:
+ JSArrayKeyedStoreStub() : KeyedStoreStub(true) { }
+
+ private:
+ Major MajorKey() { return JSArrayKeyedStore; }
+ int MinorKey() { return 0; }
+
+ const char* GetName() { return "JSArrayKeyedStoreStub"; }
+
+ DECLARE_ARRAY_STUB_PRINT(JSArrayKeyedStoreStub)
+};
+
+
+class ExternalArrayStub : public CodeStub {
+ public:
+ explicit ExternalArrayStub(ExternalArrayType array_type)
+ : array_type_(array_type) { }
+
+ Major MajorKey() {
Mads Ager (chromium) 2011/05/10 13:38:06 Just don't implement Major and Minor key?
danno 2011/05/11 14:20:19 Done.
+ UNREACHABLE();
+ return static_cast<Major>(0);
+ }
+ int MinorKey() {
+ UNREACHABLE();
+ return 0;
+ }
+
+ protected:
+ ExternalArrayType array_type_;
+};
+
+
+class ExternalArrayLoadStub : public ExternalArrayStub {
+ public:
+ explicit ExternalArrayLoadStub(ExternalArrayType array_type)
+ : ExternalArrayStub(array_type) { }
+
+ void Generate(MacroAssembler* masm);
+};
+
+
+class ExternalArrayStoreStub : public ExternalArrayStub {
+ public:
+ explicit ExternalArrayStoreStub(ExternalArrayType array_type)
+ : ExternalArrayStub(array_type) { }
+
+ void Generate(MacroAssembler* masm);
+};
+
+
+#define DECLARE_EXTERNAL_ARRAY_STUB(op, type) \
Mads Ager (chromium) 2011/05/10 13:38:06 Do you really need all of these different types he
danno 2011/05/11 14:20:19 Done.
+class External##type##Array##op##Stub : public ExternalArray##op##Stub {\
+ public: \
+ External##type##Array##op##Stub() \
+ : ExternalArray##op##Stub(k##External##type##Array) { } \
+ \
+ private: \
+ Major MajorKey() { return External##type##Array##op; } \
+ int MinorKey() { return 0; } \
+ \
+ const char* GetName() { return "External" #type "Array" #op; } \
+ \
+ DECLARE_ARRAY_STUB_PRINT(External##type##Array##op##Stub) \
+}
+
+
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Byte);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedByte);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Short);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedShort);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Int);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, UnsignedInt);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Float);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Double);
+DECLARE_EXTERNAL_ARRAY_STUB(Load, Pixel);
+
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Byte);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedByte);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Short);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedShort);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Int);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, UnsignedInt);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Float);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Double);
+DECLARE_EXTERNAL_ARRAY_STUB(Store, Pixel);
+
+
} } // namespace v8::internal
#endif // V8_CODE_STUBS_H_

Powered by Google App Engine
This is Rietveld 408576698