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~

Reply via email to