aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dynasm/dasm_arm64.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/dynasm/dasm_arm64.h b/dynasm/dasm_arm64.h
index 8d1d9a96..d6da4528 100644
--- a/dynasm/dasm_arm64.h
+++ b/dynasm/dasm_arm64.h
@@ -473,7 +473,13 @@ int dasm_encode(Dst_DECL, void *buffer)
473 } 473 }
474 break; 474 break;
475 case DASM_REL_A: { 475 case DASM_REL_A: {
476 ptrdiff_t na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n) - (ptrdiff_t)cp + 4; 476 ptrdiff_t na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n);
477 if ((ins & 0x3000) == 0x3000) { /* ADRP */
478 ins &= ~0x1000;
479 na = (na >> 12) - (((ptrdiff_t)cp - 4) >> 12);
480 } else {
481 na = na - (ptrdiff_t)cp + 4;
482 }
477 n = (int)na; 483 n = (int)na;
478 CK((ptrdiff_t)n == na, RANGE_REL); 484 CK((ptrdiff_t)n == na, RANGE_REL);
479 goto patchrel; 485 goto patchrel;