| 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 |