From 11d6f5764e35bdddae7a4aaf23fd859eecb48c8f Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 24 Feb 2015 20:57:12 -0500 Subject: Add unaligned read/write functions. I thought I could get away without since I wasn't (presently) targeting systems without hardware support for unaligned accesses, but on armv7 clang insists on optimizing into the one ARM instruction that requires alignment anyway - LDM/STM. Oops. Damnit, clang. --- lib/arm64/dis-main.inc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/arm64') diff --git a/lib/arm64/dis-main.inc.h b/lib/arm64/dis-main.inc.h index a009189..cb24065 100644 --- a/lib/arm64/dis-main.inc.h +++ b/lib/arm64/dis-main.inc.h @@ -65,7 +65,7 @@ static INLINE void P(GPR64_Rn_2_BLR)(tdis_ctx ctx, UNUSED struct bitslice Rn) { } static INLINE void P(dis)(tdis_ctx ctx) { - uint32_t op = ctx->base.op = *(uint32_t *) ctx->base.ptr; + uint32_t op = ctx->base.op = unaligned_r32(ctx->base.ptr); ctx->base.op_size = ctx->base.newop_size = 4; /* clang doesn't realize that this is unreachable and generates code like * "and ecx, 0x1f; cmp ecx, 0x1f; ja abort". Yeah, nice job there. */ -- cgit v1.2.3