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