1 /*
2
3 Copyright (C) 2014, The University of Texas at Austin
4
5 This file is part of libflame and is available under the 3-Clause
6 BSD license, which can be found in the LICENSE file at the top-level
7 directory, or at http://opensource.org/licenses/BSD-3-Clause
8
9 */
10
11 #include "FLAME.h"
12
FLA_Sylv_hn_blk_var17(FLA_Obj isgn,FLA_Obj A,FLA_Obj B,FLA_Obj C,FLA_Obj scale,fla_sylv_t * cntl)13 FLA_Error FLA_Sylv_hn_blk_var17( FLA_Obj isgn, FLA_Obj A, FLA_Obj B, FLA_Obj C, FLA_Obj scale, fla_sylv_t* cntl )
14 {
15 FLA_Obj BTL, BTR, B00, B01, B02,
16 BBL, BBR, B10, B11, B12,
17 B20, B21, B22;
18
19 FLA_Obj CL, CR, C0, C1, C2;
20
21 dim_t b;
22
23 FLA_Part_2x2( B, &BTL, &BTR,
24 &BBL, &BBR, 0, 0, FLA_TL );
25
26 FLA_Part_1x2( C, &CL, &CR, 0, FLA_LEFT );
27
28 while ( FLA_Obj_length( BTL ) < FLA_Obj_length( B ) ){
29
30 b = FLA_Determine_blocksize( CR, FLA_RIGHT, FLA_Cntl_blocksize( cntl ) );
31
32 FLA_Repart_2x2_to_3x3( BTL, /**/ BTR, &B00, /**/ &B01, &B02,
33 /* ************* */ /* ******************** */
34 &B10, /**/ &B11, &B12,
35 BBL, /**/ BBR, &B20, /**/ &B21, &B22,
36 b, b, FLA_BR );
37
38 FLA_Repart_1x2_to_1x3( CL, /**/ CR, &C0, /**/ &C1, &C2,
39 b, FLA_RIGHT );
40
41 // Loop Invariant:
42 // CL =
43 // CR =
44
45 /*------------------------------------------------------------*/
46
47 // C1 = sylv( A', B11, C1 -/+ C0 * B01 );
48 FLA_Gemm_internal( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE,
49 FLA_NEGATE( isgn ), C0, B01, FLA_ONE, C1,
50 FLA_Cntl_sub_gemm1( cntl ) );
51
52 FLA_Sylv_internal( FLA_CONJ_TRANSPOSE, FLA_NO_TRANSPOSE,
53 isgn, A, B11, C1, scale,
54 FLA_Cntl_sub_sylv1( cntl ) );
55
56 /*------------------------------------------------------------*/
57
58 FLA_Cont_with_3x3_to_2x2( &BTL, /**/ &BTR, B00, B01, /**/ B02,
59 B10, B11, /**/ B12,
60 /* ************** */ /* ****************** */
61 &BBL, /**/ &BBR, B20, B21, /**/ B22,
62 FLA_TL );
63
64 FLA_Cont_with_1x3_to_1x2( &CL, /**/ &CR, C0, C1, /**/ C2,
65 FLA_LEFT );
66 }
67
68 return FLA_SUCCESS;
69 }
70