1024{
1027 float gamma23_k1;
1028 float sigma23_k1;
1029 float gamma34_k1;
1030 float sigma34_k1;
1031 float gamma12_k2;
1032 float sigma12_k2;
1033 float gamma23_k2;
1034 float sigma23_k2;
1044 int nG, nG_app;
1045 int n_iter;
1047 int k_minus_1;
1048 int n_fuse;
1049 int k_fuse;
1050 int is_ident23_k1, is_ident34_k1;
1051 int is_ident12_k2, is_ident23_k2;
1052 int has_ident;
1053
1054 k_minus_1 = k_G - 1;
1055 nG = n_A - 1;
1056 n_fuse = 2;
1057 k_fuse = 2;
1058
1059
1060 if ( nG < 2*k_minus_1 || k_G == 1 )
1061 {
1063 m_A,
1064 n_A,
1065 buff_G, rs_G, cs_G,
1066 buff_A, rs_A, cs_A );
1067 return FLA_SUCCESS;
1068 }
1069
1070
1071
1072
1073 for ( j = -1; j < k_minus_1; j += n_fuse )
1074 {
1075 nG_app = j + 2;
1076 n_iter = nG_app / k_fuse;
1077
1079
1080 for (
i = 0, k = 0, g = j;
i < n_iter; ++
i, k += k_fuse, g -= n_fuse )
1081 {
1082 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1083 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1084 g12_k2 = buff_G + (g - 1)*rs_G + (k + 1)*cs_G;
1085 g23_k2 = buff_G + (g )*rs_G + (k + 1)*cs_G;
1086 a1 = buff_A + (g - 1)*cs_A;
1087 a2 = buff_A + (g )*cs_A;
1088 a3 = buff_A + (g + 1)*cs_A;
1089 a4 = buff_A + (g + 2)*cs_A;
1090
1091 gamma23_k1 = g23_k1->
real;
1092 sigma23_k1 = g23_k1->
imag;
1093 gamma34_k1 = g34_k1->
real;
1094 sigma34_k1 = g34_k1->
imag;
1095 gamma12_k2 = g12_k2->
real;
1096 sigma12_k2 = g12_k2->
imag;
1097 gamma23_k2 = g23_k2->
real;
1098 sigma23_k2 = g23_k2->
imag;
1099
1100 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1101 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1102 is_ident12_k2 = ( gamma12_k2 == one && sigma12_k2 == zero );
1103 is_ident23_k2 = ( gamma23_k2 == one && sigma23_k2 == zero );
1104 has_ident = ( is_ident23_k1 || is_ident34_k1 ||
1105 is_ident12_k2 || is_ident23_k2 );
1106
1107 if ( has_ident )
1108 {
1109
1110
1111 if ( !is_ident23_k1 )
1112 MAC_Apply_G_mx2_asc( m_A,
1113 &gamma23_k1,
1114 &sigma23_k1,
1115 a2, 1,
1116 a3, 1 );
1117
1118 if ( !is_ident34_k1 )
1119 MAC_Apply_G_mx2_asc( m_A,
1120 &gamma34_k1,
1121 &sigma34_k1,
1122 a3, 1,
1123 a4, 1 );
1124
1125 if ( !is_ident12_k2 )
1126 MAC_Apply_G_mx2_asc( m_A,
1127 &gamma12_k2,
1128 &sigma12_k2,
1129 a1, 1,
1130 a2, 1 );
1131
1132 if ( !is_ident23_k2 )
1133 MAC_Apply_G_mx2_asc( m_A,
1134 &gamma23_k2,
1135 &sigma23_k2,
1136 a2, 1,
1137 a3, 1 );
1138 }
1139 else
1140 {
1141
1142
1143 MAC_Apply_G_mx4s_asc( m_A,
1144 &gamma23_k1,
1145 &sigma23_k1,
1146 &gamma34_k1,
1147 &sigma34_k1,
1148 &gamma12_k2,
1149 &sigma12_k2,
1150 &gamma23_k2,
1151 &sigma23_k2,
1152 a1, 1,
1153 a2, 1,
1154 a3, 1,
1155 a4, 1 );
1156 }
1157 }
1158
1160 {
1161 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1162 a3 = buff_A + (g + 1)*cs_A;
1163 a4 = buff_A + (g + 2)*cs_A;
1164
1165 gamma34_k1 = g34_k1->
real;
1166 sigma34_k1 = g34_k1->
imag;
1167
1168 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1169
1170 if ( !is_ident34_k1 )
1171 MAC_Apply_G_mx2_asc( m_A,
1172 &gamma34_k1,
1173 &sigma34_k1,
1174 a3, 1,
1175 a4, 1 );
1176 }
1177 }
1178
1179
1180
1181 for ( ; j < nG - 1; j += n_fuse )
1182 {
1183 nG_app = k_G;
1184 n_iter = nG_app / k_fuse;
1185 n_left = nG_app % k_fuse;
1186
1187 for (
i = 0, k = 0, g = j;
i < n_iter; ++
i, k += k_fuse, g -= n_fuse )
1188 {
1189 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1190 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1191 g12_k2 = buff_G + (g - 1)*rs_G + (k + 1)*cs_G;
1192 g23_k2 = buff_G + (g )*rs_G + (k + 1)*cs_G;
1193 a1 = buff_A + (g - 1)*cs_A;
1194 a2 = buff_A + (g )*cs_A;
1195 a3 = buff_A + (g + 1)*cs_A;
1196 a4 = buff_A + (g + 2)*cs_A;
1197
1198 gamma23_k1 = g23_k1->
real;
1199 sigma23_k1 = g23_k1->
imag;
1200 gamma34_k1 = g34_k1->
real;
1201 sigma34_k1 = g34_k1->
imag;
1202 gamma12_k2 = g12_k2->
real;
1203 sigma12_k2 = g12_k2->
imag;
1204 gamma23_k2 = g23_k2->
real;
1205 sigma23_k2 = g23_k2->
imag;
1206
1207 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1208 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1209 is_ident12_k2 = ( gamma12_k2 == one && sigma12_k2 == zero );
1210 is_ident23_k2 = ( gamma23_k2 == one && sigma23_k2 == zero );
1211 has_ident = ( is_ident23_k1 || is_ident34_k1 ||
1212 is_ident12_k2 || is_ident23_k2 );
1213
1214 if ( has_ident )
1215 {
1216
1217
1218 if ( !is_ident23_k1 )
1219 MAC_Apply_G_mx2_asc( m_A,
1220 &gamma23_k1,
1221 &sigma23_k1,
1222 a2, 1,
1223 a3, 1 );
1224
1225 if ( !is_ident34_k1 )
1226 MAC_Apply_G_mx2_asc( m_A,
1227 &gamma34_k1,
1228 &sigma34_k1,
1229 a3, 1,
1230 a4, 1 );
1231
1232 if ( !is_ident12_k2 )
1233 MAC_Apply_G_mx2_asc( m_A,
1234 &gamma12_k2,
1235 &sigma12_k2,
1236 a1, 1,
1237 a2, 1 );
1238
1239 if ( !is_ident23_k2 )
1240 MAC_Apply_G_mx2_asc( m_A,
1241 &gamma23_k2,
1242 &sigma23_k2,
1243 a2, 1,
1244 a3, 1 );
1245 }
1246 else
1247 {
1248
1249
1250 MAC_Apply_G_mx4s_asc( m_A,
1251 &gamma23_k1,
1252 &sigma23_k1,
1253 &gamma34_k1,
1254 &sigma34_k1,
1255 &gamma12_k2,
1256 &sigma12_k2,
1257 &gamma23_k2,
1258 &sigma23_k2,
1259 a1, 1,
1260 a2, 1,
1261 a3, 1,
1262 a4, 1 );
1263 }
1264 }
1265
1267 {
1268 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1269 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1270 a2 = buff_A + (g )*cs_A;
1271 a3 = buff_A + (g + 1)*cs_A;
1272 a4 = buff_A + (g + 2)*cs_A;
1273
1274 gamma23_k1 = g23_k1->
real;
1275 sigma23_k1 = g23_k1->
imag;
1276 gamma34_k1 = g34_k1->
real;
1277 sigma34_k1 = g34_k1->
imag;
1278
1279 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1280 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1281
1282 if ( !is_ident23_k1 && is_ident34_k1 )
1283 {
1284 MAC_Apply_G_mx2_asc( m_A,
1285 &gamma23_k1,
1286 &sigma23_k1,
1287 a2, 1,
1288 a3, 1 );
1289 }
1290 else if ( is_ident23_k1 && !is_ident34_k1 )
1291 {
1292 MAC_Apply_G_mx2_asc( m_A,
1293 &gamma34_k1,
1294 &sigma34_k1,
1295 a3, 1,
1296 a4, 1 );
1297 }
1298 else
1299 {
1300 MAC_Apply_G_mx3_asc( m_A,
1301 &gamma23_k1,
1302 &sigma23_k1,
1303 &gamma34_k1,
1304 &sigma34_k1,
1305 a2, 1,
1306 a3, 1,
1307 a4, 1 );
1308 }
1309 }
1310 }
1311
1312
1313
1314 for ( j = nG % n_fuse; j < k_G; j += n_fuse )
1315 {
1316 g = nG - 1;
1317 k = j;
1318
1319
1320
1321 {
1322 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1323 a2 = buff_A + (g )*cs_A;
1324 a3 = buff_A + (g + 1)*cs_A;
1325
1326 gamma23_k1 = g23_k1->
real;
1327 sigma23_k1 = g23_k1->
imag;
1328
1329 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1330
1331 if ( !is_ident23_k1 )
1332 MAC_Apply_G_mx2_asc( m_A,
1333 &gamma23_k1,
1334 &sigma23_k1,
1335 a2, 1,
1336 a3, 1 );
1337 ++k;
1338 --g;
1339 }
1340
1341 nG_app = k_minus_1 - j;
1342 n_iter = nG_app / k_fuse;
1343 n_left = nG_app % k_fuse;
1344
1345 for (
i = 0;
i < n_iter; ++
i, k += k_fuse, g -= n_fuse )
1346 {
1347 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1348 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1349 g12_k2 = buff_G + (g - 1)*rs_G + (k + 1)*cs_G;
1350 g23_k2 = buff_G + (g )*rs_G + (k + 1)*cs_G;
1351 a1 = buff_A + (g - 1)*cs_A;
1352 a2 = buff_A + (g )*cs_A;
1353 a3 = buff_A + (g + 1)*cs_A;
1354 a4 = buff_A + (g + 2)*cs_A;
1355
1356 gamma23_k1 = g23_k1->
real;
1357 sigma23_k1 = g23_k1->
imag;
1358 gamma34_k1 = g34_k1->
real;
1359 sigma34_k1 = g34_k1->
imag;
1360 gamma12_k2 = g12_k2->
real;
1361 sigma12_k2 = g12_k2->
imag;
1362 gamma23_k2 = g23_k2->
real;
1363 sigma23_k2 = g23_k2->
imag;
1364
1365 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1366 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1367 is_ident12_k2 = ( gamma12_k2 == one && sigma12_k2 == zero );
1368 is_ident23_k2 = ( gamma23_k2 == one && sigma23_k2 == zero );
1369 has_ident = ( is_ident23_k1 || is_ident34_k1 ||
1370 is_ident12_k2 || is_ident23_k2 );
1371
1372 if ( has_ident )
1373 {
1374
1375
1376 if ( !is_ident23_k1 )
1377 MAC_Apply_G_mx2_asc( m_A,
1378 &gamma23_k1,
1379 &sigma23_k1,
1380 a2, 1,
1381 a3, 1 );
1382
1383 if ( !is_ident34_k1 )
1384 MAC_Apply_G_mx2_asc( m_A,
1385 &gamma34_k1,
1386 &sigma34_k1,
1387 a3, 1,
1388 a4, 1 );
1389
1390 if ( !is_ident12_k2 )
1391 MAC_Apply_G_mx2_asc( m_A,
1392 &gamma12_k2,
1393 &sigma12_k2,
1394 a1, 1,
1395 a2, 1 );
1396
1397 if ( !is_ident23_k2 )
1398 MAC_Apply_G_mx2_asc( m_A,
1399 &gamma23_k2,
1400 &sigma23_k2,
1401 a2, 1,
1402 a3, 1 );
1403 }
1404 else
1405 {
1406
1407
1408 MAC_Apply_G_mx4s_asc( m_A,
1409 &gamma23_k1,
1410 &sigma23_k1,
1411 &gamma34_k1,
1412 &sigma34_k1,
1413 &gamma12_k2,
1414 &sigma12_k2,
1415 &gamma23_k2,
1416 &sigma23_k2,
1417 a1, 1,
1418 a2, 1,
1419 a3, 1,
1420 a4, 1 );
1421 }
1422 }
1423
1425 {
1426 g23_k1 = buff_G + (g )*rs_G + (k )*cs_G;
1427 g34_k1 = buff_G + (g + 1)*rs_G + (k )*cs_G;
1428 a2 = buff_A + (g )*cs_A;
1429 a3 = buff_A + (g + 1)*cs_A;
1430 a4 = buff_A + (g + 2)*cs_A;
1431
1432 gamma23_k1 = g23_k1->
real;
1433 sigma23_k1 = g23_k1->
imag;
1434 gamma34_k1 = g34_k1->
real;
1435 sigma34_k1 = g34_k1->
imag;
1436
1437 is_ident23_k1 = ( gamma23_k1 == one && sigma23_k1 == zero );
1438 is_ident34_k1 = ( gamma34_k1 == one && sigma34_k1 == zero );
1439
1440 if ( !is_ident23_k1 && is_ident34_k1 )
1441 {
1442 MAC_Apply_G_mx2_asc( m_A,
1443 &gamma23_k1,
1444 &sigma23_k1,
1445 a2, 1,
1446 a3, 1 );
1447 }
1448 else if ( is_ident23_k1 && !is_ident34_k1 )
1449 {
1450 MAC_Apply_G_mx2_asc( m_A,
1451 &gamma34_k1,
1452 &sigma34_k1,
1453 a3, 1,
1454 a4, 1 );
1455 }
1456 else
1457 {
1458 MAC_Apply_G_mx3_asc( m_A,
1459 &gamma23_k1,
1460 &sigma23_k1,
1461 &gamma34_k1,
1462 &sigma34_k1,
1463 a2, 1,
1464 a3, 1,
1465 a4, 1 );
1466 }
1467 }
1468 }
1469
1470 return FLA_SUCCESS;
1471}
FLA_Error FLA_Apply_G_rf_asc_var1(int k_G, int m_A, int n_A, scomplex *buff_G, int rs_G, int cs_G, scomplex *buff_A, int rs_A, int cs_A)
Definition FLA_Apply_G_rf_asm_var1.c:215
int n_left
Definition bl1_axmyv2.c:149
int i
Definition bl1_axmyv2.c:145
float bl1_s0(void)
Definition bl1_constants.c:111
float bl1_s1(void)
Definition bl1_constants.c:47
Definition blis_type_defs.h:133
float imag
Definition blis_type_defs.h:134
float real
Definition blis_type_defs.h:134