qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: chengang@emindsoft.com.cn, peter.maydell@linaro.org, cmetcalf@ezchip.com
Cc: qemu-devel@nongnu.org, Chen Gang <gang.chen.5i5j@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v4 2/4] target-tilegx: Add single floating point implementation
Date: Wed, 23 Dec 2015 15:07:23 -0800	[thread overview]
Message-ID: <567B292B.6070207@twiddle.net> (raw)
In-Reply-To: <1450907315-10135-3-git-send-email-chengang@emindsoft.com.cn>

On 12/23/2015 01:48 PM, chengang@emindsoft.com.cn wrote:
> +static float32 sfmt_to_float32(uint64_t sfmt)
> +{
> +    uint32_t sign = get_fsingle_sign(sfmt);
> +    uint32_t man = get_fsingle_man(sfmt);
> +    uint32_t exp = get_fsingle_exp(sfmt);
> +    float32 f;
> +
> +    if (get_fsingle_calc(sfmt) == TILEGX_F_CALC_CVT) {
> +        if (sign) {
> +            f = int32_to_float32(0 - man, &fp_status);
> +        } else {
> +            f = uint32_to_float32(man, &fp_status);
> +        }
> +        exp += get_f32_exp(f) - 0x9e;
> +        if ((int32_t) exp < 0) {
> +            return float32_infinity | float32_set_sign(float32_zero, sign);
> +        } else if (exp >= 0xff) {
> +            return float32_zero | float32_set_sign(float32_zero, sign);
> +        } else {
> +            set_f32_exp(&f, exp);
> +        }


What in the world are you attempting to do here?
This is not normalization.  This is not even remotely
correct with respect to zero or infinity.

Moreover, I thought we agreed to do away with that CALC bit.


r~

> +    } else {
> +        f = create_f32_man(man >> 8);
> +        set_f32_exp(&f, exp);
> +    }
> +
> +    f = float32_set_sign(f, sign);
> +    return f;
> +}
> +
> +uint64_t helper_fsingle_pack2(uint64_t srca)
> +{
> +    return float32_val(sfmt_to_float32(srca));
> +}
> +
> +static uint64_t main_calc(float32 fsrca, float32 fsrcb,
> +                          float32 (*calc)(float32, float32, float_status *))
> +{
> +    uint64_t sfmt = float32_to_sfmt(calc(fsrca, fsrcb, &fp_status));
> +
> +    if (float32_eq(fsrca, fsrcb, &fp_status)) {
> +        sfmt |= create_fsfd_flag_eq();
> +    } else {
> +        sfmt |= create_fsfd_flag_ne();
> +    }
> +
> +    if (float32_lt(fsrca, fsrcb, &fp_status)) {
> +        sfmt |= create_fsfd_flag_lt();
> +    }
> +    if (float32_le(fsrca, fsrcb, &fp_status)) {
> +        sfmt |= create_fsfd_flag_le();
> +    }
> +
> +    if (float32_lt(fsrcb, fsrca, &fp_status)) {
> +        sfmt |= create_fsfd_flag_gt();
> +    }
> +    if (float32_le(fsrcb, fsrca, &fp_status)) {
> +        sfmt |= create_fsfd_flag_ge();
> +    }
> +
> +    if (float32_unordered(fsrca, fsrcb, &fp_status)) {
> +        sfmt |= create_fsfd_flag_un();
> +    }
> +
> +    set_fsingle_calc(&sfmt, TILEGX_F_CALC_NCVT);
> +    return sfmt;
> +}
> +
> +uint64_t helper_fsingle_add1(uint64_t srca, uint64_t srcb)
> +{
> +    return main_calc(make_float32(srca), make_float32(srcb), float32_add);
> +}
> +
> +uint64_t helper_fsingle_sub1(uint64_t srca, uint64_t srcb)
> +{
> +    return main_calc(make_float32(srca), make_float32(srcb), float32_sub);
> +}
> +
> +uint64_t helper_fsingle_mul1(uint64_t srca, uint64_t srcb)
> +{
> +    return main_calc(make_float32(srca), make_float32(srcb), float32_mul);
> +}
>

  reply	other threads:[~2015-12-23 23:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-23 21:48 [Qemu-devel] [PATCH v4 0/4] target-tilegx: Implement floating point instructions chengang
2015-12-23 21:48 ` [Qemu-devel] [PATCH v4 1/4] target-tilegx: Add floating point shared functions chengang
2015-12-23 22:51   ` Richard Henderson
2015-12-24 15:38     ` Chen Gang
2015-12-24 20:01       ` Richard Henderson
2015-12-25 13:05         ` Chen Gang
2015-12-23 21:48 ` [Qemu-devel] [PATCH v4 2/4] target-tilegx: Add single floating point implementation chengang
2015-12-23 23:07   ` Richard Henderson [this message]
2015-12-24 15:52     ` Chen Gang
2015-12-27  8:31       ` Chen Gang
2015-12-23 21:48 ` [Qemu-devel] [PATCH v4 3/4] target-tilegx: Add double " chengang
2015-12-23 21:48 ` [Qemu-devel] [PATCH v4 4/4] target-tilegx: Integrate floating pointer implementation chengang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=567B292B.6070207@twiddle.net \
    --to=rth@twiddle.net \
    --cc=chengang@emindsoft.com.cn \
    --cc=cmetcalf@ezchip.com \
    --cc=gang.chen.5i5j@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).