1 /*
3 BLIS
4 An object-based framework for developing high-performance BLAS-like
5 libraries.
7 Copyright (C) 2014, The University of Texas at Austin
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are
11 met:
12 - Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14 - Redistributions in binary form must reproduce the above copyright
15 notice, this list of conditions and the following disclaimer in the
16 documentation and/or other materials provided with the distribution.
17 - Neither the name of The University of Texas at Austin nor the names
18 of its contributors may be used to endorse or promote products
19 derived from this software without specific prior written permission.
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
35 #include "blis.h"
37 void bli_her2k_basic_check( obj_t* alpha,
38 obj_t* a,
39 obj_t* bh,
40 obj_t* alpha_conj,
41 obj_t* b,
42 obj_t* ah,
43 obj_t* beta,
44 obj_t* c )
45 {
46 err_t e_val;
48 // Check object datatypes.
50 e_val = bli_check_noninteger_object( alpha );
51 bli_check_error_code( e_val );
53 e_val = bli_check_noninteger_object( beta );
54 bli_check_error_code( e_val );
56 e_val = bli_check_floating_object( a );
57 bli_check_error_code( e_val );
59 e_val = bli_check_floating_object( bh );
60 bli_check_error_code( e_val );
62 e_val = bli_check_noninteger_object( alpha_conj );
63 bli_check_error_code( e_val );
65 e_val = bli_check_floating_object( b );
66 bli_check_error_code( e_val );
68 e_val = bli_check_floating_object( ah );
69 bli_check_error_code( e_val );
71 e_val = bli_check_floating_object( c );
72 bli_check_error_code( e_val );
74 // Check object dimensions.
76 e_val = bli_check_scalar_object( alpha );
77 bli_check_error_code( e_val );
79 e_val = bli_check_scalar_object( beta );
80 bli_check_error_code( e_val );
82 e_val = bli_check_matrix_object( a );
83 bli_check_error_code( e_val );
85 e_val = bli_check_matrix_object( ah );
86 bli_check_error_code( e_val );
88 e_val = bli_check_matrix_object( b );
89 bli_check_error_code( e_val );
91 e_val = bli_check_matrix_object( bh );
92 bli_check_error_code( e_val );
94 e_val = bli_check_matrix_object( c );
95 bli_check_error_code( e_val );
97 e_val = bli_check_level3_dims( a, bh, c );
98 bli_check_error_code( e_val );
100 e_val = bli_check_scalar_object( alpha_conj );
101 bli_check_error_code( e_val );
103 e_val = bli_check_level3_dims( b, ah, c );
104 bli_check_error_code( e_val );
106 // Check matrix structure.
108 e_val = bli_check_general_object( a );
109 bli_check_error_code( e_val );
111 e_val = bli_check_general_object( bh );
112 bli_check_error_code( e_val );
114 e_val = bli_check_general_object( b );
115 bli_check_error_code( e_val );
117 e_val = bli_check_general_object( ah );
118 bli_check_error_code( e_val );
119 }
121 void bli_her2k_check( obj_t* alpha,
122 obj_t* a,
123 obj_t* b,
124 obj_t* beta,
125 obj_t* c )
126 {
127 err_t e_val;
128 obj_t ah, bh;
130 // Alias A and B to A^H and B^H so we can perform dimension checks.
131 bli_obj_alias_with_trans( BLIS_CONJ_TRANSPOSE, *a, ah );
132 bli_obj_alias_with_trans( BLIS_CONJ_TRANSPOSE, *b, bh );
134 // Check basic properties of the operation.
136 bli_her2k_basic_check( alpha, a, &bh, alpha, b, &ah, beta, c );
138 // Check for real-valued beta.
140 e_val = bli_check_real_valued_object( beta );
141 bli_check_error_code( e_val );
143 // Check matrix squareness.
145 e_val = bli_check_square_object( c );
146 bli_check_error_code( e_val );
148 // Check matrix structure.
150 e_val = bli_check_hermitian_object( c );
151 bli_check_error_code( e_val );
152 }
154 #if 0
155 void bli_her2k_int_check( obj_t* alpha,
156 obj_t* a,
157 obj_t* bh,
158 obj_t* alpha_conj,
159 obj_t* b,
160 obj_t* ah,
161 obj_t* beta,
162 obj_t* c,
163 her2k_t* cntl )
164 {
165 err_t e_val;
167 // Check object buffers (for non-NULLness).
169 e_val = bli_check_object_buffer( alpha );
170 bli_check_error_code( e_val );
172 e_val = bli_check_object_buffer( a );
173 bli_check_error_code( e_val );
175 e_val = bli_check_object_buffer( bh );
176 bli_check_error_code( e_val );
178 e_val = bli_check_object_buffer( alpha_conj );
179 bli_check_error_code( e_val );
181 e_val = bli_check_object_buffer( b );
182 bli_check_error_code( e_val );
184 e_val = bli_check_object_buffer( ah );
185 bli_check_error_code( e_val );
187 e_val = bli_check_object_buffer( beta );
188 bli_check_error_code( e_val );
190 e_val = bli_check_object_buffer( c );
191 bli_check_error_code( e_val );
193 // Check basic properties of the operation.
195 bli_her2k_basic_check( alpha, a, bh, alpha_conj, b, ah, beta, c );
197 // Check control tree pointer
199 e_val = bli_check_valid_cntl( ( void* )cntl );
200 bli_check_error_code( e_val );
201 }
202 #endif