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

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

Issue 346413004: Remove distinction between hidden and normal runtime functions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix natives fuzzing Created 6 years, 6 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 | Annotate | Revision Log
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/arm/lithium-codegen-arm.h" 7 #include "src/arm/lithium-codegen-arm.h"
8 #include "src/arm/lithium-gap-resolver-arm.h" 8 #include "src/arm/lithium-gap-resolver-arm.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/hydrogen-osr.h" 10 #include "src/hydrogen-osr.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 Comment(";;; Allocate local context"); 181 Comment(";;; Allocate local context");
182 bool need_write_barrier = true; 182 bool need_write_barrier = true;
183 // Argument to NewContext is the function, which is in r1. 183 // Argument to NewContext is the function, which is in r1.
184 if (heap_slots <= FastNewContextStub::kMaximumSlots) { 184 if (heap_slots <= FastNewContextStub::kMaximumSlots) {
185 FastNewContextStub stub(isolate(), heap_slots); 185 FastNewContextStub stub(isolate(), heap_slots);
186 __ CallStub(&stub); 186 __ CallStub(&stub);
187 // Result of FastNewContextStub is always in new space. 187 // Result of FastNewContextStub is always in new space.
188 need_write_barrier = false; 188 need_write_barrier = false;
189 } else { 189 } else {
190 __ push(r1); 190 __ push(r1);
191 __ CallRuntime(Runtime::kHiddenNewFunctionContext, 1); 191 __ CallRuntime(Runtime::kNewFunctionContext, 1);
192 } 192 }
193 RecordSafepoint(Safepoint::kNoLazyDeopt); 193 RecordSafepoint(Safepoint::kNoLazyDeopt);
194 // Context is returned in both r0 and cp. It replaces the context 194 // Context is returned in both r0 and cp. It replaces the context
195 // passed to us. It's saved in the stack and kept live in cp. 195 // passed to us. It's saved in the stack and kept live in cp.
196 __ mov(cp, r0); 196 __ mov(cp, r0);
197 __ str(r0, MemOperand(fp, StandardFrameConstants::kContextOffset)); 197 __ str(r0, MemOperand(fp, StandardFrameConstants::kContextOffset));
198 // Copy any necessary parameters into the context. 198 // Copy any necessary parameters into the context.
199 int num_parameters = scope()->num_parameters(); 199 int num_parameters = scope()->num_parameters();
200 for (int i = 0; i < num_parameters; i++) { 200 for (int i = 0; i < num_parameters; i++) {
201 Variable* var = scope()->parameter(i); 201 Variable* var = scope()->parameter(i);
(...skipping 3366 matching lines...) Expand 10 before | Expand all | Expand 10 after
3568 } 3568 }
3569 3569
3570 3570
3571 void LCodeGen::DoDeclareGlobals(LDeclareGlobals* instr) { 3571 void LCodeGen::DoDeclareGlobals(LDeclareGlobals* instr) {
3572 ASSERT(ToRegister(instr->context()).is(cp)); 3572 ASSERT(ToRegister(instr->context()).is(cp));
3573 __ push(cp); // The context is the first argument. 3573 __ push(cp); // The context is the first argument.
3574 __ Move(scratch0(), instr->hydrogen()->pairs()); 3574 __ Move(scratch0(), instr->hydrogen()->pairs());
3575 __ push(scratch0()); 3575 __ push(scratch0());
3576 __ mov(scratch0(), Operand(Smi::FromInt(instr->hydrogen()->flags()))); 3576 __ mov(scratch0(), Operand(Smi::FromInt(instr->hydrogen()->flags())));
3577 __ push(scratch0()); 3577 __ push(scratch0());
3578 CallRuntime(Runtime::kHiddenDeclareGlobals, 3, instr); 3578 CallRuntime(Runtime::kDeclareGlobals, 3, instr);
3579 } 3579 }
3580 3580
3581 3581
3582 void LCodeGen::CallKnownFunction(Handle<JSFunction> function, 3582 void LCodeGen::CallKnownFunction(Handle<JSFunction> function,
3583 int formal_parameter_count, 3583 int formal_parameter_count,
3584 int arity, 3584 int arity,
3585 LInstruction* instr, 3585 LInstruction* instr,
3586 R1State r1_state) { 3586 R1State r1_state) {
3587 bool dont_adapt_arguments = 3587 bool dont_adapt_arguments =
3588 formal_parameter_count == SharedFunctionInfo::kDontAdaptArgumentsSentinel; 3588 formal_parameter_count == SharedFunctionInfo::kDontAdaptArgumentsSentinel;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3659 // exponent: floating point exponent value. 3659 // exponent: floating point exponent value.
3660 3660
3661 Label allocated, slow; 3661 Label allocated, slow;
3662 __ LoadRoot(tmp4, Heap::kHeapNumberMapRootIndex); 3662 __ LoadRoot(tmp4, Heap::kHeapNumberMapRootIndex);
3663 __ AllocateHeapNumber(tmp1, tmp2, tmp3, tmp4, &slow); 3663 __ AllocateHeapNumber(tmp1, tmp2, tmp3, tmp4, &slow);
3664 __ b(&allocated); 3664 __ b(&allocated);
3665 3665
3666 // Slow case: Call the runtime system to do the number allocation. 3666 // Slow case: Call the runtime system to do the number allocation.
3667 __ bind(&slow); 3667 __ bind(&slow);
3668 3668
3669 CallRuntimeFromDeferred(Runtime::kHiddenAllocateHeapNumber, 0, instr, 3669 CallRuntimeFromDeferred(Runtime::kAllocateHeapNumber, 0, instr,
3670 instr->context()); 3670 instr->context());
3671 // Set the pointer to the new heap number in tmp. 3671 // Set the pointer to the new heap number in tmp.
3672 if (!tmp1.is(r0)) __ mov(tmp1, Operand(r0)); 3672 if (!tmp1.is(r0)) __ mov(tmp1, Operand(r0));
3673 // Restore input_reg after call to runtime. 3673 // Restore input_reg after call to runtime.
3674 __ LoadFromSafepointRegisterSlot(input, input); 3674 __ LoadFromSafepointRegisterSlot(input, input);
3675 __ ldr(exponent, FieldMemOperand(input, HeapNumber::kExponentOffset)); 3675 __ ldr(exponent, FieldMemOperand(input, HeapNumber::kExponentOffset));
3676 3676
3677 __ bind(&allocated); 3677 __ bind(&allocated);
3678 // exponent: floating point exponent value. 3678 // exponent: floating point exponent value.
3679 // tmp1: allocated heap number. 3679 // tmp1: allocated heap number.
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
4471 // DoStringCharCodeAt above. 4471 // DoStringCharCodeAt above.
4472 if (instr->index()->IsConstantOperand()) { 4472 if (instr->index()->IsConstantOperand()) {
4473 int const_index = ToInteger32(LConstantOperand::cast(instr->index())); 4473 int const_index = ToInteger32(LConstantOperand::cast(instr->index()));
4474 __ mov(scratch, Operand(Smi::FromInt(const_index))); 4474 __ mov(scratch, Operand(Smi::FromInt(const_index)));
4475 __ push(scratch); 4475 __ push(scratch);
4476 } else { 4476 } else {
4477 Register index = ToRegister(instr->index()); 4477 Register index = ToRegister(instr->index());
4478 __ SmiTag(index); 4478 __ SmiTag(index);
4479 __ push(index); 4479 __ push(index);
4480 } 4480 }
4481 CallRuntimeFromDeferred(Runtime::kHiddenStringCharCodeAt, 2, instr, 4481 CallRuntimeFromDeferred(Runtime::kStringCharCodeAtRT, 2, instr,
4482 instr->context()); 4482 instr->context());
4483 __ AssertSmi(r0); 4483 __ AssertSmi(r0);
4484 __ SmiUntag(r0); 4484 __ SmiUntag(r0);
4485 __ StoreToSafepointRegisterSlot(r0, result); 4485 __ StoreToSafepointRegisterSlot(r0, result);
4486 } 4486 }
4487 4487
4488 4488
4489 void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) { 4489 void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) {
4490 class DeferredStringCharFromCode V8_FINAL : public LDeferredCode { 4490 class DeferredStringCharFromCode V8_FINAL : public LDeferredCode {
4491 public: 4491 public:
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
4658 // TODO(3095996): Put a valid pointer value in the stack slot where the 4658 // TODO(3095996): Put a valid pointer value in the stack slot where the
4659 // result register is stored, as this register is in the pointer map, but 4659 // result register is stored, as this register is in the pointer map, but
4660 // contains an integer value. 4660 // contains an integer value.
4661 __ mov(dst, Operand::Zero()); 4661 __ mov(dst, Operand::Zero());
4662 4662
4663 // Preserve the value of all registers. 4663 // Preserve the value of all registers.
4664 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); 4664 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
4665 4665
4666 // NumberTagI and NumberTagD use the context from the frame, rather than 4666 // NumberTagI and NumberTagD use the context from the frame, rather than
4667 // the environment's HContext or HInlinedContext value. 4667 // the environment's HContext or HInlinedContext value.
4668 // They only call Runtime::kHiddenAllocateHeapNumber. 4668 // They only call Runtime::kAllocateHeapNumber.
4669 // The corresponding HChange instructions are added in a phase that does 4669 // The corresponding HChange instructions are added in a phase that does
4670 // not have easy access to the local context. 4670 // not have easy access to the local context.
4671 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 4671 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4672 __ CallRuntimeSaveDoubles(Runtime::kHiddenAllocateHeapNumber); 4672 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber);
4673 RecordSafepointWithRegisters( 4673 RecordSafepointWithRegisters(
4674 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); 4674 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt);
4675 __ sub(r0, r0, Operand(kHeapObjectTag)); 4675 __ sub(r0, r0, Operand(kHeapObjectTag));
4676 __ StoreToSafepointRegisterSlot(r0, dst); 4676 __ StoreToSafepointRegisterSlot(r0, dst);
4677 } 4677 }
4678 4678
4679 // Done. Put the value in dbl_scratch into the value of the allocated heap 4679 // Done. Put the value in dbl_scratch into the value of the allocated heap
4680 // number. 4680 // number.
4681 __ bind(&done); 4681 __ bind(&done);
4682 __ vstr(dbl_scratch, dst, HeapNumber::kValueOffset); 4682 __ vstr(dbl_scratch, dst, HeapNumber::kValueOffset);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
4722 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { 4722 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) {
4723 // TODO(3095996): Get rid of this. For now, we need to make the 4723 // TODO(3095996): Get rid of this. For now, we need to make the
4724 // result register contain a valid pointer because it is already 4724 // result register contain a valid pointer because it is already
4725 // contained in the register pointer map. 4725 // contained in the register pointer map.
4726 Register reg = ToRegister(instr->result()); 4726 Register reg = ToRegister(instr->result());
4727 __ mov(reg, Operand::Zero()); 4727 __ mov(reg, Operand::Zero());
4728 4728
4729 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); 4729 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
4730 // NumberTagI and NumberTagD use the context from the frame, rather than 4730 // NumberTagI and NumberTagD use the context from the frame, rather than
4731 // the environment's HContext or HInlinedContext value. 4731 // the environment's HContext or HInlinedContext value.
4732 // They only call Runtime::kHiddenAllocateHeapNumber. 4732 // They only call Runtime::kAllocateHeapNumber.
4733 // The corresponding HChange instructions are added in a phase that does 4733 // The corresponding HChange instructions are added in a phase that does
4734 // not have easy access to the local context. 4734 // not have easy access to the local context.
4735 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 4735 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4736 __ CallRuntimeSaveDoubles(Runtime::kHiddenAllocateHeapNumber); 4736 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber);
4737 RecordSafepointWithRegisters( 4737 RecordSafepointWithRegisters(
4738 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); 4738 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt);
4739 __ sub(r0, r0, Operand(kHeapObjectTag)); 4739 __ sub(r0, r0, Operand(kHeapObjectTag));
4740 __ StoreToSafepointRegisterSlot(r0, reg); 4740 __ StoreToSafepointRegisterSlot(r0, reg);
4741 } 4741 }
4742 4742
4743 4743
4744 void LCodeGen::DoSmiTag(LSmiTag* instr) { 4744 void LCodeGen::DoSmiTag(LSmiTag* instr) {
4745 HChange* hchange = instr->hydrogen(); 4745 HChange* hchange = instr->hydrogen();
4746 Register input = ToRegister(instr->value()); 4746 Register input = ToRegister(instr->value());
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
5340 flags = AllocateTargetSpace::update(flags, OLD_POINTER_SPACE); 5340 flags = AllocateTargetSpace::update(flags, OLD_POINTER_SPACE);
5341 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) { 5341 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) {
5342 ASSERT(!instr->hydrogen()->IsNewSpaceAllocation()); 5342 ASSERT(!instr->hydrogen()->IsNewSpaceAllocation());
5343 flags = AllocateTargetSpace::update(flags, OLD_DATA_SPACE); 5343 flags = AllocateTargetSpace::update(flags, OLD_DATA_SPACE);
5344 } else { 5344 } else {
5345 flags = AllocateTargetSpace::update(flags, NEW_SPACE); 5345 flags = AllocateTargetSpace::update(flags, NEW_SPACE);
5346 } 5346 }
5347 __ Push(Smi::FromInt(flags)); 5347 __ Push(Smi::FromInt(flags));
5348 5348
5349 CallRuntimeFromDeferred( 5349 CallRuntimeFromDeferred(
5350 Runtime::kHiddenAllocateInTargetSpace, 2, instr, instr->context()); 5350 Runtime::kAllocateInTargetSpace, 2, instr, instr->context());
5351 __ StoreToSafepointRegisterSlot(r0, result); 5351 __ StoreToSafepointRegisterSlot(r0, result);
5352 } 5352 }
5353 5353
5354 5354
5355 void LCodeGen::DoToFastProperties(LToFastProperties* instr) { 5355 void LCodeGen::DoToFastProperties(LToFastProperties* instr) {
5356 ASSERT(ToRegister(instr->value()).is(r0)); 5356 ASSERT(ToRegister(instr->value()).is(r0));
5357 __ push(r0); 5357 __ push(r0);
5358 CallRuntime(Runtime::kToFastProperties, 1, instr); 5358 CallRuntime(Runtime::kToFastProperties, 1, instr);
5359 } 5359 }
5360 5360
(...skipping 13 matching lines...) Expand all
5374 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); 5374 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
5375 __ cmp(r1, ip); 5375 __ cmp(r1, ip);
5376 __ b(ne, &materialized); 5376 __ b(ne, &materialized);
5377 5377
5378 // Create regexp literal using runtime function 5378 // Create regexp literal using runtime function
5379 // Result will be in r0. 5379 // Result will be in r0.
5380 __ mov(r5, Operand(Smi::FromInt(instr->hydrogen()->literal_index()))); 5380 __ mov(r5, Operand(Smi::FromInt(instr->hydrogen()->literal_index())));
5381 __ mov(r4, Operand(instr->hydrogen()->pattern())); 5381 __ mov(r4, Operand(instr->hydrogen()->pattern()));
5382 __ mov(r3, Operand(instr->hydrogen()->flags())); 5382 __ mov(r3, Operand(instr->hydrogen()->flags()));
5383 __ Push(r6, r5, r4, r3); 5383 __ Push(r6, r5, r4, r3);
5384 CallRuntime(Runtime::kHiddenMaterializeRegExpLiteral, 4, instr); 5384 CallRuntime(Runtime::kMaterializeRegExpLiteral, 4, instr);
5385 __ mov(r1, r0); 5385 __ mov(r1, r0);
5386 5386
5387 __ bind(&materialized); 5387 __ bind(&materialized);
5388 int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize; 5388 int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize;
5389 Label allocated, runtime_allocate; 5389 Label allocated, runtime_allocate;
5390 5390
5391 __ Allocate(size, r0, r2, r3, &runtime_allocate, TAG_OBJECT); 5391 __ Allocate(size, r0, r2, r3, &runtime_allocate, TAG_OBJECT);
5392 __ jmp(&allocated); 5392 __ jmp(&allocated);
5393 5393
5394 __ bind(&runtime_allocate); 5394 __ bind(&runtime_allocate);
5395 __ mov(r0, Operand(Smi::FromInt(size))); 5395 __ mov(r0, Operand(Smi::FromInt(size)));
5396 __ Push(r1, r0); 5396 __ Push(r1, r0);
5397 CallRuntime(Runtime::kHiddenAllocateInNewSpace, 1, instr); 5397 CallRuntime(Runtime::kAllocateInNewSpace, 1, instr);
5398 __ pop(r1); 5398 __ pop(r1);
5399 5399
5400 __ bind(&allocated); 5400 __ bind(&allocated);
5401 // Copy the content into the newly allocated memory. 5401 // Copy the content into the newly allocated memory.
5402 __ CopyFields(r0, r1, double_scratch0(), size / kPointerSize); 5402 __ CopyFields(r0, r1, double_scratch0(), size / kPointerSize);
5403 } 5403 }
5404 5404
5405 5405
5406 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { 5406 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) {
5407 ASSERT(ToRegister(instr->context()).is(cp)); 5407 ASSERT(ToRegister(instr->context()).is(cp));
5408 // Use the fast case closure allocation code that allocates in new 5408 // Use the fast case closure allocation code that allocates in new
5409 // space for nested functions that don't need literals cloning. 5409 // space for nested functions that don't need literals cloning.
5410 bool pretenure = instr->hydrogen()->pretenure(); 5410 bool pretenure = instr->hydrogen()->pretenure();
5411 if (!pretenure && instr->hydrogen()->has_no_literals()) { 5411 if (!pretenure && instr->hydrogen()->has_no_literals()) {
5412 FastNewClosureStub stub(isolate(), 5412 FastNewClosureStub stub(isolate(),
5413 instr->hydrogen()->strict_mode(), 5413 instr->hydrogen()->strict_mode(),
5414 instr->hydrogen()->is_generator()); 5414 instr->hydrogen()->is_generator());
5415 __ mov(r2, Operand(instr->hydrogen()->shared_info())); 5415 __ mov(r2, Operand(instr->hydrogen()->shared_info()));
5416 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); 5416 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
5417 } else { 5417 } else {
5418 __ mov(r2, Operand(instr->hydrogen()->shared_info())); 5418 __ mov(r2, Operand(instr->hydrogen()->shared_info()));
5419 __ mov(r1, Operand(pretenure ? factory()->true_value() 5419 __ mov(r1, Operand(pretenure ? factory()->true_value()
5420 : factory()->false_value())); 5420 : factory()->false_value()));
5421 __ Push(cp, r2, r1); 5421 __ Push(cp, r2, r1);
5422 CallRuntime(Runtime::kHiddenNewClosure, 3, instr); 5422 CallRuntime(Runtime::kNewClosure, 3, instr);
5423 } 5423 }
5424 } 5424 }
5425 5425
5426 5426
5427 void LCodeGen::DoTypeof(LTypeof* instr) { 5427 void LCodeGen::DoTypeof(LTypeof* instr) {
5428 Register input = ToRegister(instr->value()); 5428 Register input = ToRegister(instr->value());
5429 __ push(input); 5429 __ push(input);
5430 CallRuntime(Runtime::kTypeof, 1, instr); 5430 CallRuntime(Runtime::kTypeof, 1, instr);
5431 } 5431 }
5432 5432
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
5599 5599
5600 5600
5601 void LCodeGen::DoDummyUse(LDummyUse* instr) { 5601 void LCodeGen::DoDummyUse(LDummyUse* instr) {
5602 // Nothing to see here, move on! 5602 // Nothing to see here, move on!
5603 } 5603 }
5604 5604
5605 5605
5606 void LCodeGen::DoDeferredStackCheck(LStackCheck* instr) { 5606 void LCodeGen::DoDeferredStackCheck(LStackCheck* instr) {
5607 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); 5607 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
5608 LoadContextFromDeferred(instr->context()); 5608 LoadContextFromDeferred(instr->context());
5609 __ CallRuntimeSaveDoubles(Runtime::kHiddenStackGuard); 5609 __ CallRuntimeSaveDoubles(Runtime::kStackGuard);
5610 RecordSafepointWithLazyDeopt( 5610 RecordSafepointWithLazyDeopt(
5611 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); 5611 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
5612 ASSERT(instr->HasEnvironment()); 5612 ASSERT(instr->HasEnvironment());
5613 LEnvironment* env = instr->environment(); 5613 LEnvironment* env = instr->environment();
5614 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); 5614 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
5615 } 5615 }
5616 5616
5617 5617
5618 void LCodeGen::DoStackCheck(LStackCheck* instr) { 5618 void LCodeGen::DoStackCheck(LStackCheck* instr) {
5619 class DeferredStackCheck V8_FINAL : public LDeferredCode { 5619 class DeferredStackCheck V8_FINAL : public LDeferredCode {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
5825 void LCodeGen::DoStoreFrameContext(LStoreFrameContext* instr) { 5825 void LCodeGen::DoStoreFrameContext(LStoreFrameContext* instr) {
5826 Register context = ToRegister(instr->context()); 5826 Register context = ToRegister(instr->context());
5827 __ str(context, MemOperand(fp, StandardFrameConstants::kContextOffset)); 5827 __ str(context, MemOperand(fp, StandardFrameConstants::kContextOffset));
5828 } 5828 }
5829 5829
5830 5830
5831 void LCodeGen::DoAllocateBlockContext(LAllocateBlockContext* instr) { 5831 void LCodeGen::DoAllocateBlockContext(LAllocateBlockContext* instr) {
5832 Handle<ScopeInfo> scope_info = instr->scope_info(); 5832 Handle<ScopeInfo> scope_info = instr->scope_info();
5833 __ Push(scope_info); 5833 __ Push(scope_info);
5834 __ push(ToRegister(instr->function())); 5834 __ push(ToRegister(instr->function()));
5835 CallRuntime(Runtime::kHiddenPushBlockContext, 2, instr); 5835 CallRuntime(Runtime::kPushBlockContext, 2, instr);
5836 RecordSafepoint(Safepoint::kNoLazyDeopt); 5836 RecordSafepoint(Safepoint::kNoLazyDeopt);
5837 } 5837 }
5838 5838
5839 5839
5840 #undef __ 5840 #undef __
5841 5841
5842 } } // namespace v8::internal 5842 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698