22 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTDMATSUBEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DMATTDMATSUBEXPR_H_
63 template<
typename MT1
71 typedef typename MT1::ResultType
RT1;
72 typedef typename MT2::ResultType
RT2;
73 typedef typename MT1::ReturnType
RN1;
74 typedef typename MT2::ReturnType
RN2;
75 typedef typename MT1::CompositeType
CT1;
76 typedef typename MT2::CompositeType
CT2;
115 enum { vectorizable = 0 };
166 return lhs_.columns();
196 template<
typename T >
221 template<
typename MT
232 const size_t m( rhs.
rows() );
233 const size_t n( rhs.
columns() );
234 const size_t block( 16UL );
236 for(
size_t ii=0UL; ii<m; ii+=block ) {
237 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
238 for(
size_t jj=0UL; jj<n; jj+=block ) {
239 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
240 for(
size_t i=ii; i<iend; ++i ) {
241 for(
size_t j=jj; j<jend; ++j ) {
242 (~lhs)(i,j) = rhs.
lhs_(i,j) - rhs.
rhs_(i,j);
275 template<
typename MT
291 const TmpType tmp( rhs );
310 template<
typename MT
319 if( !RequiresEvaluation<MT1>::value && !RequiresEvaluation<MT2>::value )
321 const size_t m( rhs.rows() );
322 const size_t n( rhs.columns() );
323 const size_t block( 16UL );
325 for(
size_t ii=0UL; ii<m; ii+=block ) {
326 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
327 for(
size_t jj=0UL; jj<n; jj+=block ) {
328 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
329 for(
size_t i=ii; i<iend; ++i ) {
330 for(
size_t j=jj; j<jend; ++j ) {
331 (~lhs)(i,j) += rhs.lhs_(i,j) - rhs.rhs_(i,j);
366 template<
typename MT
375 if( !RequiresEvaluation<MT1>::value && !RequiresEvaluation<MT2>::value )
377 const size_t m( rhs.rows() );
378 const size_t n( rhs.columns() );
379 const size_t block( 16UL );
381 for(
size_t ii=0UL; ii<m; ii+=block ) {
382 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
383 for(
size_t jj=0UL; jj<n; jj+=block ) {
384 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
385 for(
size_t i=ii; i<iend; ++i ) {
386 for(
size_t j=jj; j<jend; ++j ) {
387 (~lhs)(i,j) -= rhs.lhs_(i,j) - rhs.rhs_(i,j);
465 template<
typename T1
467 inline const DMatTDMatSubExpr<T1,T2>
471 throw std::invalid_argument(
"Matrix sizes do not match" );
507 template<
typename T1
509 inline const DMatTDMatSubExpr<T1,T2>
513 throw std::invalid_argument(
"Matrix sizes do not match" );