Pārlūkot izejas kodu

simplify float16 -> float32 conversion

Ivan Avdeev 6 gadi atpakaļ
vecāks
revīzija
298d488a08
1 mainītis faili ar 7 papildinājumiem un 21 dzēšanām
  1. 7 21
      src/texture.c

+ 7 - 21
src/texture.c

@@ -137,27 +137,13 @@ static void textureUnpackBGRA8to565(uint8_t *src, uint16_t *dst, int width, int
 }
 
 /* FIXME: taken from internets: https://gist.github.com/martinkallman/5049614 */
-float float32(const uint16_t in) {
-	uint32_t t1;
-	uint32_t t2;
-	uint32_t t3;
-
-	t1 = in & 0x7fff;                       // Non-sign bits
-	t2 = in & 0x8000;                       // Sign bit
-	t3 = in & 0x7c00;                       // Exponent
-
-	t1 <<= 13;                              // Align mantissa on MSB
-	t2 <<= 16;                              // Shift sign bit into position
-
-	t1 += 0x38000000;                       // Adjust bias
-
-	t1 = (t3 == 0 ? 0 : t1);                // Denormals-as-zero
-
-	t1 |= t2;                               // Re-insert sign bit
-
-	float ret;
-	memcpy(&ret, &t1, sizeof(ret));
-	return ret;
+float float32(uint16_t value) {
+	const uint32_t result =
+		(((value & 0x7fffu) << 13) + 0x38000000u)	|  // mantissa + exponent
+		((value & 0x8000u) << 16); // sign
+	float retval;
+	memcpy(&retval, &result, sizeof(retval));
+	return retval;
 }
 
 static void textureUnpackRGBA16Fto565(const uint16_t *src, uint16_t *dst, int width, int height) {