OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/arm64/lithium-codegen-arm64.h" | 5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" |
6 | 6 |
7 #include "src/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" |
8 #include "src/arm64/macro-assembler-arm64-inl.h" | 8 #include "src/arm64/macro-assembler-arm64-inl.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/builtins/builtins-constructor.h" | 10 #include "src/builtins/builtins-constructor.h" |
(...skipping 1946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1957 LPointerMap* pointers = instr->pointer_map(); | 1957 LPointerMap* pointers = instr->pointer_map(); |
1958 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); | 1958 SafepointGenerator generator(this, pointers, Safepoint::kLazyDeopt); |
1959 | 1959 |
1960 if (instr->target()->IsConstantOperand()) { | 1960 if (instr->target()->IsConstantOperand()) { |
1961 LConstantOperand* target = LConstantOperand::cast(instr->target()); | 1961 LConstantOperand* target = LConstantOperand::cast(instr->target()); |
1962 Handle<Code> code = Handle<Code>::cast(ToHandle(target)); | 1962 Handle<Code> code = Handle<Code>::cast(ToHandle(target)); |
1963 generator.BeforeCall(__ CallSize(code, RelocInfo::CODE_TARGET)); | 1963 generator.BeforeCall(__ CallSize(code, RelocInfo::CODE_TARGET)); |
1964 // TODO(all): on ARM we use a call descriptor to specify a storage mode | 1964 // TODO(all): on ARM we use a call descriptor to specify a storage mode |
1965 // but on ARM64 we only have one storage mode so it isn't necessary. Check | 1965 // but on ARM64 we only have one storage mode so it isn't necessary. Check |
1966 // this understanding is correct. | 1966 // this understanding is correct. |
1967 __ Call(code, RelocInfo::CODE_TARGET, TypeFeedbackId::None()); | 1967 __ Call(code, RelocInfo::CODE_TARGET); |
1968 } else { | 1968 } else { |
1969 DCHECK(instr->target()->IsRegister()); | 1969 DCHECK(instr->target()->IsRegister()); |
1970 Register target = ToRegister(instr->target()); | 1970 Register target = ToRegister(instr->target()); |
1971 generator.BeforeCall(__ CallSize(target)); | 1971 generator.BeforeCall(__ CallSize(target)); |
1972 __ Add(target, target, Code::kHeaderSize - kHeapObjectTag); | 1972 __ Add(target, target, Code::kHeaderSize - kHeapObjectTag); |
1973 __ Call(target); | 1973 __ Call(target); |
1974 } | 1974 } |
1975 generator.AfterCall(); | 1975 generator.AfterCall(); |
1976 } | 1976 } |
1977 | 1977 |
(...skipping 3587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5565 // Index is equal to negated out of object property index plus 1. | 5565 // Index is equal to negated out of object property index plus 1. |
5566 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 5566 __ Sub(result, result, Operand::UntagSmiAndScale(index, kPointerSizeLog2)); |
5567 __ Ldr(result, FieldMemOperand(result, | 5567 __ Ldr(result, FieldMemOperand(result, |
5568 FixedArray::kHeaderSize - kPointerSize)); | 5568 FixedArray::kHeaderSize - kPointerSize)); |
5569 __ Bind(deferred->exit()); | 5569 __ Bind(deferred->exit()); |
5570 __ Bind(&done); | 5570 __ Bind(&done); |
5571 } | 5571 } |
5572 | 5572 |
5573 } // namespace internal | 5573 } // namespace internal |
5574 } // namespace v8 | 5574 } // namespace v8 |
OLD | NEW |