Lines Matching full:adrp
70 // Count the number of ADRP insns as the upper bound on the number of thunks needed
84 // Now that we have the actual offset where the code will be placed, locate the ADRP insns
176 // Check it's an ADRP with imm == 0 (unset).
185 uint32_t adrp = PatchAdrp(insn, adrp_disp);
200 SetInsn(¤t_method_thunks_, thunks_code_offset, adrp);
208 // Write the new ADRP (or B to the erratum 843419 thunk).
221 uint32_t adrp = GetInsn(code, pc_insn_offset);
222 if ((adrp & 0x9f000000u) != 0x90000000u) {
224 CHECK_EQ(adrp & 0xfc000000u, 0x14000000u); // B <thunk>
233 adrp = GetInsn(¤t_method_thunks_, idx * kAdrpThunkSize);
238 CHECK_EQ(adrp & 0x9f00001fu, // Check that pc_insn_offset points
239 0x90000000 | ((insn >> 5) & 0x1fu)); // to ADRP with matching register.
264 uint32_t Arm64RelativePatcher::PatchAdrp(uint32_t adrp, uint32_t disp) {
265 return (adrp & 0x9f00001fu) | // Clear offset bits, keep ADRP with destination reg.
283 uint32_t adrp = GetInsn(code, literal_offset);
284 DCHECK_EQ(adrp & 0x9f000000, 0x90000000);
288 // Below we avoid patching sequences where the adrp is followed by a load which can easily
291 // First check if the next insn is the LDR using the result of the ADRP.
292 // LDR <Wt>, [<Xn>, #pimm], where <Xn> == ADRP destination reg.
294 (((next_insn >> 5) ^ adrp) & 0x1f) == 0) {
298 // And since LinkerPatch::Type::kStringRelative is using the result of the ADRP
300 // ADD/ADDS/SUB/SUBS immediate that either uses the ADRP destination or stores
303 ((((next_insn >> 5) ^ adrp) & 0x1f) == 0 || ((next_insn ^ adrp) & 0x1f) != 0)) {