Added sign function implementations and performance tests
This commit is contained in:
@@ -739,6 +739,60 @@ int test_isinf()
|
|||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace sign
|
||||||
|
{
|
||||||
|
template <typename genFIType>
|
||||||
|
GLM_FUNC_QUALIFIER genFIType sign_if(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<genFIType>::is_iec559 ||
|
||||||
|
(std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), "'sign' only accept signed inputs");
|
||||||
|
|
||||||
|
genFIType result;
|
||||||
|
if(x > genFIType(0))
|
||||||
|
result = genFIType(1);
|
||||||
|
else if(x < genFIType(0))
|
||||||
|
result = genFIType(-1);
|
||||||
|
else
|
||||||
|
result = genFIType(0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genFIType>
|
||||||
|
GLM_FUNC_QUALIFIER genFIType sign_alu1(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
|
||||||
|
"'sign' only accept integer inputs");
|
||||||
|
|
||||||
|
return (x >> 31) | (-x >> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename genFIType>
|
||||||
|
GLM_FUNC_QUALIFIER genFIType sign_alu2(genFIType x)
|
||||||
|
{
|
||||||
|
GLM_STATIC_ASSERT(
|
||||||
|
std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
|
||||||
|
"'sign' only accept integer inputs");
|
||||||
|
|
||||||
|
return -(x >> 31) | (-x >> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int perf()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
}//namespace sign
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user