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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/division-by-constant.h" | 10 #include "src/base/division-by-constant.h" |
(...skipping 4532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4543 Bind(&loop_again); | 4543 Bind(&loop_again); |
4544 Ldr(current, FieldMemOperand(current, HeapObject::kMapOffset)); | 4544 Ldr(current, FieldMemOperand(current, HeapObject::kMapOffset)); |
4545 Ldrb(scratch1, FieldMemOperand(current, Map::kBitField2Offset)); | 4545 Ldrb(scratch1, FieldMemOperand(current, Map::kBitField2Offset)); |
4546 DecodeField<Map::ElementsKindBits>(scratch1); | 4546 DecodeField<Map::ElementsKindBits>(scratch1); |
4547 CompareAndBranch(scratch1, DICTIONARY_ELEMENTS, eq, found); | 4547 CompareAndBranch(scratch1, DICTIONARY_ELEMENTS, eq, found); |
4548 Ldr(current, FieldMemOperand(current, Map::kPrototypeOffset)); | 4548 Ldr(current, FieldMemOperand(current, Map::kPrototypeOffset)); |
4549 CompareAndBranch(current, Operand(factory->null_value()), ne, &loop_again); | 4549 CompareAndBranch(current, Operand(factory->null_value()), ne, &loop_again); |
4550 } | 4550 } |
4551 | 4551 |
4552 | 4552 |
| 4553 void MacroAssembler::OSRDropVectorFromStack(int unoptimized_slot_count, |
| 4554 Register scratch0, |
| 4555 Register scratch1) { |
| 4556 DCHECK(jssp.Is(__ StackPointer())); |
| 4557 if (unoptimized_slot_count > 0) { |
| 4558 Label loop_start; |
| 4559 Add(scratch0, fp, JavaScriptFrameConstants::kFeedbackVectorOffset); |
| 4560 bind(&loop_start); |
| 4561 Ldr(scratch1, MemOperand(scratch0, -1 * kPointerSize)); |
| 4562 Str(scratch1, MemOperand(scratch0, 0)); |
| 4563 Sub(scratch0, scratch0, kPointerSize); |
| 4564 Cmp(scratch0, jssp); |
| 4565 B(gt, &loop_start); |
| 4566 } |
| 4567 Add(jssp, jssp, kPointerSize); |
| 4568 } |
| 4569 |
| 4570 |
4553 void MacroAssembler::GetRelocatedValueLocation(Register ldr_location, | 4571 void MacroAssembler::GetRelocatedValueLocation(Register ldr_location, |
4554 Register result) { | 4572 Register result) { |
4555 DCHECK(!result.Is(ldr_location)); | 4573 DCHECK(!result.Is(ldr_location)); |
4556 const uint32_t kLdrLitOffset_lsb = 5; | 4574 const uint32_t kLdrLitOffset_lsb = 5; |
4557 const uint32_t kLdrLitOffset_width = 19; | 4575 const uint32_t kLdrLitOffset_width = 19; |
4558 Ldr(result, MemOperand(ldr_location)); | 4576 Ldr(result, MemOperand(ldr_location)); |
4559 if (emit_debug_code()) { | 4577 if (emit_debug_code()) { |
4560 And(result, result, LoadLiteralFMask); | 4578 And(result, result, LoadLiteralFMask); |
4561 Cmp(result, LoadLiteralFixed); | 4579 Cmp(result, LoadLiteralFixed); |
4562 Check(eq, kTheInstructionToPatchShouldBeAnLdrLiteral); | 4580 Check(eq, kTheInstructionToPatchShouldBeAnLdrLiteral); |
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5261 } | 5279 } |
5262 } | 5280 } |
5263 | 5281 |
5264 | 5282 |
5265 #undef __ | 5283 #undef __ |
5266 | 5284 |
5267 | 5285 |
5268 } } // namespace v8::internal | 5286 } } // namespace v8::internal |
5269 | 5287 |
5270 #endif // V8_TARGET_ARCH_ARM64 | 5288 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |