Le 09/11/2016 à 14:46, Richard Henderson a écrit :
> --- a/target-m68k/op_helper.c
> +++ b/target-m68k/op_helper.c
> +uint32_t HELPER(bfexts_mem)(CPUM68KState *env, uint32_t addr,
> +                            int32_t ofs, uint32_t len)
> +{
> +    uintptr_t ra = GETPC();
> +    struct bf_data d = bf_prep(addr, ofs, len);
> +    uint64_t data = bf_load(env, d.addr, d.blen, ra);
> +
> +    return (int64_t)(data << d.bofs) >> (64 - len);

We must use d.len instead of len, otherwise we shift with 32bit value.

-    return (int64_t)(data << d.bofs) >> (64 - len);
+    return (int64_t)(data << d.bofs) >> (64 - d.len);


Laurent

Reply via email to