gegl r2472 - in trunk: . gegl



Author: ok
Date: Sun Jun 15 16:35:44 2008
New Revision: 2472
URL: http://svn.gnome.org/viewvc/gegl?rev=2472&view=rev

Log:
* gegl/Makefile.am: added gegl-simd.h
* gegl/gegl-plugin.h: moved g4float macros and typedef 
* gegl/gegl-simd.h: .. here


Added:
   trunk/gegl/gegl-simd.h
Modified:
   trunk/ChangeLog
   trunk/gegl/Makefile.am

Modified: trunk/gegl/Makefile.am
==============================================================================
--- trunk/gegl/Makefile.am	(original)
+++ trunk/gegl/Makefile.am	Sun Jun 15 16:35:44 2008
@@ -65,6 +65,7 @@
     gegl.h				\
     gegl-utils.h			\
     gegl-chant.h			\
+    gegl-simd.h				\
     gegl-plugin.h			\
     buffer/gegl-buffer.h		\
     property-types/gegl-paramspecs.h	\

Added: trunk/gegl/gegl-simd.h
==============================================================================
--- (empty file)
+++ trunk/gegl/gegl-simd.h	Sun Jun 15 16:35:44 2008
@@ -0,0 +1,55 @@
+#ifndef __GEGL_SIMD_H__
+#define __GEGL_SIMD_H__
+
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#define HAS_G4FLOAT 1
+#include <math.h>
+
+typedef float g4float __attribute__ ((vector_size (4*sizeof(float))));
+
+#define g4float_a(a)      ((float *)(&a))
+#define g4floatR(a)       g4float_a(a)[0]
+#define g4floatG(a)       g4float_a(a)[1]
+#define g4floatB(a)       g4float_a(a)[2]
+#define g4floatA(a)       g4float_a(a)[3]
+#define g4float(a,b,c,d)  ((g4float){a,b,c,d})
+#define g4float_all(val)  g4float(val,val,val,val)
+#define g4float_zero      g4float_all(0.0)
+#define g4float_one       g4float_all(1.0)
+#define g4float_half      g4float_all(0.5)
+#define g4float_half      g4float_all(0.5)
+#define g4float_mul(a,val)  g4float_all(val)*(a)
+
+#ifdef USE_SSE
+
+#define g4float_sqrt(v)     __builtin_ia32_sqrtps((v))
+#define g4float_max(a,b)    __builtin_ia32_maxps((a,b))
+#define g4float_min(a,b)    __builtin_ia32_minps((a,b))
+#define g4float_rcp(a,b)    __builtin_ia32_rcpps((v))
+
+#else
+
+#define g4float_sqrt(v)     g4float(sqrt(g4floatR(v)),\
+                                    sqrt(g4floatG(v)),\
+                                    sqrt(g4floatB(v)),\
+                                    sqrt(g4floatA(v)))
+#define g4float_rcp(v)      g4float(1.0/(g4floatR(v)),\
+                                    1.0/(g4floatG(v)),\
+                                    1.0/(g4floatB(v)),\
+                                    1.0/(g4floatA(v)))
+#define g4float_max(a,b)   g4float(\
+                               gfloat4R(a)>gfloat4R(b)?gfloat4R(a):gfloat4R(b),\
+                               gfloat4G(a)>gfloat4G(b)?gfloat4G(a):gfloat4G(b),\
+                               gfloat4B(a)>gfloat4B(b)?gfloat4B(a):gfloat4B(b),\
+                               gfloat4A(a)>gfloat4A(b)?gfloat4A(a):gfloat4A(b))
+#define g4float_min(a,b)   g4float(\
+                               gfloat4R(a)<gfloat4R(b)?gfloat4R(a):gfloat4R(b),\
+                               gfloat4G(a)<gfloat4G(b)?gfloat4G(a):gfloat4G(b),\
+                               gfloat4B(a)<gfloat4B(b)?gfloat4B(a):gfloat4B(b),\
+                               gfloat4A(a)<gfloat4A(b)?gfloat4A(a):gfloat4A(b))
+#endif
+
+#endif
+
+#endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]