|
From: | Richard Henderson |
Subject: | Re: [Qemu-devel] [PATCH 4/4] target-m68k: add fscale, fgetman and fgetexp |
Date: | Mon, 3 Jul 2017 12:26:13 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 07/03/2017 09:23 AM, Laurent Vivier wrote:
+void HELPER(fgetman)(CPUM68KState *env, FPReg *res, FPReg *val) +{ + if (floatx80_is_infinity(val->d)) { + res->d = floatx80_default_nan(NULL); + /* FIXME: set the OPERR bit int he FPSR */ + return; + } + if (floatx80_is_zero(val->d) || + floatx80_is_any_nan(val->d)) { + *res = *val; + return; + } + + res->l.upper = (val->l.upper & 0x8000) | 0x3fff; + if (floatx80_is_zero_or_denormal(val->d)) { + res->l.lower = val->l.lower << 1;
Surely you have to do more than this for denormals? There may be more than one leading zero bit in the mant. Do you actually need to re-normalize? Or does real hardware produce a so-called "unnormal" in this situation?
r~
[Prev in Thread] | Current Thread | [Next in Thread] |