From fcc824489914bd4f23c3a49ff9f32fb23cd53c48 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 2 Oct 2016 14:24:04 +0200 Subject: [PATCH] ARM: Fix BLX encoding for Thumb interworking calls. Thanks to Charles Baylis. --- src/lj_emit_arm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lj_emit_arm.h b/src/lj_emit_arm.h index 7f73698d..610bc6c5 100644 --- a/src/lj_emit_arm.h +++ b/src/lj_emit_arm.h @@ -273,7 +273,7 @@ static void emit_call(ASMState *as, void *target) ptrdiff_t delta = ((char *)target - (char *)p) - 8; if ((((delta>>2) + 0x00800000) >> 24) == 0) { if ((delta & 1)) - *p = ARMI_BLX | ((uint32_t)(delta>>2) & 0x00ffffffu) | ((delta&2) << 27); + *p = ARMI_BLX | ((uint32_t)(delta>>2) & 0x00ffffffu) | ((delta&2) << 23); else *p = ARMI_BL | ((uint32_t)(delta>>2) & 0x00ffffffu); } else { /* Target out of range: need indirect call. But don't use R0-R3. */