Added UInt to FP cast
UInt4 -> Float4 already existed, but not UInt -> Float.
Added the scalar conversion code and used it in the
Blitter where appropriate.
Change-Id: I9ebf63fdf8b139b960237b269f2da088f6ecac86
Reviewed-on: https://swiftshader-review.googlesource.com/10888
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index d8bda70..c3a59ff 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -5595,6 +5595,14 @@
storeValue(integer);
}
+ Float::Float(RValue<UInt> cast)
+ {
+ RValue<Float> result = Float(Int(cast & UInt(0x7FFFFFFF))) +
+ As<Float>((As<Int>(cast) >> 31) & As<Int>(Float(0x80000000u)));
+
+ storeValue(result.value);
+ }
+
Float::Float(float x)
{
storeValue(Nucleus::createConstantFloat(x));
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index b02c6be..186f739 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -1535,6 +1535,7 @@
{
public:
explicit Float(RValue<Int> cast);
+ explicit Float(RValue<UInt> cast);
Float() = default;
Float(float x);
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index fb116a3..9f01b2a 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -5715,6 +5715,14 @@
storeValue(integer);
}
+ Float::Float(RValue<UInt> cast)
+ {
+ RValue<Float> result = Float(Int(cast & UInt(0x7FFFFFFF))) +
+ As<Float>((As<Int>(cast) >> 31) & As<Int>(Float(0x80000000u)));
+
+ storeValue(result.value);
+ }
+
Float::Float(float x)
{
storeValue(Nucleus::createConstantFloat(x));