|
libflame
revision_anchor
|
Functions | |
| FLA_Error | FLA_SA_Apply_pivots (FLA_Obj C, FLA_Obj E, FLA_Obj p) |
| FLA_Error FLA_SA_Apply_pivots | ( | FLA_Obj | C, |
| FLA_Obj | E, | ||
| FLA_Obj | p | ||
| ) |
References bli_cswap(), bli_dswap(), bli_sswap(), bli_zswap(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_length(), and FLA_Obj_width().
Referenced by FLA_SA_FS_blk(), and FLA_SA_LU_blk().
{
FLA_Datatype datatype;
int m_C, n_C, cs_C;
int cs_E;
// int rs_C;
// int rs_E;
int m_p;
int i;
int* buff_p;
if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS;
datatype = FLA_Obj_datatype( C );
m_C = FLA_Obj_length( C );
n_C = FLA_Obj_width( C );
cs_C = FLA_Obj_col_stride( C );
// rs_C = FLA_Obj_row_stride( C );
cs_E = FLA_Obj_col_stride( E );
// rs_E = FLA_Obj_row_stride( E );
m_p = FLA_Obj_length( p );
buff_p = ( int * ) FLA_INT_PTR( p );
switch ( datatype ){
case FLA_FLOAT:
{
float* buff_C = ( float * ) FLA_FLOAT_PTR( C );
float* buff_E = ( float * ) FLA_FLOAT_PTR( E );
for ( i = 0; i < m_p; ++i )
{
if ( buff_p[ i ] != 0 )
bli_sswap( n_C,
buff_C + 0*cs_C + i, cs_C,
buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
}
break;
}
case FLA_DOUBLE:
{
double* buff_C = ( double * ) FLA_DOUBLE_PTR( C );
double* buff_E = ( double * ) FLA_DOUBLE_PTR( E );
for ( i = 0; i < m_p; ++i )
{
if ( buff_p[ i ] != 0 )
bli_dswap( n_C,
buff_C + 0*cs_C + i, cs_C,
buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
}
break;
}
case FLA_COMPLEX:
{
scomplex* buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C );
scomplex* buff_E = ( scomplex * ) FLA_COMPLEX_PTR( E );
for ( i = 0; i < m_p; ++i )
{
if ( buff_p[ i ] != 0 )
bli_cswap( n_C,
buff_C + 0*cs_C + i, cs_C,
buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
}
break;
}
case FLA_DOUBLE_COMPLEX:
{
dcomplex* buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C );
dcomplex* buff_E = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( E );
for ( i = 0; i < m_p; ++i )
{
if ( buff_p[ i ] != 0 )
bli_zswap( n_C,
buff_C + 0*cs_C + i, cs_C,
buff_E + 0*cs_E + buff_p[ i ] - ( m_C - i ), cs_E );
}
break;
}
}
return FLA_SUCCESS;
}
1.7.6.1