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

Side by Side Diff: src/compiler/interpreter-assembler.cc

Issue 1378523005: [Interpreter] Add support for global declarations and load/store of global variables (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_toplevel
Patch Set: Fix test Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « src/compiler/interpreter-assembler.h ('k') | src/frames.h » ('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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/interpreter-assembler.h" 5 #include "src/compiler/interpreter-assembler.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 return raw_assembler_->Load(kMachAnyTagged, constant_pool, entry_offset); 284 return raw_assembler_->Load(kMachAnyTagged, constant_pool, entry_offset);
285 } 285 }
286 286
287 287
288 Node* InterpreterAssembler::LoadObjectField(Node* object, int offset) { 288 Node* InterpreterAssembler::LoadObjectField(Node* object, int offset) {
289 return raw_assembler_->Load(kMachAnyTagged, object, 289 return raw_assembler_->Load(kMachAnyTagged, object,
290 IntPtrConstant(offset - kHeapObjectTag)); 290 IntPtrConstant(offset - kHeapObjectTag));
291 } 291 }
292 292
293 293
294 Node* InterpreterAssembler::LoadContextSlot(Node* context, int slot_index) { 294 Node* InterpreterAssembler::LoadContextSlot(Node* context, Node* slot_index) {
295 return raw_assembler_->Load(kMachAnyTagged, context, 295 Node* offset =
296 IntPtrConstant(Context::SlotOffset(slot_index))); 296 IntPtrAdd(WordShl(slot_index, kPointerSizeLog2),
297 Int32Constant(Context::kHeaderSize - kHeapObjectTag));
298 return raw_assembler_->Load(kMachAnyTagged, context, offset);
297 } 299 }
298 300
299 301
300 Node* InterpreterAssembler::LoadContextSlot(int slot_index) {
301 return LoadContextSlot(ContextTaggedPointer(), slot_index);
302 }
303
304
305 Node* InterpreterAssembler::LoadTypeFeedbackVector() { 302 Node* InterpreterAssembler::LoadTypeFeedbackVector() {
306 Node* function = raw_assembler_->Load( 303 Node* function = raw_assembler_->Load(
307 kMachAnyTagged, RegisterFileRawPointer(), 304 kMachAnyTagged, RegisterFileRawPointer(),
308 IntPtrConstant(InterpreterFrameConstants::kFunctionFromRegisterPointer)); 305 IntPtrConstant(InterpreterFrameConstants::kFunctionFromRegisterPointer));
309 Node* shared_info = 306 Node* shared_info =
310 LoadObjectField(function, JSFunction::kSharedFunctionInfoOffset); 307 LoadObjectField(function, JSFunction::kSharedFunctionInfoOffset);
311 Node* vector = 308 Node* vector =
312 LoadObjectField(shared_info, SharedFunctionInfo::kFeedbackVectorOffset); 309 LoadObjectField(shared_info, SharedFunctionInfo::kFeedbackVectorOffset);
313 return vector; 310 return vector;
314 } 311 }
315 312
316 313
317 Node* InterpreterAssembler::CallN(CallDescriptor* descriptor, 314 Node* InterpreterAssembler::CallN(CallDescriptor* descriptor, Node* code_target,
318 Node* code_target,
319 Node** args) { 315 Node** args) {
320 Node* stack_pointer_before_call = nullptr; 316 Node* stack_pointer_before_call = nullptr;
321 if (FLAG_debug_code) { 317 if (FLAG_debug_code) {
322 stack_pointer_before_call = raw_assembler_->LoadStackPointer(); 318 stack_pointer_before_call = raw_assembler_->LoadStackPointer();
323 } 319 }
324 Node* return_val = raw_assembler_->CallN(descriptor, code_target, args); 320 Node* return_val = raw_assembler_->CallN(descriptor, code_target, args);
325 if (FLAG_debug_code) { 321 if (FLAG_debug_code) {
326 Node* stack_pointer_after_call = raw_assembler_->LoadStackPointer(); 322 Node* stack_pointer_after_call = raw_assembler_->LoadStackPointer();
327 AbortIfWordNotEqual(stack_pointer_before_call, stack_pointer_after_call, 323 AbortIfWordNotEqual(stack_pointer_before_call, stack_pointer_after_call,
328 kUnexpectedStackPointer); 324 kUnexpectedStackPointer);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 BytecodeArrayTaggedPointer(), 497 BytecodeArrayTaggedPointer(),
502 DispatchTableRawPointer(), 498 DispatchTableRawPointer(),
503 ContextTaggedPointer() }; 499 ContextTaggedPointer() };
504 Node* tail_call = 500 Node* tail_call =
505 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args); 501 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args);
506 // This should always be the end node. 502 // This should always be the end node.
507 AddEndInput(tail_call); 503 AddEndInput(tail_call);
508 } 504 }
509 505
510 506
511 void InterpreterAssembler::AbortIfWordNotEqual( 507 void InterpreterAssembler::AbortIfWordNotEqual(Node* lhs, Node* rhs,
512 Node* lhs, Node* rhs, BailoutReason bailout_reason) { 508 BailoutReason bailout_reason) {
513 RawMachineAssembler::Label match, no_match; 509 RawMachineAssembler::Label match, no_match;
514 Node* condition = raw_assembler_->WordEqual(lhs, rhs); 510 Node* condition = raw_assembler_->WordEqual(lhs, rhs);
515 raw_assembler_->Branch(condition, &match, &no_match); 511 raw_assembler_->Branch(condition, &match, &no_match);
516 raw_assembler_->Bind(&no_match); 512 raw_assembler_->Bind(&no_match);
517 Node* abort_id = SmiTag(Int32Constant(bailout_reason)); 513 Node* abort_id = SmiTag(Int32Constant(bailout_reason));
518 CallRuntime(Runtime::kAbort, abort_id); 514 CallRuntime(Runtime::kAbort, abort_id);
519 Return(); 515 Return();
520 raw_assembler_->Bind(&match); 516 raw_assembler_->Bind(&match);
521 } 517 }
522 518
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 return raw_assembler_->schedule(); 562 return raw_assembler_->schedule();
567 } 563 }
568 564
569 565
570 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); } 566 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); }
571 567
572 568
573 } // namespace compiler 569 } // namespace compiler
574 } // namespace internal 570 } // namespace internal
575 } // namespace v8 571 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/interpreter-assembler.h ('k') | src/frames.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698