[Mesa-dev] [PATCH] llvmpipe: convert double to long long instead of unsigned long long
Jose Fonseca
jfonseca at vmware.com
Fri Sep 4 04:43:41 PDT 2015
On 03/09/15 16:26, Tom Stellard wrote:
> On Thu, Sep 03, 2015 at 06:15:26PM +0300, Oded Gabbay wrote:
>> round(val*dscale) produces a double result, as val and dscale are double.
>> However, LLVMConstInt receives unsigned long long, so there is an
>> implicit conversion from double to unsigned long long.
>> This is an undefined behavior. Therefore, we need to first explicitly
>> convert the round result to long long, and then let the compiler handle
>> conversion from that to unsigned long long.
>>
>> This bug manifests itself in POWER, where all IMM values of -1 are being
>> converted to 0 implicitly, causing a wrong LLVM IR output.
>>
>
>> Signed-off-by: Oded Gabbay <oded.gabbay at gmail.com>
>> CC: "10.6" <mesa-stable at lists.freedesktop.org>
>> ---
>
> You should add 11.0 to the CC too.
>
> This patch is:
> Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
>
> But I wonder why this function is being used for an integer value in the
> first place.
This is used when representing constants like 1.0 with unorms/snorms.
The caller says, give me the unorm8 equivalent of 1.0, and this function
will return 255.
In short, the input is the intended value, the output is the actual
representation.
Jose
More information about the mesa-dev
mailing list