From dbcaebdefff26658debc29cae284ad4aa0da4c65 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 22 Oct 2026 10:45:43 -0700 Subject: Split out incomplete type analysis --- .../src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'chapter21/src/main/java/com') diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java index 1f2b6a37..d4443f4c 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java @@ -37,8 +37,9 @@ public class TFPARM extends ConstantNode implements MachNode, RIPRelSize { // opstart of add int next = opStart + opLen; int adrp_delta = delta >> 12; - // patch upper 20 bits via adrp - enc.patch4(opStart, Arm64.adrp(1, adrp_delta & 0b11, 0b10000, adrp_delta >> 2, rpc)); + // ADRP splits a signed page offset into two unsigned bit fields. + // Mask the high field too, including for an address below this PC. + enc.patch4(opStart, Arm64.adrp(1, adrp_delta & 0b11, 0b10000, (adrp_delta >> 2) & 0x7FFFF, rpc)); // low 12 bits via add enc.patch4(next, Arm64.imm_inst_l(Arm64.OPI_ADD, delta & 0xfff, rpc)); } else { -- cgit v1.2.3