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

Side by Side Diff: runtime/vm/stub_code_mips.cc

Issue 668193002: Remove isolate pointer from context objects. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/stub_code_ia32_test.cc ('k') | runtime/vm/stub_code_mips_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_MIPS) 6 #if defined(TARGET_ARCH_MIPS)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 30 matching lines...) Expand all
41 const intptr_t exitframe_last_param_slot_from_fp = 2; 41 const intptr_t exitframe_last_param_slot_from_fp = 2;
42 42
43 __ SetPrologueOffset(); 43 __ SetPrologueOffset();
44 __ TraceSimMsg("CallToRuntimeStub"); 44 __ TraceSimMsg("CallToRuntimeStub");
45 __ addiu(SP, SP, Immediate(-3 * kWordSize)); 45 __ addiu(SP, SP, Immediate(-3 * kWordSize));
46 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker 46 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
47 __ sw(RA, Address(SP, 1 * kWordSize)); 47 __ sw(RA, Address(SP, 1 * kWordSize));
48 __ sw(FP, Address(SP, 0 * kWordSize)); 48 __ sw(FP, Address(SP, 0 * kWordSize));
49 __ mov(FP, SP); 49 __ mov(FP, SP);
50 50
51 // Load current Isolate pointer from Context structure into A0. 51 __ LoadIsolate(A0);
52 __ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
53 52
54 // Save exit frame information to enable stack walking as we are about 53 // Save exit frame information to enable stack walking as we are about
55 // to transition to Dart VM C++ code. 54 // to transition to Dart VM C++ code.
56 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset())); 55 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset()));
57 56
58 // Save current Context pointer into Isolate structure. 57 // Save current Context pointer into Isolate structure.
59 __ sw(CTX, Address(A0, Isolate::top_context_offset())); 58 __ sw(CTX, Address(A0, Isolate::top_context_offset()));
60 59
61 // Cache Isolate pointer into CTX while executing runtime code. 60 // Cache Isolate pointer into CTX while executing runtime code.
62 __ mov(CTX, A0); 61 __ mov(CTX, A0);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 const intptr_t retval_offset = NativeArguments::retval_offset(); 166 const intptr_t retval_offset = NativeArguments::retval_offset();
168 167
169 __ SetPrologueOffset(); 168 __ SetPrologueOffset();
170 __ TraceSimMsg("CallNativeCFunctionStub"); 169 __ TraceSimMsg("CallNativeCFunctionStub");
171 __ addiu(SP, SP, Immediate(-3 * kWordSize)); 170 __ addiu(SP, SP, Immediate(-3 * kWordSize));
172 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker 171 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
173 __ sw(RA, Address(SP, 1 * kWordSize)); 172 __ sw(RA, Address(SP, 1 * kWordSize));
174 __ sw(FP, Address(SP, 0 * kWordSize)); 173 __ sw(FP, Address(SP, 0 * kWordSize));
175 __ mov(FP, SP); 174 __ mov(FP, SP);
176 175
177 // Load current Isolate pointer from Context structure into A0. 176 __ LoadIsolate(A0);
178 __ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
179 177
180 // Save exit frame information to enable stack walking as we are about 178 // Save exit frame information to enable stack walking as we are about
181 // to transition to native code. 179 // to transition to native code.
182 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset())); 180 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset()));
183 181
184 // Save current Context pointer into Isolate structure. 182 // Save current Context pointer into Isolate structure.
185 __ sw(CTX, Address(A0, Isolate::top_context_offset())); 183 __ sw(CTX, Address(A0, Isolate::top_context_offset()));
186 184
187 // Cache Isolate pointer into CTX while executing native code. 185 // Cache Isolate pointer into CTX while executing native code.
188 __ mov(CTX, A0); 186 __ mov(CTX, A0);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 const intptr_t retval_offset = NativeArguments::retval_offset(); 280 const intptr_t retval_offset = NativeArguments::retval_offset();
283 281
284 __ SetPrologueOffset(); 282 __ SetPrologueOffset();
285 __ TraceSimMsg("CallNativeCFunctionStub"); 283 __ TraceSimMsg("CallNativeCFunctionStub");
286 __ addiu(SP, SP, Immediate(-3 * kWordSize)); 284 __ addiu(SP, SP, Immediate(-3 * kWordSize));
287 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker 285 __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
288 __ sw(RA, Address(SP, 1 * kWordSize)); 286 __ sw(RA, Address(SP, 1 * kWordSize));
289 __ sw(FP, Address(SP, 0 * kWordSize)); 287 __ sw(FP, Address(SP, 0 * kWordSize));
290 __ mov(FP, SP); 288 __ mov(FP, SP);
291 289
292 // Load current Isolate pointer from Context structure into A0. 290 __ LoadIsolate(A0);
293 __ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
294 291
295 // Save exit frame information to enable stack walking as we are about 292 // Save exit frame information to enable stack walking as we are about
296 // to transition to native code. 293 // to transition to native code.
297 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset())); 294 __ sw(SP, Address(A0, Isolate::top_exit_frame_info_offset()));
298 295
299 // Save current Context pointer into Isolate structure. 296 // Save current Context pointer into Isolate structure.
300 __ sw(CTX, Address(A0, Isolate::top_context_offset())); 297 __ sw(CTX, Address(A0, Isolate::top_context_offset()));
301 298
302 // Cache Isolate pointer into CTX while executing native code. 299 // Cache Isolate pointer into CTX while executing native code.
303 __ mov(CTX, A0); 300 __ mov(CTX, A0);
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 // T2: size and bit tags. 1087 // T2: size and bit tags.
1091 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); 1088 __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
1092 __ or_(T2, T2, TMP); 1089 __ or_(T2, T2, TMP);
1093 __ sw(T2, FieldAddress(V0, Context::tags_offset())); 1090 __ sw(T2, FieldAddress(V0, Context::tags_offset()));
1094 1091
1095 // Setup up number of context variables field. 1092 // Setup up number of context variables field.
1096 // V0: new object. 1093 // V0: new object.
1097 // T1: number of context variables as integer value (not object). 1094 // T1: number of context variables as integer value (not object).
1098 __ sw(T1, FieldAddress(V0, Context::num_variables_offset())); 1095 __ sw(T1, FieldAddress(V0, Context::num_variables_offset()));
1099 1096
1100 // Setup isolate field.
1101 // V0: new object.
1102 // T1: number of context variables.
1103 // T2: isolate, not an object.
1104 __ LoadIsolate(T2);
1105 __ sw(T2, FieldAddress(V0, Context::isolate_offset()));
1106
1107 __ LoadImmediate(T7, reinterpret_cast<intptr_t>(Object::null())); 1097 __ LoadImmediate(T7, reinterpret_cast<intptr_t>(Object::null()));
1108 1098
1109 // Initialize the context variables. 1099 // Initialize the context variables.
1110 // V0: new object. 1100 // V0: new object.
1111 // T1: number of context variables. 1101 // T1: number of context variables.
1112 Label loop, loop_exit; 1102 Label loop, loop_exit;
1113 __ blez(T1, &loop_exit); 1103 __ blez(T1, &loop_exit);
1114 // Setup the parent field. 1104 // Setup the parent field.
1115 __ delay_slot()->sw(T7, FieldAddress(V0, Context::parent_offset())); 1105 __ delay_slot()->sw(T7, FieldAddress(V0, Context::parent_offset()));
1116 __ AddImmediate(T3, V0, Context::variable_offset(0) - kHeapObjectTag); 1106 __ AddImmediate(T3, V0, Context::variable_offset(0) - kHeapObjectTag);
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after
1932 __ LeaveStubFrame(); 1922 __ LeaveStubFrame();
1933 __ jr(T0); 1923 __ jr(T0);
1934 } 1924 }
1935 1925
1936 1926
1937 // Called only from unoptimized code. All relevant registers have been saved. 1927 // Called only from unoptimized code. All relevant registers have been saved.
1938 // RA: return address. 1928 // RA: return address.
1939 void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) { 1929 void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) {
1940 // Check single stepping. 1930 // Check single stepping.
1941 Label stepping, done_stepping; 1931 Label stepping, done_stepping;
1942 __ lw(T0, FieldAddress(CTX, Context::isolate_offset())); 1932 __ LoadIsolate(T0);
1943 __ lbu(T0, Address(T0, Isolate::single_step_offset())); 1933 __ lbu(T0, Address(T0, Isolate::single_step_offset()));
1944 __ BranchNotEqual(T0, Immediate(0), &stepping); 1934 __ BranchNotEqual(T0, Immediate(0), &stepping);
1945 __ Bind(&done_stepping); 1935 __ Bind(&done_stepping);
1946 1936
1947 __ Ret(); 1937 __ Ret();
1948 1938
1949 // Call single step callback in debugger. 1939 // Call single step callback in debugger.
1950 __ Bind(&stepping); 1940 __ Bind(&stepping);
1951 __ EnterStubFrame(); 1941 __ EnterStubFrame();
1952 __ addiu(SP, SP, Immediate(-1 * kWordSize)); 1942 __ addiu(SP, SP, Immediate(-1 * kWordSize));
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
2221 2211
2222 // Called only from unoptimized code. All relevant registers have been saved. 2212 // Called only from unoptimized code. All relevant registers have been saved.
2223 // RA: return address. 2213 // RA: return address.
2224 // SP + 4: left operand. 2214 // SP + 4: left operand.
2225 // SP + 0: right operand. 2215 // SP + 0: right operand.
2226 // Returns: CMPRES1 is zero if equal, non-zero otherwise. 2216 // Returns: CMPRES1 is zero if equal, non-zero otherwise.
2227 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub( 2217 void StubCode::GenerateUnoptimizedIdenticalWithNumberCheckStub(
2228 Assembler* assembler) { 2218 Assembler* assembler) {
2229 // Check single stepping. 2219 // Check single stepping.
2230 Label stepping, done_stepping; 2220 Label stepping, done_stepping;
2231 __ lw(T0, FieldAddress(CTX, Context::isolate_offset())); 2221 __ LoadIsolate(T0);
2232 __ lbu(T0, Address(T0, Isolate::single_step_offset())); 2222 __ lbu(T0, Address(T0, Isolate::single_step_offset()));
2233 __ BranchNotEqual(T0, Immediate(0), &stepping); 2223 __ BranchNotEqual(T0, Immediate(0), &stepping);
2234 __ Bind(&done_stepping); 2224 __ Bind(&done_stepping);
2235 2225
2236 const Register temp1 = T2; 2226 const Register temp1 = T2;
2237 const Register temp2 = T3; 2227 const Register temp2 = T3;
2238 const Register left = T1; 2228 const Register left = T1;
2239 const Register right = T0; 2229 const Register right = T0;
2240 __ lw(left, Address(SP, 1 * kWordSize)); 2230 __ lw(left, Address(SP, 1 * kWordSize));
2241 __ lw(right, Address(SP, 0 * kWordSize)); 2231 __ lw(right, Address(SP, 0 * kWordSize));
(...skipping 25 matching lines...) Expand all
2267 const Register right = T0; 2257 const Register right = T0;
2268 __ lw(left, Address(SP, 1 * kWordSize)); 2258 __ lw(left, Address(SP, 1 * kWordSize));
2269 __ lw(right, Address(SP, 0 * kWordSize)); 2259 __ lw(right, Address(SP, 0 * kWordSize));
2270 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); 2260 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2);
2271 __ Ret(); 2261 __ Ret();
2272 } 2262 }
2273 2263
2274 } // namespace dart 2264 } // namespace dart
2275 2265
2276 #endif // defined TARGET_ARCH_MIPS 2266 #endif // defined TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « runtime/vm/stub_code_ia32_test.cc ('k') | runtime/vm/stub_code_mips_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698