diff options
author | Keith Whitwell <[email protected]> | 2010-10-06 19:09:03 +0100 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2010-10-09 11:44:45 +0100 |
commit | 2ef6f75ab410bb188e028024e18891d7877febad (patch) | |
tree | d495ba93a3c74361f3e77fb820f108237f2c7915 /src/gallium/auxiliary/gallivm/lp_bld_conv.c | |
parent | c79f162367b99d9438bd1589ecfdeba69baa9d3d (diff) |
gallivm: simpler uint8->float conversions
LLVM seems to finds it easier to reason about these than our
mantissa-manipulation code.
Diffstat (limited to 'src/gallium/auxiliary/gallivm/lp_bld_conv.c')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_conv.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_conv.c b/src/gallium/auxiliary/gallivm/lp_bld_conv.c index 3abb19272b6..20aa2577830 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_conv.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_conv.c @@ -178,6 +178,16 @@ lp_build_unsigned_norm_to_float(LLVMBuilderRef builder, assert(dst_type.floating); + /* Special-case int8->float, though most cases could be handled + * this way: + */ + if (src_width == 8) { + scale = 1.0/255.0; + res = LLVMBuildSIToFP(builder, src, vec_type, ""); + res = LLVMBuildFMul(builder, res, lp_build_const_vec(dst_type, scale), ""); + return res; + } + mantissa = lp_mantissa(dst_type); n = MIN2(mantissa, src_width); |