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

Unified Diff: runtime/vm/stub_code_mips.cc

Issue 2799373002: Pass a second type argument vector to all type instantiation calls in the VM. (Closed)
Patch Set: addressed comments Created 3 years, 8 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
« no previous file with comments | « runtime/vm/stub_code_ia32.cc ('k') | runtime/vm/stub_code_x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/stub_code_mips.cc
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index b20fb2c3f4112b16a89a7eeff1926e7610243d61..50f7305af3dd4a81802bd53c0fd3a6d15fd22219 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -1863,14 +1863,14 @@ void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) {
// Used to check class and type arguments. Arguments passed in registers:
// RA: return address.
// A0: instance (must be preserved).
-// A1: instantiator type arguments or NULL.
-// A2: cache array.
+// A1: instantiator type arguments (only if n == 4, can be raw_null).
+// A2: function type arguments (only if n == 4, can be raw_null).
+// A3: SubtypeTestCache.
// Result in V0: null -> not found, otherwise result (true or false).
static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
__ Comment("SubtypeNTestCacheStub");
- ASSERT((1 <= n) && (n <= 3));
+ ASSERT((n == 1) || (n == 2) || (n == 4));
if (n > 1) {
- // Get instance type arguments.
__ LoadClass(T0, A0);
// Compute instance type arguments into T1.
Label has_no_type_arguments;
@@ -1886,15 +1886,15 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
}
__ LoadClassId(T0, A0);
// A0: instance.
- // A1: instantiator type arguments or NULL.
- // A2: SubtypeTestCache.
+ // A1: instantiator type arguments (only if n == 4, can be raw_null).
+ // A2: function type arguments (only if n == 4, can be raw_null).
+ // A3: SubtypeTestCache.
// T0: instance class id.
// T1: instance type arguments (null if none), used only if n > 1.
- __ lw(T2, FieldAddress(A2, SubtypeTestCache::cache_offset()));
+ __ lw(T2, FieldAddress(A3, SubtypeTestCache::cache_offset()));
__ AddImmediate(T2, Array::data_offset() - kHeapObjectTag);
__ LoadObject(T7, Object::null_object());
-
Label loop, found, not_found, next_iteration;
// T0: instance class id.
// T1: instance type arguments (still null if closure).
@@ -1909,7 +1909,6 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
__ lw(T3,
Address(T2, kWordSize * SubtypeTestCache::kInstanceClassIdOrFunction));
__ beq(T3, T7, &not_found);
-
if (n == 1) {
__ beq(T3, T0, &found);
} else {
@@ -1922,7 +1921,10 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
__ bne(T3, T1, &next_iteration);
__ lw(T3, Address(T2, kWordSize *
SubtypeTestCache::kInstantiatorTypeArguments));
- __ beq(T3, A1, &found);
+ __ bne(T3, A1, &next_iteration);
+ __ lw(T3,
+ Address(T2, kWordSize * SubtypeTestCache::kFunctionTypeArguments));
+ __ beq(T3, A2, &found);
}
}
__ Bind(&next_iteration);
@@ -1944,8 +1946,9 @@ static void GenerateSubtypeNTestCacheStub(Assembler* assembler, int n) {
// Used to check class and type arguments. Arguments passed in registers:
// RA: return address.
// A0: instance (must be preserved).
-// A1: instantiator type arguments or NULL.
-// A2: cache array.
+// A1: unused.
+// A2: unused.
+// A3: SubtypeTestCache.
// Result in V0: null -> not found, otherwise result (true or false).
void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
GenerateSubtypeNTestCacheStub(assembler, 1);
@@ -1955,8 +1958,9 @@ void StubCode::GenerateSubtype1TestCacheStub(Assembler* assembler) {
// Used to check class and type arguments. Arguments passed in registers:
// RA: return address.
// A0: instance (must be preserved).
-// A1: instantiator type arguments or NULL.
-// A2: cache array.
+// A1: unused.
+// A2: unused.
+// A3: SubtypeTestCache.
// Result in V0: null -> not found, otherwise result (true or false).
void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
GenerateSubtypeNTestCacheStub(assembler, 2);
@@ -1966,11 +1970,12 @@ void StubCode::GenerateSubtype2TestCacheStub(Assembler* assembler) {
// Used to check class and type arguments. Arguments passed in registers:
// RA: return address.
// A0: instance (must be preserved).
-// A1: instantiator type arguments or NULL.
-// A2: cache array.
+// A1: instantiator type arguments (can be raw_null).
+// A2: function type arguments (can be raw_null).
+// A3: SubtypeTestCache.
// Result in V0: null -> not found, otherwise result (true or false).
-void StubCode::GenerateSubtype3TestCacheStub(Assembler* assembler) {
- GenerateSubtypeNTestCacheStub(assembler, 3);
+void StubCode::GenerateSubtype4TestCacheStub(Assembler* assembler) {
+ GenerateSubtypeNTestCacheStub(assembler, 4);
}
« no previous file with comments | « runtime/vm/stub_code_ia32.cc ('k') | runtime/vm/stub_code_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698