Skip to content

Commit 88631e3

Browse files
committed
DynASM/ARM64: Fix ADRP encoding with absolute address.
(Switch to Mike Pall's version)
1 parent bf42cf5 commit 88631e3

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

ext/opcache/jit/dynasm/dasm_arm64.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -482,11 +482,12 @@ int dasm_encode(Dst_DECL, void *buffer)
482482
}
483483
break;
484484
case DASM_REL_A: {
485-
ptrdiff_t na;
485+
ptrdiff_t na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n);
486486
if ((ins & 0x3000) == 0x3000) { /* ADRP */
487-
na = ((((ptrdiff_t)(*b++) << 32) | (unsigned int)n) & ~0xfff) - (((ptrdiff_t)cp - 4) & ~0xfff);;
487+
ins &= ~0x1000;
488+
na = (na >> 12) - (((ptrdiff_t)cp - 4) >> 12);
488489
} else {
489-
na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n) - (ptrdiff_t)cp + 4;
490+
na = na - (ptrdiff_t)cp + 4;
490491
}
491492
n = (int)na;
492493
CK_REL((ptrdiff_t)n == na, na);

0 commit comments

Comments
 (0)