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