OLD | NEW |
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/crankshaft/arm/lithium-codegen-arm.h" | 5 #include "src/crankshaft/arm/lithium-codegen-arm.h" |
6 | 6 |
7 #include "src/assembler-inl.h" | 7 #include "src/assembler-inl.h" |
8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
9 #include "src/builtins/builtins-constructor.h" | 9 #include "src/builtins/builtins-constructor.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 | 664 |
665 void LCodeGen::CallCodeGeneric(Handle<Code> code, | 665 void LCodeGen::CallCodeGeneric(Handle<Code> code, |
666 RelocInfo::Mode mode, | 666 RelocInfo::Mode mode, |
667 LInstruction* instr, | 667 LInstruction* instr, |
668 SafepointMode safepoint_mode, | 668 SafepointMode safepoint_mode, |
669 TargetAddressStorageMode storage_mode) { | 669 TargetAddressStorageMode storage_mode) { |
670 DCHECK(instr != NULL); | 670 DCHECK(instr != NULL); |
671 // Block literal pool emission to ensure nop indicating no inlined smi code | 671 // Block literal pool emission to ensure nop indicating no inlined smi code |
672 // is in the correct position. | 672 // is in the correct position. |
673 Assembler::BlockConstPoolScope block_const_pool(masm()); | 673 Assembler::BlockConstPoolScope block_const_pool(masm()); |
674 __ Call(code, mode, TypeFeedbackId::None(), al, storage_mode, false); | 674 __ Call(code, mode, al, storage_mode, false); |
675 RecordSafepointWithLazyDeopt(instr, safepoint_mode); | 675 RecordSafepointWithLazyDeopt(instr, safepoint_mode); |
676 | 676 |
677 // Signal that we don't inline smi code before these stubs in the | 677 // Signal that we don't inline smi code before these stubs in the |
678 // optimizing code generator. | 678 // optimizing code generator. |
679 if (code->kind() == Code::BINARY_OP_IC || | 679 if (code->kind() == Code::BINARY_OP_IC || |
680 code->kind() == Code::COMPARE_IC) { | 680 code->kind() == Code::COMPARE_IC) { |
681 __ nop(); | 681 __ nop(); |
682 } | 682 } |
683 } | 683 } |
684 | 684 |
(...skipping 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3551 LPointerMap* pointers = instr->pointer_map(); | 3551 LPointerMap* pointers = instr->pointer_map(); |
3552 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); | 3552 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); |
3553 | 3553 |
3554 if (instr->target()->IsConstantOperand()) { | 3554 if (instr->target()->IsConstantOperand()) { |
3555 LConstantOperand* target = LConstantOperand::cast(instr->target()); | 3555 LConstantOperand* target = LConstantOperand::cast(instr->target()); |
3556 Handle<Code> code = Handle<Code>::cast(ToHandle(target)); | 3556 Handle<Code> code = Handle<Code>::cast(ToHandle(target)); |
3557 generator.BeforeCall(__ CallSize(code, RelocInfo::CODE_TARGET)); | 3557 generator.BeforeCall(__ CallSize(code, RelocInfo::CODE_TARGET)); |
3558 PlatformInterfaceDescriptor* call_descriptor = | 3558 PlatformInterfaceDescriptor* call_descriptor = |
3559 instr->descriptor().platform_specific_descriptor(); | 3559 instr->descriptor().platform_specific_descriptor(); |
3560 if (call_descriptor != NULL) { | 3560 if (call_descriptor != NULL) { |
3561 __ Call(code, RelocInfo::CODE_TARGET, TypeFeedbackId::None(), al, | 3561 __ Call(code, RelocInfo::CODE_TARGET, al, |
3562 call_descriptor->storage_mode()); | 3562 call_descriptor->storage_mode()); |
3563 } else { | 3563 } else { |
3564 __ Call(code, RelocInfo::CODE_TARGET, TypeFeedbackId::None(), al); | 3564 __ Call(code, RelocInfo::CODE_TARGET, al); |
3565 } | 3565 } |
3566 } else { | 3566 } else { |
3567 DCHECK(instr->target()->IsRegister()); | 3567 DCHECK(instr->target()->IsRegister()); |
3568 Register target = ToRegister(instr->target()); | 3568 Register target = ToRegister(instr->target()); |
3569 generator.BeforeCall(__ CallSize(target)); | 3569 generator.BeforeCall(__ CallSize(target)); |
3570 // Make sure we don't emit any additional entries in the constant pool | 3570 // Make sure we don't emit any additional entries in the constant pool |
3571 // before the call to ensure that the CallCodeSize() calculated the | 3571 // before the call to ensure that the CallCodeSize() calculated the |
3572 // correct | 3572 // correct |
3573 // number of instructions for the constant pool load. | 3573 // number of instructions for the constant pool load. |
3574 { | 3574 { |
(...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5360 __ ldr(result, FieldMemOperand(scratch, | 5360 __ ldr(result, FieldMemOperand(scratch, |
5361 FixedArray::kHeaderSize - kPointerSize)); | 5361 FixedArray::kHeaderSize - kPointerSize)); |
5362 __ bind(deferred->exit()); | 5362 __ bind(deferred->exit()); |
5363 __ bind(&done); | 5363 __ bind(&done); |
5364 } | 5364 } |
5365 | 5365 |
5366 #undef __ | 5366 #undef __ |
5367 | 5367 |
5368 } // namespace internal | 5368 } // namespace internal |
5369 } // namespace v8 | 5369 } // namespace v8 |
OLD | NEW |