14{
16 int ipiv;
18 FLA_Obj* blocks = FLASH_OBJ_PTR_AT( A );
23
24#ifdef FLA_ENABLE_WINDOWS_BUILD
25 int* m = ( int* ) _alloca( m_blocks * sizeof( int ) );
26 int* cs = ( int* ) _alloca( m_blocks * sizeof( int ) );
27#else
28 int* m = ( int* ) malloc( m_blocks * sizeof( int ) );
29 int* cs = ( int* ) malloc( m_blocks * sizeof( int ) );
30
31
32#endif
33
34 if ( side != FLA_LEFT || trans != FLA_NO_TRANSPOSE )
35 FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
36
37 switch ( datatype )
38 {
39 case FLA_FLOAT:
40 {
41#ifdef FLA_ENABLE_WINDOWS_BUILD
42 float** buffer = ( float** ) _alloca( m_blocks * sizeof( float* ) );
43#else
44 float** buffer = ( float** ) malloc( m_blocks * sizeof( float* ) );
45
46#endif
47 for (
i = 0;
i < m_blocks;
i++ )
48 {
50
53 }
54
55 for ( j = 0; j < m_A; j++ )
56 {
57 ipiv = buf_p[j] + j;
58
59 if ( ipiv != j )
60 {
62
63 while ( ipiv >= m[
i] )
64 {
67 }
68
70 buffer[0] + j, cs[0],
71 buffer[
i] + ipiv, cs[
i] );
72 }
73 }
74#ifdef FLA_ENABLE_WINDOWS_BUILD
75#else
76 free( buffer );
77#endif
78 break;
79 }
80 case FLA_DOUBLE:
81 {
82#ifdef FLA_ENABLE_WINDOWS_BUILD
83 double** buffer = ( double** ) _alloca( m_blocks * sizeof( double* ) );
84#else
85 double** buffer = ( double** ) malloc( m_blocks * sizeof( double* ) );
86
87#endif
88 for (
i = 0;
i < m_blocks;
i++ )
89 {
91
94 }
95
96 for ( j = 0; j < m_A; j++ )
97 {
98 ipiv = buf_p[j] + j;
99
100 if ( ipiv != j )
101 {
103
104 while ( ipiv >= m[
i] )
105 {
108 }
109
111 buffer[0] + j, cs[0],
112 buffer[
i] + ipiv, cs[
i] );
113 }
114 }
115#ifdef FLA_ENABLE_WINDOWS_BUILD
116#else
117 free( buffer );
118#endif
119 break;
120 }
121 case FLA_COMPLEX:
122 {
123#ifdef FLA_ENABLE_WINDOWS_BUILD
125#else
127
128#endif
129 for (
i = 0;
i < m_blocks;
i++ )
130 {
132
135 }
136
137 for ( j = 0; j < m_A; j++ )
138 {
139 ipiv = buf_p[j] + j;
140
141 if ( ipiv != j )
142 {
144
145 while ( ipiv >= m[
i] )
146 {
149 }
150
152 buffer[0] + j, cs[0],
153 buffer[
i] + ipiv, cs[
i] );
154 }
155 }
156#ifdef FLA_ENABLE_WINDOWS_BUILD
157#else
158 free( buffer );
159#endif
160 break;
161 }
162 case FLA_DOUBLE_COMPLEX:
163 {
164#ifdef FLA_ENABLE_WINDOWS_BUILD
166#else
168
169#endif
170 for (
i = 0;
i < m_blocks;
i++ )
171 {
173
176 }
177
178 for ( j = 0; j < m_A; j++ )
179 {
180 ipiv = buf_p[j] + j;
181
182 if ( ipiv != j )
183 {
185
186 while ( ipiv >= m[
i] )
187 {
190 }
191
193 buffer[0] + j, cs[0],
194 buffer[
i] + ipiv, cs[
i] );
195 }
196 }
197#ifdef FLA_ENABLE_WINDOWS_BUILD
198#else
199 free( buffer );
200#endif
201 break;
202 }
203 }
204
205#ifdef FLA_ENABLE_WINDOWS_BUILD
206#else
207 free( m );
208 free( cs );
209#endif
210
211 return FLA_SUCCESS;
212}
dim_t FLA_Obj_width(FLA_Obj obj)
Definition FLA_Query.c:123
dim_t FLA_Obj_length(FLA_Obj obj)
Definition FLA_Query.c:116
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition FLA_Query.c:174
void * FLA_Obj_buffer_at_view(FLA_Obj obj)
Definition FLA_Query.c:215
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition FLA_Query.c:13
int FLA_Datatype
Definition FLA_type_defs.h:49
int i
Definition bl1_axmyv2.c:145
void bl1_dswapv(int n, double *x, int incx, double *y, int incy)
Definition bl1_swapv.c:23
void bl1_zswapv(int n, dcomplex *x, int incx, dcomplex *y, int incy)
Definition bl1_swapv.c:43
void bl1_sswapv(int n, float *x, int incx, float *y, int incy)
Definition bl1_swapv.c:13
void bl1_cswapv(int n, scomplex *x, int incx, scomplex *y, int incy)
Definition bl1_swapv.c:33
Definition FLA_type_defs.h:159
Definition blis_type_defs.h:138
Definition blis_type_defs.h:133