summaryrefslogtreecommitdiff
blob: a71fea0c6aee9f6376d520cdab808ff7f6c34108 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
diff -u simd.old/altivec.c simd/altivec.c
--- simd.old/altivec.c	2005-11-12 00:28:14.000000000 +0100
+++ simd/altivec.c	2005-11-12 00:33:36.000000000 +0100
@@ -26,15 +26,12 @@
 #if HAVE_ALTIVEC
 
 const vector unsigned int X(altivec_ld_selmsk) = 
-   (vector unsigned int)VLIT(0, 0, 0xFFFFFFFF, 0xFFFFFFFF);
+	VLIT(0, 0, 0xFFFFFFFF, 0xFFFFFFFF);
 
 const vector unsigned int X(altivec_flipri_perm) = 
-   (vector unsigned int)VLIT(0x04050607, 0x00010203,
-			     0x0c0d0e0f, 0x08090a0b);
+   VLIT(0x04050607, 0x00010203, 0x0c0d0e0f, 0x08090a0b);
 
-const vector float X(altivec_chsr_sgn) = 
-   (vector float)VLIT(-1.0, 1.0, -1.0, 1.0);
-const vector float X(altivec_chsr_msk) = 
-   (vector float)VLIT(-0.0, 0.0, -0.0, 0.0);
+const vector float X(altivec_chsr_sgn) = VLIT(-1.0, 1.0, -1.0, 1.0);
+const vector float X(altivec_chsr_msk) = VLIT(-0.0, 0.0, -0.0, 0.0);
 
 #endif
diff -u simd.old/simd-altivec.h simd/simd-altivec.h
--- simd.old/simd-altivec.h	2005-11-12 00:28:14.000000000 +0100
+++ simd/simd-altivec.h	2005-11-12 01:31:03.000000000 +0100
@@ -96,8 +96,12 @@
 
 #else /* !__VEC__ */
 
+#ifdef HAVE_ALTIVEC_H
+#include <altivec.h>
+#define VLIT(x0, x1, x2, x3) {x0, x1, x2, x3}
+#else
 #define VLIT(x0, x1, x2, x3) (x0, x1, x2, x3)
-
+#endif
 #endif
 
 typedef vector float V;
--- configure.ac.old	2003-07-04 07:18:48.000000000 +0200
+++ configure.ac	2005-11-12 00:42:11.000000000 +0100
@@ -167,7 +167,8 @@
 	ACX_CHECK_CC_FLAGS(-faltivec, faltivec,
 	    SIMD_CFLAGS="-faltivec",
 	    [ACX_CHECK_CC_FLAGS(-maltivec -mabi=altivec, maltivec,
-		SIMD_CFLAGS="-maltivec -mabi=altivec",
+		SIMD_CFLAGS="-maltivec -mabi=altivec";
+		AC_DEFINE(HAVE_ALTIVEC_H,1,[Define if gcc-fsf is in use]),
 		[AC_MSG_ERROR([Need a version of gcc with -maltivec])])])
     fi
 fi
--- ../fftw-3.0.1-double/simd/simd-altivec.h	2005-11-12 01:59:11.000000000 +0100
+++ simd/simd-altivec.h	2005-11-12 03:16:00.000000000 +0100
@@ -105,12 +105,25 @@
 #endif
 
 typedef vector float V;
-#define VADD(a, b) vec_add(a, b)
-#define VSUB(a, b) vec_sub(a, b)
-#define VFMA(a, b, c) vec_madd(a, b, c)
-#define VFNMS(a, b, c) vec_nmsub(a, b, c)
+static inline V VADD(V a,V b) 
+{
+	return vec_add(a, b);
+}
+static inline V VSUB(V a, V b)
+{
+	return vec_sub(a, b);
+}
+static inline V VFMA(V a, V b, V c)
+{
+	return vec_madd(a, b, c);
+}
+static inline V VFNMS(V a, V b, V c)
+{
+	return vec_nmsub(a, b, c);
+}
+
 #define LDK(x) x
-#define DVK(var, val) const V var = (vector float)VLIT(val, val, val, val)
+#define DVK(var, val) const V var = VLIT(val, val, val, val)
 
 static inline V VMUL(V a, V b)
 {