On 12/12/2014 09:31 AM, Bastian Koppelmann wrote:
> +#define SSOV16(env, hw0, hw1) do {                  \
> +    int32_t max_pos = INT16_MAX;                    \
> +    int32_t max_neg = INT16_MIN;                    \
...
> +#define SUOV16(env, hw0, hw1) do {                  \
> +    int32_t max_pos = UINT16_MAX;                   \
> +    int32_t av0, av1;                               \

Similarly, make these functions.

Best if you have these functions return the combined word, i.e.

> +    return (ret_hw0 & 0xffff) | (ret_hw1 << 16);

so that you don't try to return the two separate inputs via reference.

> +/* ret = (r1 cond r2) ? 0xFFFFFFFF ? 0x00000000;*/
> +static inline void gen_cond_w(TCGCond cond, TCGv ret, TCGv r1, TCGv r2)
> +{
> +    TCGv temp = tcg_temp_new();
> +
> +    tcg_gen_setcond_tl(cond, temp, r1, r2);
> +    tcg_gen_movi_tl(ret, 0);
> +    tcg_gen_sub_tl(ret, ret, temp);

tcg_gen_neg_tl, at which point you don't need a temporary.



r~

Reply via email to