gegl r2472 - in trunk: . gegl
- From: ok svn gnome org
- To: svn-commits-list gnome org
- Subject: gegl r2472 - in trunk: . gegl
- Date: Sun, 15 Jun 2008 16:35:44 +0000 (UTC)
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]