| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_ASSEMBLER_ARM_H_ | 5 #ifndef VM_ASSEMBLER_ARM_H_ |
| 6 #define VM_ASSEMBLER_ARM_H_ | 6 #define VM_ASSEMBLER_ARM_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_arm.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 ASSERT(Utils::IsAbsoluteUint(12, offset)); | 244 ASSERT(Utils::IsAbsoluteUint(12, offset)); |
| 245 kind_ = Immediate; | 245 kind_ = Immediate; |
| 246 if (offset < 0) { | 246 if (offset < 0) { |
| 247 encoding_ = (am ^ (1 << kUShift)) | -offset; // Flip U to adjust sign. | 247 encoding_ = (am ^ (1 << kUShift)) | -offset; // Flip U to adjust sign. |
| 248 } else { | 248 } else { |
| 249 encoding_ = am | offset; | 249 encoding_ = am | offset; |
| 250 } | 250 } |
| 251 encoding_ |= static_cast<uint32_t>(rn) << kRnShift; | 251 encoding_ |= static_cast<uint32_t>(rn) << kRnShift; |
| 252 } | 252 } |
| 253 | 253 |
| 254 explicit Address(Register rn, Register rm, Shift shift = LSL, | 254 Address(Register rn, Register rm, |
| 255 uint32_t shift_imm = 0, Mode am = Offset) { | 255 Shift shift = LSL, uint32_t shift_imm = 0, Mode am = Offset) { |
| 256 ShifterOperand so(rm, shift, shift_imm); | 256 ShifterOperand so(rm, shift, shift_imm); |
| 257 | 257 |
| 258 kind_ = ShiftedRegister; | 258 kind_ = ShiftedRegister; |
| 259 encoding_ = so.encoding() | am | (static_cast<uint32_t>(rn) << kRnShift); | 259 encoding_ = so.encoding() | am | (static_cast<uint32_t>(rn) << kRnShift); |
| 260 } | 260 } |
| 261 | 261 |
| 262 static bool CanHoldLoadOffset(LoadOperandType type, | 262 static bool CanHoldLoadOffset(LoadOperandType type, |
| 263 int32_t offset, | 263 int32_t offset, |
| 264 int32_t* offset_mask); | 264 int32_t* offset_mask); |
| 265 static bool CanHoldStoreOffset(StoreOperandType type, | 265 static bool CanHoldStoreOffset(StoreOperandType type, |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 void CallRuntime(const RuntimeEntry& entry); | 632 void CallRuntime(const RuntimeEntry& entry); |
| 633 | 633 |
| 634 // Set up a Dart frame on entry with a frame pointer and PC information to | 634 // Set up a Dart frame on entry with a frame pointer and PC information to |
| 635 // enable easy access to the RawInstruction object of code corresponding | 635 // enable easy access to the RawInstruction object of code corresponding |
| 636 // to this frame. | 636 // to this frame. |
| 637 void EnterDartFrame(intptr_t frame_size); | 637 void EnterDartFrame(intptr_t frame_size); |
| 638 void LeaveDartFrame(); | 638 void LeaveDartFrame(); |
| 639 | 639 |
| 640 // Set up a stub frame so that the stack traversal code can easily identify | 640 // Set up a stub frame so that the stack traversal code can easily identify |
| 641 // a stub frame. | 641 // a stub frame. |
| 642 void EnterStubFrame(); | 642 void EnterStubFrame(bool uses_pp = false); |
| 643 void LeaveStubFrame(); | 643 void LeaveStubFrame(bool uses_pp = false); |
| 644 | 644 |
| 645 // Instruction pattern from entrypoint is used in Dart frame prologs | 645 // Instruction pattern from entrypoint is used in Dart frame prologs |
| 646 // to set up the frame and save a PC which can be used to figure out the | 646 // to set up the frame and save a PC which can be used to figure out the |
| 647 // RawInstruction object corresponding to the code running in the frame. | 647 // RawInstruction object corresponding to the code running in the frame. |
| 648 static const intptr_t kOffsetOfSavedPCfromEntrypoint = Instr::kPCReadOffset; | 648 static const intptr_t kOffsetOfSavedPCfromEntrypoint = Instr::kPCReadOffset; |
| 649 | 649 |
| 650 // Inlined allocation of an instance of class 'cls', code has no runtime | 650 // Inlined allocation of an instance of class 'cls', code has no runtime |
| 651 // calls. Jump to 'failure' if the instance cannot be allocated here. | 651 // calls. Jump to 'failure' if the instance cannot be allocated here. |
| 652 // Allocated instance is returned in 'instance_reg'. | 652 // Allocated instance is returned in 'instance_reg'. |
| 653 // Only the tags field of the object is initialized. | 653 // Only the tags field of the object is initialized. |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 return *reg1 - *reg2; | 783 return *reg1 - *reg2; |
| 784 } | 784 } |
| 785 | 785 |
| 786 DISALLOW_ALLOCATION(); | 786 DISALLOW_ALLOCATION(); |
| 787 DISALLOW_COPY_AND_ASSIGN(Assembler); | 787 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 788 }; | 788 }; |
| 789 | 789 |
| 790 } // namespace dart | 790 } // namespace dart |
| 791 | 791 |
| 792 #endif // VM_ASSEMBLER_ARM_H_ | 792 #endif // VM_ASSEMBLER_ARM_H_ |
| OLD | NEW |