27{
32
33 if (B + m-1 + ldb*(
n-1) < A || A + m-1 + lda*(
n-1) < B)
34 {
36 }
37 else if (lda != ldb)
38 {
39 TYPE *tmp = malloc(
sizeof(*A) * m *
n);
40 if (!tmp)
41 {
43 const char func[] =
FUNC;
44 xerbla_(func, &info,
sizeof func);
45 }
46 else
47 {
50 free(tmp);
51 }
52 }
53 else
54 {
56 switch (toupper(*UPLO))
57 {
58 case 'U':
59 if (A > B)
60 {
62 for (i=0; i<j && i<m; i++)
63 B[i+ldb*j] = A[i+lda*j];
64 }
65 else
66 {
68 for (i=j<m ? j : m; --i>=0;)
69 B[i+ldb*j] = A[i+lda*j];
70 }
71 break;
72
73 case 'L':
74 if (A > B)
75 {
77 for (i=j; i<m; i++)
78 B[i+ldb*j] = A[i+lda*j];
79 }
80 else
81 {
82 for (j=m<n ? m : n; --j>=0;)
83 for (i=m; --i>=j;)
84 B[i+ldb*j] = A[i+lda*j];
85 }
86 break;
87
88 default:
89 if (A > B)
90 {
92 for (i=0; i<m; i++)
93 B[i+ldb*j] = A[i+lda*j];
94 }
95 else
96 {
98 for (i=m; --i>=0;)
99 B[i+ldb*j] = A[i+lda*j];
100 }
101 break;
102 }
103 }
104}
void xerbla_(const char *, const F_INTG_FCT *, size_t)