On 05/22/2018 07:56 AM, Peter Maydell wrote: >>> However, for TCG helper functions, although we allow the helper >>> macro to say that the return type is 'f16', in helper-head.h we >>> seem to just alias f16 as i32, and in dh_sizemask() we only record >>> "is this 64 bits" and "is this signed". Am I missing the place >>> where we zero-extend the value we get back from the helper so >>> that it's the right thing in TCG's i32 ? >> >> It happens in C, implicit in "typedef uint16_t float16". > > ...but uint16_t is only 16 bits, so we are returning > a "real" 16 bit quantity?
The *helpers* are supposed to be returning uint32_t. That should be enforced by the prototype generated from "f16" being aliased to "i32". The softfloat routines are supposed to be returning float16, aka uint16_t. So: float16 f(); uint32_t h() { return f(); } will generate a zero-extend, in C, before returning to TCG generated code. r~