From fe1f9137a92ee3c0e89e2f0a0b0abbeddcaf81fd Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 2 Jul 2011 00:43:19 +0200 Subject: PPC: Fix range check for scaled immediates in DynASM. --- dynasm/dasm_ppc.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'dynasm') diff --git a/dynasm/dasm_ppc.h b/dynasm/dasm_ppc.h index e928ffed..1c8580fb 100644 --- a/dynasm/dasm_ppc.h +++ b/dynasm/dasm_ppc.h @@ -233,6 +233,9 @@ void dasm_put(Dst_DECL, int start, ...) case DASM_IMM: #ifdef DASM_CHECKS CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); +#endif + n >>= ((ins>>10)&31); +#ifdef DASM_CHECKS if (ins & 0x8000) CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); else @@ -360,7 +363,7 @@ int dasm_encode(Dst_DECL, void *buffer) break; case DASM_LABEL_PC: break; case DASM_IMM: - cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31); + cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31); break; default: *cp++ = ins; break; } -- cgit v1.2.1