2 * Copyright 2014 ARM Ltd.
4 * Use of this software is governed by the MIT license
16 /* chemv - complex hermitian matrix-vector multiplication
17 * The function body was taken from a VOBLA-generated BLAS library.
19 void chemv(int n
, float alpha_re
, float alpha_im
,
20 int ldAT
, struct ComplexFloat AT
[restrict
const static n
][ldAT
],
21 int incX
, struct ComplexFloat X
[restrict
const static n
][incX
],
22 float beta_re
, float beta_im
,
23 int incY
, struct ComplexFloat Y
[restrict
const static n
][incY
])
26 for (int i0
= 0; i0
<= (n
-1); i0
+= 1) {
29 var5_Re
= ((Y
[i0
][0].Re
*beta_re
)-(Y
[i0
][0].Im
*beta_im
));
30 var5_Im
= ((Y
[i0
][0].Im
*beta_re
)+(Y
[i0
][0].Re
*beta_im
));
31 Y
[i0
][0].Re
= var5_Re
;
32 Y
[i0
][0].Im
= var5_Im
;
34 for (int i1
= 0; i1
<= ((n
-1)+1)-1; i1
+= 1) {
41 var2_Re
= (alpha_re
*AT
[i1
][i1
].Re
);
42 var2_Im
= (alpha_im
*AT
[i1
][i1
].Re
);
43 var3_Re
= ((var2_Re
*X
[i1
][0].Re
)-(var2_Im
*X
[i1
][0].Im
));
44 var3_Im
= ((var2_Im
*X
[i1
][0].Re
)+(var2_Re
*X
[i1
][0].Im
));
45 var4_Re
= (Y
[i1
][0].Re
+var3_Re
);
46 var4_Im
= (Y
[i1
][0].Im
+var3_Im
);
47 Y
[i1
][0].Re
= var4_Re
;
48 Y
[i1
][0].Im
= var4_Im
;
50 for (int i2
= 0; i2
<= ((n
-1)-1); i2
+= 1) {
51 for (int i3
= 0; i3
<= (n
-1)-(1+i2
); i3
+= 1) {
64 var94_Re
= ((alpha_re
*AT
[i2
][((1+i2
)+i3
)].Re
)-
65 (alpha_im
*(-AT
[i2
][((1+i2
)+i3
)].Im
)));
66 var94_Im
= ((alpha_im
*AT
[i2
][((1+i2
)+i3
)].Re
)+
67 (alpha_re
*(-AT
[i2
][((1+i2
)+i3
)].Im
)));
68 var95_Re
= ((var94_Re
*X
[((i3
+i2
)+1)][0].Re
)-
69 (var94_Im
*X
[((i3
+i2
)+1)][0].Im
));
70 var95_Im
= ((var94_Im
*X
[((i3
+i2
)+1)][0].Re
)+
71 (var94_Re
*X
[((i3
+i2
)+1)][0].Im
));
72 var96_Re
= (Y
[i2
][0].Re
+var95_Re
);
73 var96_Im
= (Y
[i2
][0].Im
+var95_Im
);
74 Y
[i2
][0].Re
= var96_Re
;
75 Y
[i2
][0].Im
= var96_Im
;
76 var97_Re
= ((alpha_re
*AT
[i2
][((1+i2
)+i3
)].Re
)-
77 (alpha_im
*AT
[i2
][((1+i2
)+i3
)].Im
));
78 var97_Im
= ((alpha_im
*AT
[i2
][((1+i2
)+i3
)].Re
)+
79 (alpha_re
*AT
[i2
][((1+i2
)+i3
)].Im
));
80 var98_Re
= ((var97_Re
*X
[i2
][0].Re
)-
81 (var97_Im
*X
[i2
][0].Im
));
82 var98_Im
= ((var97_Im
*X
[i2
][0].Re
)+
83 (var97_Re
*X
[i2
][0].Im
));
84 var99_Re
= (Y
[((i3
+i2
)+1)][0].Re
+var98_Re
);
85 var99_Im
= (Y
[((i3
+i2
)+1)][0].Im
+var98_Im
);
86 Y
[((i3
+i2
)+1)][0].Re
= var99_Re
;
87 Y
[((i3
+i2
)+1)][0].Im
= var99_Im
;
99 struct ComplexFloat AT
[n
][ldAT
];
100 struct ComplexFloat X
[n
][incX
];
101 struct ComplexFloat Y
[n
][incY
];
103 for (int i
= 0; i
< n
; i
++) {
104 X
[i
][0] = (struct ComplexFloat
){i
+ 5, i
* 2};
105 Y
[i
][0] = (struct ComplexFloat
){i
* 3, i
+ 7};
106 for (int j
= 0; j
< ldAT
; j
++) {
107 AT
[i
][j
] = (struct ComplexFloat
){i
+ j
, i
+ 3};
111 chemv(n
, 3.14f
, 1.59f
, ldAT
, AT
, incX
, X
, 2.71f
, 8.28f
, incY
, Y
);
113 for (int i
= 0; i
< n
; i
++)
114 printf("%0.2f %0.2f\n", Y
[i
][0].Re
, Y
[i
][0].Im
);