Commit e1b11486 authored by Boris Brezillon's avatar Boris Brezillon Committed by Marge Bot
Browse files

nir: Get rid of __[u]int64_to_fp32() and __fp32_to_[u]int64()



Those are now handled by nir_lower_int64() which has native NIR
implementations.
Signed-off-by: Boris Brezillon's avatarBoris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Matt Turner's avatarMatt Turner <mattst88@gmail.com>
Acked-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
Part-of: <!5588>
parent 025988f8
Pipeline #184314 waiting for manual action with stages
......@@ -1092,66 +1092,6 @@ __fp64_to_int64(uint64_t a)
return __roundAndPackInt64(aSign, aFracHi, aFracLo, zFrac2);
}
uint64_t
__fp32_to_uint64(float f)
{
uint a = floatBitsToUint(f);
uint aFrac = a & 0x007FFFFFu;
int aExp = int((a>>23) & 0xFFu);
uint aSign = a & 0x80000000u;
uint zFrac0 = 0u;
uint zFrac1 = 0u;
uint zFrac2 = 0u;
uint64_t default_nan = 0xFFFFFFFFFFFFFFFFUL;
int shiftCount = 0xBE - aExp;
if (shiftCount <0) {
if (aExp == 0xFF)
return default_nan;
}
aFrac = mix(aFrac, aFrac | 0x00800000u, aExp != 0);
__shortShift64Left(aFrac, 0, 40, zFrac0, zFrac1);
if (shiftCount != 0) {
__shift64ExtraRightJamming(zFrac0, zFrac1, zFrac2, shiftCount,
zFrac0, zFrac1, zFrac2);
}
return __roundAndPackUInt64(aSign, zFrac0, zFrac1, zFrac2);
}
int64_t
__fp32_to_int64(float f)
{
uint a = floatBitsToUint(f);
uint aFrac = a & 0x007FFFFFu;
int aExp = int((a>>23) & 0xFFu);
uint aSign = a & 0x80000000u;
uint zFrac0 = 0u;
uint zFrac1 = 0u;
uint zFrac2 = 0u;
int64_t default_NegNaN = -0x7FFFFFFFFFFFFFFEL;
int64_t default_PosNaN = 0xFFFFFFFFFFFFFFFFL;
int shiftCount = 0xBE - aExp;
if (shiftCount <0) {
if (aExp == 0xFF && aFrac != 0u)
return default_NegNaN;
return mix(default_NegNaN, default_PosNaN, aSign == 0u);
}
aFrac = mix(aFrac, aFrac | 0x00800000u, aExp != 0);
__shortShift64Left(aFrac, 0, 40, zFrac0, zFrac1);
if (shiftCount != 0) {
__shift64ExtraRightJamming(zFrac0, zFrac1, zFrac2, shiftCount,
zFrac0, zFrac1, zFrac2);
}
return __roundAndPackInt64(aSign, zFrac0, zFrac1, zFrac2);
}
uint64_t
__int64_to_fp64(int64_t a)
{
......@@ -1347,40 +1287,6 @@ __fp64_to_fp32(uint64_t __a)
return __roundAndPackFloat32(aSign, aExp - 0x381, zFrac);
}
float
__uint64_to_fp32(uint64_t __a)
{
uvec2 aFrac = unpackUint2x32(__a);
int shiftCount = mix(__countLeadingZeros32(aFrac.y) - 33,
__countLeadingZeros32(aFrac.x) - 1,
aFrac.y == 0u);
if (0 <= shiftCount)
__shortShift64Left(aFrac.y, aFrac.x, shiftCount, aFrac.y, aFrac.x);
else
__shift64RightJamming(aFrac.y, aFrac.x, -shiftCount, aFrac.y, aFrac.x);
return __roundAndPackFloat32(0u, 0x9C - shiftCount, aFrac.x);
}
float
__int64_to_fp32(int64_t __a)
{
uint aSign = uint(unpackInt2x32(__a).y) & 0x80000000u;
uint64_t absA = mix(uint64_t(__a), uint64_t(-__a), __a < 0);
uvec2 aFrac = unpackUint2x32(absA);
int shiftCount = mix(__countLeadingZeros32(aFrac.y) - 33,
__countLeadingZeros32(aFrac.x) - 1,
aFrac.y == 0u);
if (0 <= shiftCount)
__shortShift64Left(aFrac.y, aFrac.x, shiftCount, aFrac.y, aFrac.x);
else
__shift64RightJamming(aFrac.y, aFrac.x, -shiftCount, aFrac.y, aFrac.x);
return __roundAndPackFloat32(aSign, 0x9C - shiftCount, aFrac.x);
}
/* Returns the result of converting the single-precision floating-point value
* `a' to the double-precision floating-point format.
*/
......
......@@ -471,17 +471,15 @@ lower_doubles_instr_to_soft(nir_builder *b, nir_alu_instr *instr,
switch (instr->op) {
case nir_op_f2i64:
if (instr->src[0].src.ssa->bit_size == 64)
name = "__fp64_to_int64";
else
name = "__fp32_to_int64";
if (instr->src[0].src.ssa->bit_size != 64)
return false;
name = "__fp64_to_int64";
return_type = glsl_int64_t_type();
break;
case nir_op_f2u64:
if (instr->src[0].src.ssa->bit_size == 64)
name = "__fp64_to_uint64";
else
name = "__fp32_to_uint64";
if (instr->src[0].src.ssa->bit_size != 64)
return false;
name = "__fp64_to_uint64";
break;
case nir_op_f2f64:
name = "__fp32_to_fp64";
......@@ -506,18 +504,6 @@ lower_doubles_instr_to_soft(nir_builder *b, nir_alu_instr *instr,
case nir_op_b2f64:
name = "__bool_to_fp64";
break;
case nir_op_i2f32:
if (instr->src[0].src.ssa->bit_size != 64)
return false;
name = "__int64_to_fp32";
return_type = glsl_float_type();
break;
case nir_op_u2f32:
if (instr->src[0].src.ssa->bit_size != 64)
return false;
name = "__uint64_to_fp32";
return_type = glsl_float_type();
break;
case nir_op_i2f64:
if (instr->src[0].src.ssa->bit_size == 64)
name = "__int64_to_fp64";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment