1 /*********************************************************************/
2 /* */
3 /* Optimized BLAS libraries */
4 /* By Kazushige Goto <kgoto@tacc.utexas.edu> */
5 /* */
6 /* Copyright (c) The University of Texas, 2009. All rights reserved. */
7 /* UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING */
8 /* THIS SOFTWARE AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF */
9 /* MERCHANTABILITY, FITNESS FOR ANY PARTICULAR PURPOSE, */
10 /* NON-INFRINGEMENT AND WARRANTIES OF PERFORMANCE, AND ANY WARRANTY */
11 /* THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF */
12 /* TRADE. NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO */
13 /* THE USE OF THE SOFTWARE OR DOCUMENTATION. */
14 /* Under no circumstances shall University be liable for incidental, */
15 /* special, indirect, direct or consequential damages or loss of */
16 /* profits, interruption of business, or related expenses which may */
17 /* arise from use of Software or Documentation, including but not */
18 /* limited to those resulting from defects in Software and/or */
19 /* Documentation, or loss or inaccuracy of data of any kind. */
20 /*********************************************************************/
21
22 #include <stdio.h>
23 #include "common.h"
24
25 #ifndef USE_ALPHA
26 #define REAL_PART(a, b) (a)
27 #define IMAGE_PART(a, b) (b)
28 #else
29 #define REAL_PART(a, b) (alpha_r * (a) + alpha_i * (b))
30 #define IMAGE_PART(a, b) (alpha_i * (a) - alpha_r * (b))
31 #endif
32
33 #if defined(REAL_ONLY)
34 #define CMULT(a, b) (REAL_PART(a, b))
35 #elif defined(IMAGE_ONLY)
36 #define CMULT(a, b) (IMAGE_PART(a, b))
37 #else
38 #define CMULT(a, b) (REAL_PART(a, b) + IMAGE_PART(a, b))
39 #endif
40
CNAME(BLASLONG m,BLASLONG n,FLOAT * a,BLASLONG lda,BLASLONG posX,BLASLONG posY,FLOAT alpha_r,FLOAT alpha_i,FLOAT * b)41 int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLONG posY,
42 #ifdef USE_ALPHA
43 FLOAT alpha_r, FLOAT alpha_i,
44 #endif
45 FLOAT *b){
46
47 BLASLONG i, js, offset;
48
49 FLOAT data01;
50 FLOAT *ao1;
51
52 lda *= 2;
53
54 js = n;
55
56 while (js > 0){
57
58 offset = posX - posY;
59
60 if (offset > 0) ao1 = a + posY * 2 + (posX + 0) * lda; else ao1 = a + (posX + 0) * 2 + posY * lda;
61
62 i = m;
63
64 while (i > 0) {
65 if (offset > 0) {
66 data01 = CMULT(*(ao1 + 0), -*(ao1 + 1));
67 } else
68 if (offset < 0) {
69 data01 = CMULT(*(ao1 + 0), *(ao1 + 1));
70 } else {
71 data01 = CMULT(*(ao1 + 0), ZERO);
72 }
73
74 if (offset > 0) ao1 += 2; else ao1 += lda;
75
76 b[ 0] = data01;
77
78 b ++;
79
80 offset --;
81 i --;
82 }
83
84 posX ++;
85 js --;
86 }
87
88 return 0;
89 }
90