If you get a crash in jit_init() then you need to fix your toolchain.
jit_State *J = L2J(L);
J->flags = jit_cpudetect() | JIT_F_ON | JIT_F_OPT_DEFAULT;
memcpy(J->param, jit_param_default, sizeof(J->param));
+#if LJ_TARGET_UNALIGNED
+ G(L)->tmptv.u64 = U64x(0000504d,4d500000);
+#endif
lj_dispatch_update(G(L));
+#if LJ_TARGET_UNALIGNED
+ /* If you get a crash below then your toolchain indicates unaligned
+ ** accesses are OK, but your kernel disagrees. I.e. fix your toolchain.
+ */
+ if (*(uint32_t *)((char *)&G(L)->tmptv + 2) != 0x504d4d50u) L->top = NULL;
+#endif
}
#endif
#define LJ_PAGESIZE 16384
#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL
+#if __ARM_FEATURE_UNALIGNED
+#define LJ_TARGET_UNALIGNED 1
+#endif
+
#define LJ_ARCH_VERSION 80
#elif LUAJIT_TARGET == LUAJIT_ARCH_PPC
static void asm_xload(ASMState *as, IRIns *ir)
{
Reg dest = ra_dest(as, ir, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR);
- lj_assertA(!(ir->op2 & IRXLOAD_UNALIGNED), "unaligned XLOAD");
+ lj_assertA(LJ_TARGET_UNALIGNED || !(ir->op2 & IRXLOAD_UNALIGNED),
+ "unaligned XLOAD");
asm_fusexref(as, asm_fxloadins(ir), dest, ir->op1, RSET_GPR);
}