native_powr: Switch implementation to native_exp2 and native_log2

v2: don't use assume
    check only for x<0, the other conditions are handled transparently
v3: don't check inputs at all, nan propagation works as expected

Reviewer: Jeroen Ketema
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 318204
This commit is contained in:
Jan Vesely 2017-11-14 21:55:41 +00:00
parent 29a5c03cc2
commit 383fbd050c
4 changed files with 18 additions and 1 deletions

View File

@ -1 +1,7 @@
#define native_powr pow
#define __CLC_BODY <clc/math/binary_decl_tt.inc>
#define __CLC_FUNCTION native_powr
#include <clc/math/gentype.inc>
#undef __CLC_BODY
#undef __CLC_FUNCTION

View File

@ -127,6 +127,7 @@ math/native_exp2.cl
math/native_log.cl
math/native_log10.cl
math/native_log2.cl
math/native_powr.cl
math/native_recip.cl
math/native_rsqrt.cl
math/native_sin.cl

View File

@ -0,0 +1,5 @@
#include <clc/clc.h>
#define __CLC_BODY <native_powr.inc>
#define __FLOAT_ONLY
#include <clc/math/gentype.inc>

View File

@ -0,0 +1,5 @@
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE native_powr(__CLC_GENTYPE x, __CLC_GENTYPE y) {
// x^y == 2^{log2 x^y} == 2^{y * log2 x}
// for x < 0 propagate nan created by log2
return native_exp2(y * native_log2(x));
}