using System;
namespace Ryujinx.Graphics.Shader.Translation.Optimizations
{
static class HalfConversion
public static float HalfToSingle(int value)
int mantissa = (value >> 0) & 0x3ff;
int exponent = (value >> 10) & 0x1f;
int sign = (value >> 15) & 0x1;
if (exponent == 0x1f)
// NaN or Infinity.
mantissa <<= 13;
exponent = 0xff;
}
else if (exponent != 0 || mantissa != 0 )
if (exponent == 0)
// Denormal.
int e = -1;
int m = mantissa;
do
e++;
m <<= 1;
while ((m & 0x400) == 0);
mantissa = m & 0x3ff;
exponent = e;
exponent = 127 - 15 + exponent;
int output = (sign << 31) | (exponent << 23) | mantissa;
return BitConverter.Int32BitsToSingle(output);