1 /*
2
3 BLIS
4 An object-based framework for developing high-performance BLAS-like
5 libraries.
6
7 Copyright (C) 2014, The University of Texas at Austin
8
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(s) of the copyright holder(s) nor the names of its
18 contributors may be used to endorse or promote products derived
19 from this software without specific prior written permission.
20
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.
32
33 */
34
35 #include "blis.h"
36
37 //
38 // Define object-based check functions.
39 //
40
41 #undef GENFRONT
42 #define GENFRONT( opname ) \
43 \
44 void PASTEMAC(opname,_check) \
45 ( \
46 obj_t* x, \
47 obj_t* y \
48 ) \
49 { \
50 bli_l1m_xy_check( x, y ); \
51 }
52
53 GENFRONT( addm )
GENFRONT(copym)54 GENFRONT( copym )
55 GENFRONT( subm )
56
57
58 #undef GENFRONT
59 #define GENFRONT( opname ) \
60 \
61 void PASTEMAC(opname,_check) \
62 ( \
63 obj_t* alpha, \
64 obj_t* x, \
65 obj_t* y \
66 ) \
67 { \
68 bli_l1m_axy_check( alpha, x, y ); \
69 }
70
71 GENFRONT( axpym )
72 GENFRONT( scal2m )
73
74
75 #undef GENFRONT
76 #define GENFRONT( opname ) \
77 \
78 void PASTEMAC(opname,_check) \
79 ( \
80 obj_t* alpha, \
81 obj_t* x \
82 ) \
83 { \
84 bli_l1m_ax_check( alpha, x ); \
85 }
86
87 GENFRONT( scalm )
88 GENFRONT( setm )
89
90
91 #undef GENFRONT
92 #define GENFRONT( opname ) \
93 \
94 void PASTEMAC(opname,_check) \
95 ( \
96 obj_t* x, \
97 obj_t* beta, \
98 obj_t* y \
99 ) \
100 { \
101 bli_l1m_axy_check( beta, x, y ); \
102 }
103
104 GENFRONT( xpbym )
105
106
107 // -----------------------------------------------------------------------------
108
109 void bli_l1m_xy_check
110 (
111 obj_t* x,
112 obj_t* y
113 )
114 {
115 err_t e_val;
116
117 // Check object datatypes.
118
119 e_val = bli_check_floating_object( x );
120 bli_check_error_code( e_val );
121
122 e_val = bli_check_floating_object( y );
123 bli_check_error_code( e_val );
124
125 // Check for consistent datatypes.
126
127 e_val = bli_check_consistent_object_datatypes( x, y );
128 bli_check_error_code( e_val );
129
130 // Check object dimensions.
131
132 e_val = bli_check_matrix_object( x );
133 bli_check_error_code( e_val );
134
135 e_val = bli_check_matrix_object( y );
136 bli_check_error_code( e_val );
137
138 e_val = bli_check_conformal_dims( x, y );
139 bli_check_error_code( e_val );
140
141 // Check object buffers (for non-NULLness).
142
143 e_val = bli_check_object_buffer( x );
144 bli_check_error_code( e_val );
145
146 e_val = bli_check_object_buffer( y );
147 bli_check_error_code( e_val );
148 }
149
bli_l1m_axy_check(obj_t * alpha,obj_t * x,obj_t * y)150 void bli_l1m_axy_check
151 (
152 obj_t* alpha,
153 obj_t* x,
154 obj_t* y
155 )
156 {
157 err_t e_val;
158
159 // Check object datatypes.
160
161 e_val = bli_check_noninteger_object( alpha );
162 bli_check_error_code( e_val );
163
164 e_val = bli_check_floating_object( x );
165 bli_check_error_code( e_val );
166
167 e_val = bli_check_floating_object( y );
168 bli_check_error_code( e_val );
169
170 // Check for consistent datatypes.
171
172 e_val = bli_check_consistent_object_datatypes( x, y );
173 bli_check_error_code( e_val );
174
175 // Check object dimensions.
176
177 e_val = bli_check_scalar_object( alpha );
178 bli_check_error_code( e_val );
179
180 e_val = bli_check_matrix_object( x );
181 bli_check_error_code( e_val );
182
183 e_val = bli_check_matrix_object( y );
184 bli_check_error_code( e_val );
185
186 e_val = bli_check_conformal_dims( x, y );
187 bli_check_error_code( e_val );
188
189 // Check object buffers (for non-NULLness).
190
191 e_val = bli_check_object_buffer( alpha );
192 bli_check_error_code( e_val );
193
194 e_val = bli_check_object_buffer( x );
195 bli_check_error_code( e_val );
196
197 e_val = bli_check_object_buffer( y );
198 bli_check_error_code( e_val );
199 }
200
bli_l1m_ax_check(obj_t * alpha,obj_t * x)201 void bli_l1m_ax_check
202 (
203 obj_t* alpha,
204 obj_t* x
205 )
206 {
207 err_t e_val;
208
209 // Check object datatypes.
210
211 e_val = bli_check_noninteger_object( alpha );
212 bli_check_error_code( e_val );
213
214 e_val = bli_check_floating_object( x );
215 bli_check_error_code( e_val );
216
217 // Check object dimensions.
218
219 e_val = bli_check_scalar_object( alpha );
220 bli_check_error_code( e_val );
221
222 e_val = bli_check_matrix_object( x );
223 bli_check_error_code( e_val );
224
225 // Check object properties.
226
227 //e_val = bli_check_nonunit_diag( x );
228 //bli_check_error_code( e_val );
229
230 // Check object buffers (for non-NULLness).
231
232 e_val = bli_check_object_buffer( alpha );
233 bli_check_error_code( e_val );
234
235 e_val = bli_check_object_buffer( x );
236 bli_check_error_code( e_val );
237 }
238
239