dim_t offx, offy; \ inc_t incx, incy; \ \ if ( bli_zero_dim2( m, n ) ) return; \ \ if ( PASTEMAC(cha,eq0)( *alpha_cast ) ) return; \ \ if ( bli_is_outside_diag( diagoffx, transx, m, n ) ) return; \ \ /* Determine the distance to the diagonals, the number of diagonal elements, and the diagonal increments. */ \ bli_set_dims_incs_2d( diagoffx, transx, \ m, n, rs_x, cs_x, rs_y, cs_y, \ offx, offy, n_elem, incx, incy ); \ \ conjx = bli_extract_conj( transx ); \ \ if ( bli_is_nonunit_diag( diagx ) ) \ { \ x1 = x_cast + offx; \ y1 = y_cast + offy; \ } \ else /* if ( bli_is_unit_diag( diagx ) ) */ \ { \ /* Simulate a unit diagonal for x with a zero increment over a unit scalar. */ \ x1 = PASTEMAC(chx,1); \ incx = 0; \ y1 = y_cast + offy; \ } \ \
inc_t is_p_use; \ dim_t ss_num; \ dim_t ss_den; \ \ ctype* restrict c_use; \ ctype* restrict p_use; \ doff_t diagoffp_i; \ \ \ /* If C is zeros and part of a triangular matrix, then we don't need to pack it. */ \ if ( bli_is_zeros( uploc ) && \ bli_is_triangular( strucc ) ) return; \ \ /* Extract the conjugation bit from the transposition argument. */ \ conjc = bli_extract_conj( transc ); \ \ /* If c needs a transposition, induce it so that we can more simply express the remaining parameters and code. */ \ if ( bli_does_trans( transc ) ) \ { \ bli_swap_incs( rs_c, cs_c ); \ bli_negate_diag_offset( diagoffc ); \ bli_toggle_uplo( uploc ); \ bli_toggle_trans( transc ); \ } \ \ /* Create flags to incidate row or column storage. Note that the schema bit that encodes row or column is describing the form of micro-panel, not the storage in the micro-panel. Hence the mismatch in "row" and "column" semantics. */ \