1 /*
2
3 Copyright (C) 2014, The University of Texas at Austin
4
5 This file is part of libflame and is available under the 3-Clause
6 BSD license, which can be found in the LICENSE file at the top-level
7 directory, or at http://opensource.org/licenses/BSD-3-Clause
8
9 */
10
11 #include "blis1.h"
12
bl1_sdot2s(conj1_t conj,int n,float * alpha,float * x,int incx,float * y,int incy,float * beta,float * rho)13 void bl1_sdot2s( conj1_t conj, int n, float* alpha, float* x, int incx, float* y, int incy, float* beta, float* rho )
14 {
15 float dot;
16
17 bl1_sdot( conj,
18 n,
19 x, incx,
20 y, incy,
21 &dot );
22
23 *rho = (*beta) * (*rho) + 2.0F * (*alpha) * dot;
24 }
25
bl1_ddot2s(conj1_t conj,int n,double * alpha,double * x,int incx,double * y,int incy,double * beta,double * rho)26 void bl1_ddot2s( conj1_t conj, int n, double* alpha, double* x, int incx, double* y, int incy, double* beta, double* rho )
27 {
28 double dot;
29
30 bl1_ddot( conj,
31 n,
32 x, incx,
33 y, incy,
34 &dot );
35
36 *rho = (*beta) * (*rho) + 2.0 * (*alpha) * dot;
37 }
38
bl1_cdot2s(conj1_t conj,int n,scomplex * alpha,scomplex * x,int incx,scomplex * y,int incy,scomplex * beta,scomplex * rho)39 void bl1_cdot2s( conj1_t conj, int n, scomplex* alpha, scomplex* x, int incx, scomplex* y, int incy, scomplex* beta, scomplex* rho )
40 {
41 scomplex dotxy;
42 scomplex dotyx;
43 scomplex alpha_d = *alpha;
44 scomplex alphac_d = *alpha;
45 scomplex beta_d = *beta;
46 scomplex rho_d = *rho;
47
48 alphac_d.imag *= -1.0F;
49
50 bl1_cdot( conj,
51 n,
52 x, incx,
53 y, incy,
54 &dotxy );
55
56 bl1_cdot( conj,
57 n,
58 y, incy,
59 x, incx,
60 &dotyx );
61
62 rho->real = beta_d.real * rho_d.real - beta_d.imag * rho_d.imag +
63 alpha_d.real * dotxy.real - alpha_d.imag * dotxy.imag +
64 alphac_d.real * dotyx.real - alphac_d.imag * dotyx.imag;
65 rho->imag = beta_d.real * rho_d.imag + beta_d.imag * rho_d.real +
66 alpha_d.real * dotxy.imag + alpha_d.imag * dotxy.real +
67 alphac_d.real * dotyx.imag + alphac_d.imag * dotyx.real;
68 }
69
bl1_zdot2s(conj1_t conj,int n,dcomplex * alpha,dcomplex * x,int incx,dcomplex * y,int incy,dcomplex * beta,dcomplex * rho)70 void bl1_zdot2s( conj1_t conj, int n, dcomplex* alpha, dcomplex* x, int incx, dcomplex* y, int incy, dcomplex* beta, dcomplex* rho )
71 {
72 dcomplex dotxy;
73 dcomplex dotyx;
74 dcomplex alpha_d = *alpha;
75 dcomplex alphac_d = *alpha;
76 dcomplex beta_d = *beta;
77 dcomplex rho_d = *rho;
78
79 alphac_d.imag *= -1.0;
80
81 bl1_zdot( conj,
82 n,
83 x, incx,
84 y, incy,
85 &dotxy );
86
87 bl1_zdot( conj,
88 n,
89 y, incy,
90 x, incx,
91 &dotyx );
92
93 rho->real = beta_d.real * rho_d.real - beta_d.imag * rho_d.imag +
94 alpha_d.real * dotxy.real - alpha_d.imag * dotxy.imag +
95 alphac_d.real * dotyx.real - alphac_d.imag * dotyx.imag;
96 rho->imag = beta_d.real * rho_d.imag + beta_d.imag * rho_d.real +
97 alpha_d.real * dotxy.imag + alpha_d.imag * dotxy.real +
98 alphac_d.real * dotyx.imag + alphac_d.imag * dotyx.real;
99 }
100
101