libflame revision_anchor
|
Functions | |
FLA_Error | FLA_Apply_diag_matrix (FLA_Side side, FLA_Conj conj, FLA_Obj x, FLA_Obj A) |
References bli_capdiagmv(), bli_dapdiagmv(), bli_sapdiagmv(), bli_zapdiagmv(), FLA_Apply_diag_matrix_check(), FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_Obj_width(), FLA_Param_map_flame_to_blis_conj(), and FLA_Param_map_flame_to_blis_side().
{ FLA_Datatype datatype; int m_A, n_A; int rs_A, cs_A; int inc_x; char blis_side; char blis_conj; if ( FLA_Check_error_level() == FLA_MIN_ERROR_CHECKING ) FLA_Apply_diag_matrix_check( side, conj, x, A ); datatype = FLA_Obj_datatype( A ); m_A = FLA_Obj_length( A ); n_A = FLA_Obj_width( A ); rs_A = FLA_Obj_row_stride( A ); cs_A = FLA_Obj_col_stride( A ); inc_x = FLA_Obj_vector_inc( x ); FLA_Param_map_flame_to_blis_side( side, &blis_side ); FLA_Param_map_flame_to_blis_conj( conj, &blis_conj ); switch ( datatype ) { case FLA_FLOAT: { float* buff_x = ( float* ) FLA_FLOAT_PTR( x ); float* buff_A = ( float* ) FLA_FLOAT_PTR( A ); bli_sapdiagmv( blis_side, blis_conj, m_A, n_A, buff_x, inc_x, buff_A, rs_A, cs_A ); break; } case FLA_DOUBLE: { double* buff_x = ( double* ) FLA_DOUBLE_PTR( x ); double* buff_A = ( double* ) FLA_DOUBLE_PTR( A ); bli_dapdiagmv( blis_side, blis_conj, m_A, n_A, buff_x, inc_x, buff_A, rs_A, cs_A ); break; } case FLA_COMPLEX: { scomplex* buff_x = ( scomplex* ) FLA_COMPLEX_PTR( x ); scomplex* buff_A = ( scomplex* ) FLA_COMPLEX_PTR( A ); bli_capdiagmv( blis_side, blis_conj, m_A, n_A, buff_x, inc_x, buff_A, rs_A, cs_A ); break; } case FLA_DOUBLE_COMPLEX: { dcomplex* buff_x = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( x ); dcomplex* buff_A = ( dcomplex* ) FLA_DOUBLE_COMPLEX_PTR( A ); bli_zapdiagmv( blis_side, blis_conj, m_A, n_A, buff_x, inc_x, buff_A, rs_A, cs_A ); break; } } return FLA_SUCCESS; }