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