qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 07/15] target-tricore: Add instructions of SR


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v3 07/15] target-tricore: Add instructions of SRR opcode format
Date: Mon, 04 Aug 2014 09:14:29 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.7.0

On 08/04/2014 07:38 AM, Bastian Koppelmann wrote:
> +target_ulong helper_add_ssov(CPUTRICOREState *env, target_ulong r1,
> +                             target_ulong r2)
> +{
> +    target_ulong ret;
> +    int64_t result = (int64_t)r1 + (int64_t)r2;
> +    SSOV(env, ret, result, 32);
> +    return ret;
> +}
> +
> +target_ulong helper_sub_ssov(CPUTRICOREState *env, target_ulong r1,
> +                             target_ulong r2)
> +{
> +    target_ulong ret;
> +    int64_t result = (int64_t)r1 - (int64_t)r2;
> +    SSOV(env, ret, result, 32);
> +    return ret;
> +}
> +

This zero-extends r1 and r2; you need to sign-extend in order for your
saturation to work.

> +    tcg_gen_sub2_tl(ret, cpu_PSW_V, r1, t0, r2, t0);
> +    gen_calc_psw_sv_i32(cpu_PSW_SV, cpu_PSW_V);

This computes neither carry nor overflow.

> +    /* mul and set V/SV bits */
> +    tcg_gen_muls2_tl(ret, cpu_PSW_V, r1, r2);

Overflow computation requires that you compare the high part of the result vs
the sign of the low part of the result.  I.e.

        overflow = (high != (low >> 31));


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]