~ubuntu-branches/ubuntu/vivid/atlas/vivid

« back to all changes in this revision

Viewing changes to tune/blas/gemv/CASES/ATL_cgemvN_1x1_1a.c

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot, Sylvestre Ledru, Sébastien Villemot
  • Date: 2013-06-11 15:58:16 UTC
  • mfrom: (1.1.4) (25 sid)
  • mto: This revision was merged to the branch mainline in revision 26.
  • Revision ID: package-import@ubuntu.com-20130611155816-8xeeiziu1iml040c
Tags: 3.10.1-1
[ Sylvestre Ledru ]
* New upstream release (Closes: #609287)

[ Sébastien Villemot ]
* Provide architectural defaults (i.e. precomputed timings) for all
  release archs (except armel and mips for the time being, due to slow
  porterboxes). This will make the package build much faster and should
  eliminate transient build failures due to excessive variance in the
  timings.
* Move symlinks for lib{cblas,f77blas,atlas,lapack_atlas} out of the
  libblas.so.3 alternative and make them always present, so that
  software relying on these libs do not break when another alternative
  is selected for BLAS
* ATLAS now has improved ARM support with native asm constructs. This required
  the following tunes:
  + armel-is-v4t.diff: new patch, prevents FTBFS on armel; otherwise,
    ATLAS uses asm constructs too recent for the platform (armel is only v4t)
  + debian/rules: on armhf, define the ATL_ARM_HARDFP flag; otherwise the asm
    constructs use the soft-float ABI for passing floating points
  + on armhf, ensure that -mfloat-abi=softfp and -mcpu=vfpv3 flags are never
    used; this is implemented via a patch (armhf.diff) and by the use of fixed
    archdefs
* The generic package is now built without multi-threading, because otherwise
  the package fails to build on some single-processor machines (this required
  the introduction of a patch: fix-non-threaded-build.diff). As a side effect,
  the build of the custom package gracefully handles non-threaded
  builds. (Closes: #602524)
* Add libblas.a as slave in the libblas.so alternative (Closes: #701921)
* Add symlinks for lib{f77blas,atlas}.a in /usr/lib (Closes: #666203)
* Modify shlibs file of libatlas3-base, such that packages using
  libblas/liblapack depend on any BLAS/LAPACK alternative, while packages
  depending on ATLAS-specific libraries (e.g. libatlas.so) depend specifically
  on libatlas3-base.
* corei1.diff: remove patch, applied upstream
* Use my @debian.org email address
* Remove obsolete DM-Upload-Allowed flag
* Switch VCS to git
* Remove Conflicts/Replaces against pre-squeeze packages
* libatlas-base-dev now provides libblas.so, as libblas-dev
* No longer use -Wa,--noexecstack in CFLAGS, it makes the package FTBFS
* Do not use POWER3 arch for powerpcspe port (Closes: #701068)
* Bump to debhelper compat level 9
* README.Debian: mention that devscripts is needed to compile the custom
  package (Closes: #697431)
* Bump Standards-Version to 3.9.4. As a consequence, add Built-Using
  fields because the package embeds stuff from liblapack-pic

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *             Automatically Tuned Linear Algebra Software v3.8.4
3
 
 *                    (C) Copyright 1999 R. Clint Whaley
4
 
 *
5
 
 * Redistribution and use in source and binary forms, with or without
6
 
 * modification, are permitted provided that the following conditions
7
 
 * are met:
8
 
 *   1. Redistributions of source code must retain the above copyright
9
 
 *      notice, this list of conditions and the following disclaimer.
10
 
 *   2. Redistributions in binary form must reproduce the above copyright
11
 
 *      notice, this list of conditions, and the following disclaimer in the
12
 
 *      documentation and/or other materials provided with the distribution.
13
 
 *   3. The name of the ATLAS group or the names of its contributers may
14
 
 *      not be used to endorse or promote products derived from this
15
 
 *      software without specific written permission.
16
 
 *
17
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
 
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19
 
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS
21
 
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
 
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
 
 * POSSIBILITY OF SUCH DAMAGE.
28
 
 *
29
 
 */
30
 
 
31
 
#include "atlas_misc.h"
32
 
#include "atlas_level2.h"
33
 
#include "atlas_level1.h"
34
 
 
35
 
#ifdef Conj_
36
 
   #define PEQ -=
37
 
   #define MEQ +=
38
 
#else
39
 
   #define PEQ +=
40
 
   #define MEQ -=
41
 
#endif
42
 
 
43
 
#ifdef Conj_
44
 
   #define gemv0 Mjoin(Mjoin(Mjoin(Mjoin(gemvNc,NM),_x1),BNM),_y1)
45
 
#else
46
 
   #define gemv0 Mjoin(Mjoin(Mjoin(Mjoin(gemvN,NM),_x1),BNM),_y1)
47
 
#endif
48
 
 
49
 
static void gemvMlt4(const int M, const int N, const TYPE *A, const int lda,
50
 
                     const TYPE *X, const SCALAR beta, TYPE *Y)
51
 
{
52
 
   int i;
53
 
   #if defined(BETAX) || defined(BETA1) || defined(BETAXI0)
54
 
      register TYPE yr1, yi1;
55
 
   #endif
56
 
   #ifdef BETAXI0
57
 
      const register TYPE rbeta = *beta;
58
 
   #endif
59
 
   #ifdef BETAX
60
 
      register TYPE yr0, yi0;
61
 
      const register TYPE rbeta = *beta, ibeta = beta[1];
62
 
   #endif
63
 
 
64
 
   for(i=M; i; i--, A += 2, Y += 2)
65
 
   {
66
 
      #ifdef BETA0
67
 
         #ifdef Conj_
68
 
            Mjoin(PATL,dotc_sub)(N, A, lda, X, 1, Y);
69
 
         #else
70
 
            Mjoin(PATL,dotu_sub)(N, A, lda, X, 1, Y);
71
 
         #endif
72
 
      #else
73
 
         #ifdef BETAX
74
 
            yr0 = *Y;
75
 
            yi0 = Y[1];
76
 
            yr1 = yr0 * rbeta - yi0 * ibeta;
77
 
            yi1 = yr0 * ibeta + yi0 * rbeta;
78
 
         #else
79
 
            yr1 = *Y;
80
 
            yi1 = Y[1];
81
 
            #ifdef BETAXI0
82
 
               yr1 *= rbeta;
83
 
               yi1 *= rbeta;
84
 
            #endif
85
 
         #endif
86
 
         #ifdef Conj_
87
 
            Mjoin(PATL,dotc_sub)(N, A, lda, X, 1, Y);
88
 
         #else
89
 
            Mjoin(PATL,dotu_sub)(N, A, lda, X, 1, Y);
90
 
         #endif
91
 
         *Y += yr1;
92
 
         Y[1] += yi1;
93
 
      #endif
94
 
   }
95
 
}
96
 
 
97
 
static void gemvNlt2(const int M, const int N, const TYPE *A, const int lda,
98
 
                     const TYPE *X, const SCALAR beta, TYPE *Y)
99
 
{
100
 
   if (N)
101
 
   {
102
 
      #if defined(BETA0)
103
 
         #ifdef Conj_
104
 
            Mjoin(PATL,moveConj)(M, X, A, 1, Y, 1);
105
 
         #else
106
 
            Mjoin(PATL,cpsc)(M, X, A, 1, Y, 1);
107
 
         #endif
108
 
      #elif defined(BETAX) || defined(BETAXI0)
109
 
         #ifdef Conj_
110
 
            Mjoin(PATL,axpbyConj)(M, X, A, 1, beta, Y, 1);
111
 
         #else
112
 
            Mjoin(PATL,axpby)(M, X, A, 1, beta, Y, 1);
113
 
         #endif
114
 
      #else
115
 
         #ifdef Conj_
116
 
            Mjoin(PATL,axpyConj)(M, X, A, 1, Y, 1);
117
 
         #else
118
 
            Mjoin(PATL,axpy)(M, X, A, 1, Y, 1);
119
 
         #endif
120
 
      #endif
121
 
   }
122
 
}
123
 
 
124
 
void Mjoin(PATL,gemv0)
125
 
   (const int M, const int N, const SCALAR alpha,
126
 
    const TYPE *A, const int lda, const TYPE *X, const int incX,
127
 
    const SCALAR beta, TYPE *Y, const int incY)
128
 
{
129
 
   int j;
130
 
   const int lda2 = lda<<1, N2 = N<<1;
131
 
 
132
 
   #ifdef Conj_
133
 
      #define axpycj Mjoin(PATL,axpyConj)
134
 
      Mjoin(PATL,axpbyConj)(M, X, A, 1, beta, Y, 1);
135
 
   #else
136
 
      #define axpycj Mjoin(PATL,axpy)
137
 
      Mjoin(PATL,axpby)(M, X, A, 1, beta, Y, 1);
138
 
   #endif
139
 
   if (N != 1)
140
 
   {
141
 
      A += lda2;
142
 
      X += 2;
143
 
      for (j=N-1; j; j--, A += lda2, X += 2) axpycj(M, X, A, 1, Y, 1);
144
 
   }
145
 
}