~ubuntu-branches/ubuntu/utopic/fftw3/utopic

« back to all changes in this revision

Viewing changes to dft/simd/common/n1bv_3.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2011-12-14 13:21:22 UTC
  • mfrom: (3.1.5 sid)
  • Revision ID: package-import@ubuntu.com-20111214132122-l4avyl2kkr7vq5aj
Tags: 3.3-1ubuntu1
* Merge with Debian; remaining changes:
  - Revert the ARM workaround.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2003, 2007-11 Matteo Frigo
 
3
 * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
 *
 
19
 */
 
20
 
 
21
/* This file was automatically generated --- DO NOT EDIT */
 
22
/* Generated on Wed Jul 27 06:13:36 EDT 2011 */
 
23
 
 
24
#include "codelet-dft.h"
 
25
 
 
26
#ifdef HAVE_FMA
 
27
 
 
28
/* Generated by: ../../../genfft/gen_notw_c.native -fma -reorder-insns -schedule-for-pipeline -simd -compact -variables 4 -pipeline-latency 8 -sign 1 -n 3 -name n1bv_3 -include n1b.h */
 
29
 
 
30
/*
 
31
 * This function contains 6 FP additions, 4 FP multiplications,
 
32
 * (or, 3 additions, 1 multiplications, 3 fused multiply/add),
 
33
 * 11 stack variables, 2 constants, and 6 memory accesses
 
34
 */
 
35
#include "n1b.h"
 
36
 
 
37
static void n1bv_3(const R *ri, const R *ii, R *ro, R *io, stride is, stride os, INT v, INT ivs, INT ovs)
 
38
{
 
39
     DVK(KP500000000, +0.500000000000000000000000000000000000000000000);
 
40
     DVK(KP866025403, +0.866025403784438646763723170752936183471402627);
 
41
     {
 
42
          INT i;
 
43
          const R *xi;
 
44
          R *xo;
 
45
          xi = ii;
 
46
          xo = io;
 
47
          for (i = v; i > 0; i = i - VL, xi = xi + (VL * ivs), xo = xo + (VL * ovs), MAKE_VOLATILE_STRIDE(is), MAKE_VOLATILE_STRIDE(os)) {
 
48
               V T1, T2, T3, T6, T4, T5;
 
49
               T1 = LD(&(xi[0]), ivs, &(xi[0]));
 
50
               T2 = LD(&(xi[WS(is, 1)]), ivs, &(xi[WS(is, 1)]));
 
51
               T3 = LD(&(xi[WS(is, 2)]), ivs, &(xi[0]));
 
52
               T6 = VMUL(LDK(KP866025403), VSUB(T2, T3));
 
53
               T4 = VADD(T2, T3);
 
54
               T5 = VFNMS(LDK(KP500000000), T4, T1);
 
55
               ST(&(xo[0]), VADD(T1, T4), ovs, &(xo[0]));
 
56
               ST(&(xo[WS(os, 2)]), VFNMSI(T6, T5), ovs, &(xo[0]));
 
57
               ST(&(xo[WS(os, 1)]), VFMAI(T6, T5), ovs, &(xo[WS(os, 1)]));
 
58
          }
 
59
     }
 
60
     VLEAVE();
 
61
}
 
62
 
 
63
static const kdft_desc desc = { 3, XSIMD_STRING("n1bv_3"), {3, 1, 3, 0}, &GENUS, 0, 0, 0, 0 };
 
64
 
 
65
void XSIMD(codelet_n1bv_3) (planner *p) {
 
66
     X(kdft_register) (p, n1bv_3, &desc);
 
67
}
 
68
 
 
69
#else                           /* HAVE_FMA */
 
70
 
 
71
/* Generated by: ../../../genfft/gen_notw_c.native -simd -compact -variables 4 -pipeline-latency 8 -sign 1 -n 3 -name n1bv_3 -include n1b.h */
 
72
 
 
73
/*
 
74
 * This function contains 6 FP additions, 2 FP multiplications,
 
75
 * (or, 5 additions, 1 multiplications, 1 fused multiply/add),
 
76
 * 11 stack variables, 2 constants, and 6 memory accesses
 
77
 */
 
78
#include "n1b.h"
 
79
 
 
80
static void n1bv_3(const R *ri, const R *ii, R *ro, R *io, stride is, stride os, INT v, INT ivs, INT ovs)
 
81
{
 
82
     DVK(KP500000000, +0.500000000000000000000000000000000000000000000);
 
83
     DVK(KP866025403, +0.866025403784438646763723170752936183471402627);
 
84
     {
 
85
          INT i;
 
86
          const R *xi;
 
87
          R *xo;
 
88
          xi = ii;
 
89
          xo = io;
 
90
          for (i = v; i > 0; i = i - VL, xi = xi + (VL * ivs), xo = xo + (VL * ovs), MAKE_VOLATILE_STRIDE(is), MAKE_VOLATILE_STRIDE(os)) {
 
91
               V T4, T3, T5, T1, T2, T6;
 
92
               T4 = LD(&(xi[0]), ivs, &(xi[0]));
 
93
               T1 = LD(&(xi[WS(is, 1)]), ivs, &(xi[WS(is, 1)]));
 
94
               T2 = LD(&(xi[WS(is, 2)]), ivs, &(xi[0]));
 
95
               T3 = VBYI(VMUL(LDK(KP866025403), VSUB(T1, T2)));
 
96
               T5 = VADD(T1, T2);
 
97
               ST(&(xo[0]), VADD(T4, T5), ovs, &(xo[0]));
 
98
               T6 = VFNMS(LDK(KP500000000), T5, T4);
 
99
               ST(&(xo[WS(os, 1)]), VADD(T3, T6), ovs, &(xo[WS(os, 1)]));
 
100
               ST(&(xo[WS(os, 2)]), VSUB(T6, T3), ovs, &(xo[0]));
 
101
          }
 
102
     }
 
103
     VLEAVE();
 
104
}
 
105
 
 
106
static const kdft_desc desc = { 3, XSIMD_STRING("n1bv_3"), {5, 1, 1, 0}, &GENUS, 0, 0, 0, 0 };
 
107
 
 
108
void XSIMD(codelet_n1bv_3) (planner *p) {
 
109
     X(kdft_register) (p, n1bv_3, &desc);
 
110
}
 
111
 
 
112
#endif                          /* HAVE_FMA */