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