diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-22 10:45:43 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-22 10:45:43 -0700 |
| commit | dbcaebdefff26658debc29cae284ad4aa0da4c65 (patch) | |
| tree | 27821f9692d7e59bdb22aba855ff577b59fc6fd0 /chapter21/src/main/java | |
| parent | 7edca9823ec8ef0aed10c88fa07ef969792aab77 (diff) | |
| download | Simple-dbcaebdefff26658debc29cae284ad4aa0da4c65.tar.gz Simple-dbcaebdefff26658debc29cae284ad4aa0da4c65.zip | |
Split out incomplete type analysis
Diffstat (limited to 'chapter21/src/main/java')
| -rw-r--r-- | chapter21/src/main/java/com/seaofnodes/simple/node/cpus/arm/TFPARM.java | 5 |
1 files changed, 3 insertions, 2 deletions
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 { |
