From d2e7ce5714a4cda3ecd7d122477c0035b15f2218 Mon Sep 17 00:00:00 2001 From: Zhongwei Yao Date: Thu, 1 Dec 2016 18:05:38 +0800 Subject: [PATCH] Fix error in const pointer load on ARM64 code generator The mcp value in mcpofs is pointing to previous position of machine code. So the real offset between pc and test pointer should be 1 more than the difference between mcp and test pointer. Change-Id: I7d3fbc3371b295deb7566795fdabf77467306791 --- src/lj_emit_arm64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lj_emit_arm64.h b/src/lj_emit_arm64.h index 1eb14204..7a5321c5 100644 --- a/src/lj_emit_arm64.h +++ b/src/lj_emit_arm64.h @@ -234,7 +234,7 @@ static void emit_loadk(ASMState *as, Reg rd, uint64_t u64, int is64) #define glofs(as, k) \ ((intptr_t)((uintptr_t)(k) - (uintptr_t)&J2GG(as->J)->g)) #define mcpofs(as, k) \ - ((intptr_t)((uintptr_t)(k) - (uintptr_t)as->mcp)) + ((intptr_t)((uintptr_t)(k) - (uintptr_t)(as->mcp - 1))) #define checkmcpofs(as, k) \ ((((mcpofs(as, k)>>2) + 0x00040000) >> 19) == 0)