int ebits = (vf >> 4) & 0x7;
int mbits = vf & 0xf;
- int e = ebits - 3;
+ float x = 1.0f + mbits / 16.0f;
+ int exp = ebits - 3;
- float value = 1.0f;
-
- value += mbits / 16.0f;
-
- value *= exp2f(e);
-
- vf_to_float[vf] = value;
+ vf_to_float[vf] = ldexpf(x, exp);
}
}
EXPECT_EQ(f2u(brw_vf_to_float(brw_float_to_vf(+0.0f))), f2u(+0.0f));
EXPECT_EQ(f2u(brw_vf_to_float(brw_float_to_vf(-0.0f))), f2u(-0.0f));
}
+
+TEST_F(vf_float_conversion_test, test_nonrepresentable_float_input)
+{
+ EXPECT_EQ(brw_float_to_vf(+32.0f), -1);
+ EXPECT_EQ(brw_float_to_vf(-32.0f), -1);
+
+ EXPECT_EQ(brw_float_to_vf(+16.5f), -1);
+ EXPECT_EQ(brw_float_to_vf(-16.5f), -1);
+
+ EXPECT_EQ(brw_float_to_vf(+8.25f), -1);
+ EXPECT_EQ(brw_float_to_vf(-8.25f), -1);
+
+ EXPECT_EQ(brw_float_to_vf(+4.125f), -1);
+ EXPECT_EQ(brw_float_to_vf(-4.125f), -1);
+}