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

Side by Side Diff: src/mips64/lithium-codegen-mips64.cc

Issue 890413003: MIPS: Introduce LanguageMode, drop StrictMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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/mips64/lithium-codegen-mips64.h ('k') | src/mips64/lithium-mips64.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/hydrogen-osr.h" 9 #include "src/hydrogen-osr.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 #endif 110 #endif
111 111
112 // a1: Callee's JS function. 112 // a1: Callee's JS function.
113 // cp: Callee's context. 113 // cp: Callee's context.
114 // fp: Caller's frame pointer. 114 // fp: Caller's frame pointer.
115 // lr: Caller's pc. 115 // lr: Caller's pc.
116 116
117 // Sloppy mode functions and builtins need to replace the receiver with the 117 // Sloppy mode functions and builtins need to replace the receiver with the
118 // global proxy when called as functions (without an explicit receiver 118 // global proxy when called as functions (without an explicit receiver
119 // object). 119 // object).
120 if (info_->this_has_uses() && 120 if (info_->this_has_uses() && is_sloppy(info_->language_mode()) &&
121 info_->strict_mode() == SLOPPY &&
122 !info_->is_native()) { 121 !info_->is_native()) {
123 Label ok; 122 Label ok;
124 int receiver_offset = info_->scope()->num_parameters() * kPointerSize; 123 int receiver_offset = info_->scope()->num_parameters() * kPointerSize;
125 __ LoadRoot(at, Heap::kUndefinedValueRootIndex); 124 __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
126 __ ld(a2, MemOperand(sp, receiver_offset)); 125 __ ld(a2, MemOperand(sp, receiver_offset));
127 __ Branch(&ok, ne, a2, Operand(at)); 126 __ Branch(&ok, ne, a2, Operand(at));
128 127
129 __ ld(a2, GlobalObjectOperand()); 128 __ ld(a2, GlobalObjectOperand());
130 __ ld(a2, FieldMemOperand(a2, GlobalObject::kGlobalProxyOffset)); 129 __ ld(a2, FieldMemOperand(a2, GlobalObject::kGlobalProxyOffset));
131 130
(...skipping 4144 matching lines...) Expand 10 before | Expand all | Expand 10 after
4276 } 4275 }
4277 } 4276 }
4278 4277
4279 4278
4280 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { 4279 void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) {
4281 DCHECK(ToRegister(instr->context()).is(cp)); 4280 DCHECK(ToRegister(instr->context()).is(cp));
4282 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); 4281 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
4283 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); 4282 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
4284 4283
4285 __ li(StoreDescriptor::NameRegister(), Operand(instr->name())); 4284 __ li(StoreDescriptor::NameRegister(), Operand(instr->name()));
4286 Handle<Code> ic = StoreIC::initialize_stub(isolate(), instr->strict_mode()); 4285 Handle<Code> ic = StoreIC::initialize_stub(isolate(), instr->language_mode());
4287 CallCode(ic, RelocInfo::CODE_TARGET, instr); 4286 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4288 } 4287 }
4289 4288
4290 4289
4291 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { 4290 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) {
4292 Condition cc = instr->hydrogen()->allow_equality() ? hi : hs; 4291 Condition cc = instr->hydrogen()->allow_equality() ? hi : hs;
4293 Operand operand((int64_t)0); 4292 Operand operand((int64_t)0);
4294 Register reg; 4293 Register reg;
4295 if (instr->index()->IsConstantOperand()) { 4294 if (instr->index()->IsConstantOperand()) {
4296 operand = ToOperand(instr->index()); 4295 operand = ToOperand(instr->index());
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
4541 } 4540 }
4542 4541
4543 4542
4544 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 4543 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
4545 DCHECK(ToRegister(instr->context()).is(cp)); 4544 DCHECK(ToRegister(instr->context()).is(cp));
4546 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister())); 4545 DCHECK(ToRegister(instr->object()).is(StoreDescriptor::ReceiverRegister()));
4547 DCHECK(ToRegister(instr->key()).is(StoreDescriptor::NameRegister())); 4546 DCHECK(ToRegister(instr->key()).is(StoreDescriptor::NameRegister()));
4548 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister())); 4547 DCHECK(ToRegister(instr->value()).is(StoreDescriptor::ValueRegister()));
4549 4548
4550 Handle<Code> ic = 4549 Handle<Code> ic =
4551 CodeFactory::KeyedStoreIC(isolate(), instr->strict_mode()).code(); 4550 CodeFactory::KeyedStoreIC(isolate(), instr->language_mode()).code();
4552 CallCode(ic, RelocInfo::CODE_TARGET, instr); 4551 CallCode(ic, RelocInfo::CODE_TARGET, instr);
4553 } 4552 }
4554 4553
4555 4554
4556 void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) { 4555 void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) {
4557 Register object_reg = ToRegister(instr->object()); 4556 Register object_reg = ToRegister(instr->object());
4558 Register scratch = scratch0(); 4557 Register scratch = scratch0();
4559 4558
4560 Handle<Map> from_map = instr->original_map(); 4559 Handle<Map> from_map = instr->original_map();
4561 Handle<Map> to_map = instr->transitioned_map(); 4560 Handle<Map> to_map = instr->transitioned_map();
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after
5565 } 5564 }
5566 } 5565 }
5567 5566
5568 5567
5569 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { 5568 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) {
5570 DCHECK(ToRegister(instr->context()).is(cp)); 5569 DCHECK(ToRegister(instr->context()).is(cp));
5571 // Use the fast case closure allocation code that allocates in new 5570 // Use the fast case closure allocation code that allocates in new
5572 // space for nested functions that don't need literals cloning. 5571 // space for nested functions that don't need literals cloning.
5573 bool pretenure = instr->hydrogen()->pretenure(); 5572 bool pretenure = instr->hydrogen()->pretenure();
5574 if (!pretenure && instr->hydrogen()->has_no_literals()) { 5573 if (!pretenure && instr->hydrogen()->has_no_literals()) {
5575 FastNewClosureStub stub(isolate(), instr->hydrogen()->strict_mode(), 5574 FastNewClosureStub stub(isolate(), instr->hydrogen()->language_mode(),
5576 instr->hydrogen()->kind()); 5575 instr->hydrogen()->kind());
5577 __ li(a2, Operand(instr->hydrogen()->shared_info())); 5576 __ li(a2, Operand(instr->hydrogen()->shared_info()));
5578 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); 5577 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
5579 } else { 5578 } else {
5580 __ li(a2, Operand(instr->hydrogen()->shared_info())); 5579 __ li(a2, Operand(instr->hydrogen()->shared_info()));
5581 __ li(a1, Operand(pretenure ? factory()->true_value() 5580 __ li(a1, Operand(pretenure ? factory()->true_value()
5582 : factory()->false_value())); 5581 : factory()->false_value()));
5583 __ Push(cp, a2, a1); 5582 __ Push(cp, a2, a1);
5584 CallRuntime(Runtime::kNewClosure, 3, instr); 5583 CallRuntime(Runtime::kNewClosure, 3, instr);
5585 } 5584 }
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
6018 __ li(at, scope_info); 6017 __ li(at, scope_info);
6019 __ Push(at, ToRegister(instr->function())); 6018 __ Push(at, ToRegister(instr->function()));
6020 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6019 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6021 RecordSafepoint(Safepoint::kNoLazyDeopt); 6020 RecordSafepoint(Safepoint::kNoLazyDeopt);
6022 } 6021 }
6023 6022
6024 6023
6025 #undef __ 6024 #undef __
6026 6025
6027 } } // namespace v8::internal 6026 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/mips64/lithium-codegen-mips64.h ('k') | src/mips64/lithium-mips64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698