One more comment.

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of [email protected]
Sent: Wednesday, December 18, 2013 8:26 AM
To: [email protected]
Cc: Lv, Meng
Subject: [Beignet] [PATCH] [PATCH]GBE: improve precision of exp and fmod

From: Lv Meng <[email protected]>


Signed-off-by: Lv Meng <[email protected]>
---
 backend/src/ocl_stdlib.tmpl.h |  172 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 170 insertions(+), 2 deletions(-)  mode change 100644 => 
100755 backend/src/ocl_stdlib.tmpl.h

diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h old 
mode 100644 new mode 100755 index e5f356e..e380b79
--- a/backend/src/ocl_stdlib.tmpl.h
+++ b/backend/src/ocl_stdlib.tmpl.h
@@ -1851,13 +1851,180 @@ INLINE_OVERLOADABLE float 
__gen_ocl_internal_round(float x) {  }  INLINE_OVERLOADABLE float 
__gen_ocl_internal_floor(float x) { return __gen_ocl_rndd(x); }  
INLINE_OVERLOADABLE float __gen_ocl_internal_ceil(float x)  { return 
__gen_ocl_rndu(x); }
-INLINE_OVERLOADABLE float __gen_ocl_internal_exp(float x)   { return 
native_exp(x); }
 INLINE_OVERLOADABLE float powr(float x, float y) { return __gen_ocl_pow(x,y); 
} -INLINE_OVERLOADABLE float fmod(float x, float y) { return 
x-y*__gen_ocl_rndz(x/y); }  INLINE_OVERLOADABLE float remainder(float x, float 
y) { return x-y*__gen_ocl_rnde(x/y); }  INLINE_OVERLOADABLE float 
__gen_ocl_internal_rint(float x) {
   return __gen_ocl_rnde(x);
 }
+
+typedef union{  float value;  int word;} ieee_float_shape_type;
+
+/* Get a 32 bit int from a float.  */
+#ifndef GET_FLOAT_WORD
+# define GET_FLOAT_WORD(i,d)        \
+do {                                \
+  ieee_float_shape_type gf_u;       \
+  gf_u.value = (d);                 \
+  (i) = gf_u.word;                  \
+} while (0)
+#endif
+/* Set a float from a 32 bit int.  */
+#ifndef SET_FLOAT_WORD
+# define SET_FLOAT_WORD(d,i)        \
+do {                                \
+  ieee_float_shape_type sf_u;       \
+  sf_u.word = (i);                  \
+  (d) = sf_u.value;                 \
+} while (0)
+#endif
If you add above macro, it is better you define it at the top part of the file, 
so that all builtin function can use it easily. And about the macro name, is it 
better use a long name like GEN_OCL_GET_FLOAT_WORD? So that it does not 
conflict with user defined macro. I am not quite sure about this.
+INLINE_OVERLOADABLE float __gen_ocl_internal_exp(float x) {
1.7.10.4

_______________________________________________
Beignet mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/beignet
_______________________________________________
Beignet mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to