Fix comment about ADRP to reflect reality.
authorTaylor R Campbell <campbell@mumble.net>
Fri, 25 Jan 2019 04:31:15 +0000 (04:31 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 21 Aug 2019 21:34:06 +0000 (21:34 +0000)
src/microcode/cmpintmd/aarch64.c

index 54aa33e5ca0c65aa9b45f5cc42c375ba63000593..af2c6f3b5caed0a1a6574e667e612bcaae7797e2 100644 (file)
@@ -270,9 +270,9 @@ write_uuo_insns (insn_t * target, insn_t * iaddr, int pcrel)
        }
       else
        {
-         /* ADRP takes 21-bit signed number of 4096-byte pages, and
-            adds that many 4096-byte pages to the PC.  We then need to
-            add the offset within a page of the target.  */
+         /* ADRP computes PC - (PC mod 2^12) + 2^12*offset.  We know
+            target - PC, and we want target.  First we add the page
+            offset; then we add target's location in its page.  */
          uintptr_t from_pg = (((uintptr_t) from_pc) >> 12);
          uintptr_t to_pg = (((uintptr_t) to_pc) >> 12);
          ptrdiff_t pgoff = (((intptr_t) to_pg) - ((intptr_t) from_pg));