Lines Matching full:vixl
31 // TODO(VIXL): Make VIXL compile with -Wshadow.
48 static constexpr int kMaxMacroInstructionSizeInBytes = 15 * vixl::aarch64::kInstructionSize;
51 static const vixl::aarch64::Register kParameterCoreRegisters[] = {
52 vixl::aarch64::x1,
53 vixl::aarch64::x2,
54 vixl::aarch64::x3,
55 vixl::aarch64::x4,
56 vixl::aarch64::x5,
57 vixl::aarch64::x6,
58 vixl::aarch64::x7
61 static const vixl::aarch64::FPRegister kParameterFPRegisters[] = {
62 vixl::aarch64::d0,
63 vixl::aarch64::d1,
64 vixl::aarch64::d2,
65 vixl::aarch64::d3,
66 vixl::aarch64::d4,
67 vixl::aarch64::d5,
68 vixl::aarch64::d6,
69 vixl::aarch64::d7
74 const vixl::aarch64::Register tr = vixl::aarch64::x19;
76 const vixl::aarch64::Register mr = vixl::aarch64::x20;
78 static const vixl::aarch64::Register kArtMethodRegister = vixl::aarch64::x0;
79 const vixl::aarch64::CPURegList vixl_reserved_core_registers(vixl::aarch64::ip0,
80 vixl::aarch64::ip1);
81 const vixl::aarch64::CPURegList vixl_reserved_fp_registers(vixl::aarch64::d31);
83 const vixl::aarch64::CPURegList runtime_reserved_core_registers =
84 vixl::aarch64::CPURegList(
87 ((kEmitCompilerReadBarrier && kUseBakerReadBarrier) ? mr : vixl::aarch64::NoCPUReg),
88 vixl::aarch64::lr);
92 const vixl::aarch64::CPURegList callee_saved_core_registers(
93 vixl::aarch64::CPURegister::kRegister,
94 vixl::aarch64::kXRegSize,
96 ? vixl::aarch64::x21.GetCode()
97 : vixl::aarch64::x20.GetCode()),
98 vixl::aarch64::x30.GetCode());
99 const vixl::aarch64::CPURegList callee_saved_fp_registers(vixl::aarch64::CPURegister::kFPRegister,
100 vixl::aarch64::kDRegSize,
101 vixl::aarch64::d8.GetCode(),
102 vixl::aarch64::d15.GetCode());
110 vixl::aarch64::Label* GetEntryLabel() { return &entry_label_; }
111 vixl::aarch64::Label* GetExitLabel() { return &exit_label_; }
117 vixl::aarch64::Label entry_label_;
118 vixl::aarch64::Label exit_label_;
128 vixl::aarch64::Label* GetTableStartLabel() { return &table_start_; }
134 vixl::aarch64::Label table_start_;
139 static const vixl::aarch64::Register kRuntimeParameterCoreRegisters[] =
140 { vixl::aarch64::x0,
141 vixl::aarch64::x1,
142 vixl::aarch64::x2,
143 vixl::aarch64::x3,
144 vixl::aarch64::x4,
145 vixl::aarch64::x5,
146 vixl::aarch64::x6,
147 vixl::aarch64::x7 };
150 static const vixl::aarch64::FPRegister kRuntimeParameterFpuRegisters[] =
151 { vixl::aarch64::d0,
152 vixl::aarch64::d1,
153 vixl::aarch64::d2,
154 vixl::aarch64::d3,
155 vixl::aarch64::d4,
156 vixl::aarch64::d5,
157 vixl::aarch64::d6,
158 vixl::aarch64::d7 };
162 class InvokeRuntimeCallingConvention : public CallingConvention<vixl::aarch64::Register,
163 vixl::aarch64::FPRegister> {
180 class InvokeDexCallingConvention : public CallingConvention<vixl::aarch64::Register,
181 vixl::aarch64::FPRegister> {
221 return helpers::LocationFrom(vixl::aarch64::x1);
224 return helpers::LocationFrom(vixl::aarch64::x0);
227 return helpers::LocationFrom(vixl::aarch64::x0);
232 ? helpers::LocationFrom(vixl::aarch64::x2)
233 : helpers::LocationFrom(vixl::aarch64::x1);
236 return helpers::LocationFrom(vixl::aarch64::d0);
262 vixl::aarch64::MacroAssembler* GetVIXLAssembler() { return GetAssembler()->GetVIXLAssembler(); }
266 vixl::aarch64::Register class_reg);
313 vixl::aarch64::Register obj,
315 vixl::aarch64::Label* fixup_label,
324 vixl::aarch64::Label* true_target,
325 vixl::aarch64::Label* false_target);
332 vixl::aarch64::MemOperand VecAddress(
335 vixl::aarch64::UseScratchRegisterScope* temps_scope,
338 /*out*/ vixl::aarch64::Register* scratch);
393 vixl::aarch64::MacroAssembler* GetVIXLAssembler() const {
398 vixl::aarch64::UseScratchRegisterScope vixl_temps_;
414 vixl::aarch64::CPURegList GetFramePreservedCoreRegisters() const;
415 vixl::aarch64::CPURegList GetFramePreservedFPRegisters() const;
419 vixl::aarch64::Label* GetLabelOf(HBasicBlock* block) {
435 vixl::aarch64::Label* block_entry_label = GetLabelOf(block);
444 vixl::aarch64::MacroAssembler* GetVIXLAssembler() { return GetAssembler()->GetVIXLAssembler(); }
447 void MarkGCCard(vixl::aarch64::Register object,
448 vixl::aarch64::Register value,
468 static const int kNumberOfAllocatableRegisters = vixl::aarch64::kNumberOfRegisters - 1;
469 static const int kNumberOfAllocatableFPRegisters = vixl::aarch64::kNumberOfFPRegisters;
489 uint32_t GetPreferredSlotsAlignment() const OVERRIDE { return vixl::aarch64::kXRegSizeInBytes; }
499 void MoveConstant(vixl::aarch64::CPURegister destination, HConstant* constant);
505 vixl::aarch64::CPURegister dst,
506 const vixl::aarch64::MemOperand& src);
508 vixl::aarch64::CPURegister src,
509 const vixl::aarch64::MemOperand& dst);
511 vixl::aarch64::CPURegister dst,
512 const vixl::aarch64::MemOperand& src,
516 vixl::aarch64::CPURegister src,
517 const vixl::aarch64::MemOperand& dst,
568 vixl::aarch64::Label* NewBootImageMethodPatch(MethodReference target_method,
569 vixl::aarch64::Label* adrp_label = nullptr);
575 vixl::aarch64::Label* NewMethodBssEntryPatch(MethodReference target_method,
576 vixl::aarch64::Label* adrp_label = nullptr);
582 vixl::aarch64::Label* NewBootImageTypePatch(const DexFile& dex_file,
584 vixl::aarch64::Label* adrp_label = nullptr);
590 vixl::aarch64::Label* NewBssEntryTypePatch(const DexFile& dex_file,
592 vixl::aarch64::Label* adrp_label = nullptr);
598 vixl::aarch64::Label* NewBootImageStringPatch(const DexFile& dex_file,
600 vixl::aarch64::Label* adrp_label = nullptr);
606 vixl::aarch64::Label* NewStringBssEntryPatch(const DexFile& dex_file,
608 vixl::aarch64::Label* adrp_label = nullptr);
612 vixl::aarch64::Label* NewBakerReadBarrierPatch(uint32_t custom_data);
614 vixl::aarch64::Literal<uint32_t>* DeduplicateBootImageAddressLiteral(uint64_t address);
615 vixl::aarch64::Literal<uint32_t>* DeduplicateJitStringLiteral(const DexFile& dex_file,
618 vixl::aarch64::Literal<uint32_t>* DeduplicateJitClassLiteral(const DexFile& dex_file,
622 void EmitAdrpPlaceholder(vixl::aarch64::Label* fixup_label, vixl::aarch64::Register reg);
623 void EmitAddPlaceholder(vixl::aarch64::Label* fixup_label,
624 vixl::aarch64::Register out,
625 vixl::aarch64::Register base);
626 void EmitLdrOffsetPlaceholder(vixl::aarch64::Label* fixup_label,
627 vixl::aarch64::Register out,
628 vixl::aarch64::Register base);
638 vixl::aarch64::Register obj,
647 vixl::aarch64::Register obj,
650 vixl::aarch64::Register temp,
660 vixl::aarch64::Register obj,
664 vixl::aarch64::Register temp,
682 vixl::aarch64::Register obj,
684 vixl::aarch64::Register temp,
691 vixl::aarch64::Register obj,
768 using Uint64ToLiteralMap = ArenaSafeMap<uint64_t, vixl::aarch64::Literal<uint64_t>*>;
769 using Uint32ToLiteralMap = ArenaSafeMap<uint32_t, vixl::aarch64::Literal<uint32_t>*>;
771 vixl::aarch64::Literal<uint32_t>*,
774 vixl::aarch64::Literal<uint32_t>*,
777 vixl::aarch64::Literal<uint32_t>* DeduplicateUint32Literal(uint32_t value);
778 vixl::aarch64::Literal<uint64_t>* DeduplicateUint64Literal(uint64_t value);
782 struct PcRelativePatchInfo : PatchInfo<vixl::aarch64::Label> {
784 : PatchInfo<vixl::aarch64::Label>(dex_file, off_or_idx), pc_insn_label() { }
786 vixl::aarch64::Label* pc_insn_label;
792 vixl::aarch64::Label label;
796 vixl::aarch64::Label* NewPcRelativePatch(const DexFile* dex_file,
798 vixl::aarch64::Label* adrp_label,
808 // We use a deque so that the `vixl::aarch64::Label` objects do not move in memory.
809 ArenaDeque<vixl::aarch64::Label> block_labels_; // Indexed by block id.
810 vixl::aarch64::Label frame_entry_label_;