diff --git a/qemu/target-arm/neon_helper.c b/qemu/target-arm/neon_helper.c index 6838e7cc..308fd713 100644 --- a/qemu/target-arm/neon_helper.c +++ b/qemu/target-arm/neon_helper.c @@ -688,7 +688,7 @@ uint64_t HELPER(neon_shl_s64)(uint64_t valop, uint64_t shiftop) } else if (tmp < 0) { \ dest = (src1 + (1 << (-1 - tmp))) >> -tmp; \ } else { \ - dest = src1 << tmp; \ + dest = (uint64_t)src1 << tmp; \ }} while (0) NEON_VOP(rshl_s8, neon_s8, 4) NEON_VOP(rshl_s16, neon_s16, 2) diff --git a/qemu/target-i386/int_helper.c b/qemu/target-i386/int_helper.c index b79b2242..0de38c1c 100644 --- a/qemu/target-i386/int_helper.c +++ b/qemu/target-i386/int_helper.c @@ -105,7 +105,7 @@ void helper_idivw_AX(CPUX86State *env, target_ulong t0) if (den == 0) { raise_exception(env, EXCP00_DIVZ); } - q = (num / den); + q = ((int64_t)num / den); if (q != (int16_t)q) { raise_exception(env, EXCP00_DIVZ); } diff --git a/qemu/target-i386/ops_sse.h b/qemu/target-i386/ops_sse.h index 9a682deb..3d49fcc7 100644 --- a/qemu/target-i386/ops_sse.h +++ b/qemu/target-i386/ops_sse.h @@ -1415,7 +1415,7 @@ void glue(helper_phaddw, SUFFIX)(CPUX86State *env, Reg *d, Reg *s) void glue(helper_phaddd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s) { - d->L(0) = (int32_t)d->L(0) + (int32_t)d->L(1); + d->L(0) = (int64_t)d->L(0) + (int32_t)d->L(1); XMM_ONLY(d->L(1) = (int32_t)d->L(2) + (int32_t)d->L(3)); d->L((1 << SHIFT) + 0) = (uint32_t)((int32_t)s->L(0) + (uint32_t)s->L(1)); XMM_ONLY(d->L(3) = (int32_t)s->L(2) + (int32_t)s->L(3));