1/// Copyright (c) 2009 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 338 unchanged lines hidden (view full) --- 347 DestReg = DestReg | result; 348 ''' 349 350 class Maskmov(MediaOp): 351 code = ''' 352 assert(srcSize == destSize); 353 int size = srcSize; 354 int sizeBits = size * 8; |
355 int items = numItems(size); |
356 uint64_t result = FpDestReg.uqw; 357 358 for (int i = 0; i < items; i++) { 359 int hiIndex = (i + 1) * sizeBits - 1; 360 int loIndex = (i + 0) * sizeBits; 361 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 362 if (bits(FpSrcReg2.uqw, hiIndex)) 363 result = insertBits(result, hiIndex, loIndex, arg1Bits); --- 176 unchanged lines hidden (view full) --- 540 double d; 541 uint64_t i; 542 }; 543 544 assert(srcSize == destSize); 545 int size = srcSize; 546 int sizeBits = size * 8; 547 assert(srcSize == 4 || srcSize == 8); |
548 int items = numItems(size); |
549 uint64_t result = FpDestReg.uqw; 550 551 for (int i = 0; i < items; i++) { 552 double arg1, arg2; 553 int hiIndex = (i + 1) * sizeBits - 1; 554 int loIndex = (i + 0) * sizeBits; 555 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 556 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); --- 33 unchanged lines hidden (view full) --- 590 double d; 591 uint64_t i; 592 }; 593 594 assert(srcSize == destSize); 595 int size = srcSize; 596 int sizeBits = size * 8; 597 assert(srcSize == 4 || srcSize == 8); |
598 int items = numItems(size); |
599 uint64_t result = FpDestReg.uqw; 600 601 for (int i = 0; i < items; i++) { 602 double arg1, arg2; 603 int hiIndex = (i + 1) * sizeBits - 1; 604 int loIndex = (i + 0) * sizeBits; 605 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 606 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); --- 22 unchanged lines hidden (view full) --- 629 ''' 630 631 class Mmini(MediaOp): 632 code = ''' 633 634 assert(srcSize == destSize); 635 int size = srcSize; 636 int sizeBits = size * 8; |
637 int items = numItems(size); |
638 uint64_t result = FpDestReg.uqw; 639 640 for (int i = 0; i < items; i++) { 641 int hiIndex = (i + 1) * sizeBits - 1; 642 int loIndex = (i + 0) * sizeBits; 643 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 644 int64_t arg1 = arg1Bits | 645 (0 - (arg1Bits & (ULL(1) << (sizeBits - 1)))); --- 21 unchanged lines hidden (view full) --- 667 ''' 668 669 class Mmaxi(MediaOp): 670 code = ''' 671 672 assert(srcSize == destSize); 673 int size = srcSize; 674 int sizeBits = size * 8; |
675 int items = numItems(size); |
676 uint64_t result = FpDestReg.uqw; 677 678 for (int i = 0; i < items; i++) { 679 int hiIndex = (i + 1) * sizeBits - 1; 680 int loIndex = (i + 0) * sizeBits; 681 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 682 int64_t arg1 = arg1Bits | 683 (0 - (arg1Bits & (ULL(1) << (sizeBits - 1)))); --- 36 unchanged lines hidden (view full) --- 720 double d; 721 uint64_t i; 722 }; 723 724 assert(srcSize == destSize); 725 int size = srcSize; 726 int sizeBits = size * 8; 727 assert(srcSize == 4 || srcSize == 8); |
728 int items = numItems(size); |
729 uint64_t result = FpDestReg.uqw; 730 731 for (int i = 0; i < items; i++) { 732 int hiIndex = (i + 1) * sizeBits - 1; 733 int loIndex = (i + 0) * sizeBits; 734 uint64_t argBits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 735 736 if (size == 4) { --- 24 unchanged lines hidden (view full) --- 761 double d; 762 uint64_t i; 763 }; 764 765 assert(srcSize == destSize); 766 int size = srcSize; 767 int sizeBits = size * 8; 768 assert(srcSize == 4 || srcSize == 8); |
769 int items = numItems(size); |
770 uint64_t result = FpDestReg.uqw; 771 772 for (int i = 0; i < items; i++) { 773 int hiIndex = (i + 1) * sizeBits - 1; 774 int loIndex = (i + 0) * sizeBits; 775 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 776 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 777 uint64_t resBits; --- 29 unchanged lines hidden (view full) --- 807 double d; 808 uint64_t i; 809 }; 810 811 assert(srcSize == destSize); 812 int size = srcSize; 813 int sizeBits = size * 8; 814 assert(srcSize == 4 || srcSize == 8); |
815 int items = numItems(size); |
816 uint64_t result = FpDestReg.uqw; 817 818 for (int i = 0; i < items; i++) { 819 int hiIndex = (i + 1) * sizeBits - 1; 820 int loIndex = (i + 0) * sizeBits; 821 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 822 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 823 uint64_t resBits; --- 29 unchanged lines hidden (view full) --- 853 double d; 854 uint64_t i; 855 }; 856 857 assert(srcSize == destSize); 858 int size = srcSize; 859 int sizeBits = size * 8; 860 assert(srcSize == 4 || srcSize == 8); |
861 int items = numItems(size); |
862 uint64_t result = FpDestReg.uqw; 863 864 for (int i = 0; i < items; i++) { 865 int hiIndex = (i + 1) * sizeBits - 1; 866 int loIndex = (i + 0) * sizeBits; 867 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 868 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 869 uint64_t resBits; --- 29 unchanged lines hidden (view full) --- 899 double d; 900 uint64_t i; 901 }; 902 903 assert(srcSize == destSize); 904 int size = srcSize; 905 int sizeBits = size * 8; 906 assert(srcSize == 4 || srcSize == 8); |
907 int items = numItems(size); |
908 uint64_t result = FpDestReg.uqw; 909 910 for (int i = 0; i < items; i++) { 911 int hiIndex = (i + 1) * sizeBits - 1; 912 int loIndex = (i + 0) * sizeBits; 913 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 914 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 915 uint64_t resBits; --- 17 unchanged lines hidden (view full) --- 933 FpDestReg.uqw = result; 934 ''' 935 936 class Maddi(MediaOp): 937 code = ''' 938 assert(srcSize == destSize); 939 int size = srcSize; 940 int sizeBits = size * 8; |
941 int items = numItems(size); |
942 uint64_t result = FpDestReg.uqw; 943 944 for (int i = 0; i < items; i++) { 945 int hiIndex = (i + 1) * sizeBits - 1; 946 int loIndex = (i + 0) * sizeBits; 947 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 948 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 949 uint64_t resBits = arg1Bits + arg2Bits; --- 18 unchanged lines hidden (view full) --- 968 FpDestReg.uqw = result; 969 ''' 970 971 class Msubi(MediaOp): 972 code = ''' 973 assert(srcSize == destSize); 974 int size = srcSize; 975 int sizeBits = size * 8; |
976 int items = numItems(size); |
977 uint64_t result = FpDestReg.uqw; 978 979 for (int i = 0; i < items; i++) { 980 int hiIndex = (i + 1) * sizeBits - 1; 981 int loIndex = (i + 0) * sizeBits; 982 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 983 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 984 uint64_t resBits = arg1Bits - arg2Bits; --- 23 unchanged lines hidden (view full) --- 1008 ''' 1009 1010 class Mmuli(MediaOp): 1011 code = ''' 1012 int srcBits = srcSize * 8; 1013 int destBits = destSize * 8; 1014 assert(destBits <= 64); 1015 assert(destSize >= srcSize); |
1016 int items = numItems(destSize); |
1017 uint64_t result = FpDestReg.uqw; 1018 1019 for (int i = 0; i < items; i++) { 1020 int offset = 0; 1021 if (ext & 16) { 1022 if (ext & 32) 1023 offset = i * (destBits - srcBits); 1024 else --- 28 unchanged lines hidden (view full) --- 1053 FpDestReg.uqw = result; 1054 ''' 1055 1056 class Mavg(MediaOp): 1057 code = ''' 1058 assert(srcSize == destSize); 1059 int size = srcSize; 1060 int sizeBits = size * 8; |
1061 int items = numItems(size); |
1062 uint64_t result = FpDestReg.uqw; 1063 1064 for (int i = 0; i < items; i++) { 1065 int hiIndex = (i + 1) * sizeBits - 1; 1066 int loIndex = (i + 0) * sizeBits; 1067 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1068 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 1069 uint64_t resBits = (arg1Bits + arg2Bits + 1) / 2; --- 23 unchanged lines hidden (view full) --- 1093 ''' 1094 1095 class Msrl(MediaOp): 1096 code = ''' 1097 1098 assert(srcSize == destSize); 1099 int size = srcSize; 1100 int sizeBits = size * 8; |
1101 int items = numItems(size); |
1102 uint64_t shiftAmt = op2.uqw; 1103 uint64_t result = FpDestReg.uqw; 1104 1105 for (int i = 0; i < items; i++) { 1106 int hiIndex = (i + 1) * sizeBits - 1; 1107 int loIndex = (i + 0) * sizeBits; 1108 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1109 uint64_t resBits; --- 10 unchanged lines hidden (view full) --- 1120 ''' 1121 1122 class Msra(MediaOp): 1123 code = ''' 1124 1125 assert(srcSize == destSize); 1126 int size = srcSize; 1127 int sizeBits = size * 8; |
1128 int items = numItems(size); |
1129 uint64_t shiftAmt = op2.uqw; 1130 uint64_t result = FpDestReg.uqw; 1131 1132 for (int i = 0; i < items; i++) { 1133 int hiIndex = (i + 1) * sizeBits - 1; 1134 int loIndex = (i + 0) * sizeBits; 1135 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1136 uint64_t resBits; --- 14 unchanged lines hidden (view full) --- 1151 ''' 1152 1153 class Msll(MediaOp): 1154 code = ''' 1155 1156 assert(srcSize == destSize); 1157 int size = srcSize; 1158 int sizeBits = size * 8; |
1159 int items = numItems(size); |
1160 uint64_t shiftAmt = op2.uqw; 1161 uint64_t result = FpDestReg.uqw; 1162 1163 for (int i = 0; i < items; i++) { 1164 int hiIndex = (i + 1) * sizeBits - 1; 1165 int loIndex = (i + 0) * sizeBits; 1166 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1167 uint64_t resBits; --- 28 unchanged lines hidden (view full) --- 1196 assert(destSize == 4 || destSize == 8); 1197 assert(srcSize == 4 || srcSize == 8); 1198 int srcSizeBits = srcSize * 8; 1199 int destSizeBits = destSize * 8; 1200 int items; 1201 int srcStart = 0; 1202 int destStart = 0; 1203 if (srcSize == 2 * destSize) { |
1204 items = numItems(srcSize); |
1205 if (ext & 0x2) 1206 destStart = destSizeBits * items; 1207 } else if (destSize == 2 * srcSize) { |
1208 items = numItems(destSize); |
1209 if (ext & 0x2) 1210 srcStart = srcSizeBits * items; 1211 } else { |
1212 items = numItems(destSize); |
1213 } 1214 uint64_t result = FpDestReg.uqw; 1215 1216 for (int i = 0; i < items; i++) { 1217 int srcHiIndex = srcStart + (i + 1) * srcSizeBits - 1; 1218 int srcLoIndex = srcStart + (i + 0) * srcSizeBits; 1219 uint64_t argBits = bits(FpSrcReg1.uqw, srcHiIndex, srcLoIndex); 1220 double arg; --- 47 unchanged lines hidden (view full) --- 1268 assert(destSize == 4 || destSize == 8); 1269 assert(srcSize == 4 || srcSize == 8); 1270 int srcSizeBits = srcSize * 8; 1271 int destSizeBits = destSize * 8; 1272 int items; 1273 int srcStart = 0; 1274 int destStart = 0; 1275 if (srcSize == 2 * destSize) { |
1276 items = numItems(srcSize); |
1277 if (ext & 0x2) 1278 destStart = destSizeBits * items; 1279 } else if (destSize == 2 * srcSize) { |
1280 items = numItems(destSize); |
1281 if (ext & 0x2) 1282 srcStart = srcSizeBits * items; 1283 } else { |
1284 items = numItems(destSize); |
1285 } 1286 uint64_t result = FpDestReg.uqw; 1287 1288 for (int i = 0; i < items; i++) { 1289 int srcHiIndex = srcStart + (i + 1) * srcSizeBits - 1; 1290 int srcLoIndex = srcStart + (i + 0) * srcSizeBits; 1291 uint64_t argBits = bits(FpSrcReg1.uqw, srcHiIndex, srcLoIndex); 1292 --- 36 unchanged lines hidden (view full) --- 1329 assert(destSize == 4 || destSize == 8); 1330 assert(srcSize == 4 || srcSize == 8); 1331 int srcSizeBits = srcSize * 8; 1332 int destSizeBits = destSize * 8; 1333 int items; 1334 int srcStart = 0; 1335 int destStart = 0; 1336 if (srcSize == 2 * destSize) { |
1337 items = numItems(srcSize); |
1338 if (ext & 0x2) 1339 destStart = destSizeBits * items; 1340 } else if (destSize == 2 * srcSize) { |
1341 items = numItems(destSize); |
1342 if (ext & 0x2) 1343 srcStart = srcSizeBits * items; 1344 } else { |
1345 items = numItems(destSize); |
1346 } 1347 uint64_t result = FpDestReg.uqw; 1348 1349 for (int i = 0; i < items; i++) { 1350 int srcHiIndex = srcStart + (i + 1) * srcSizeBits - 1; 1351 int srcLoIndex = srcStart + (i + 0) * srcSizeBits; 1352 uint64_t argBits = bits(FpSrcReg1.uqw, srcHiIndex, srcLoIndex); 1353 double arg; --- 34 unchanged lines hidden (view full) --- 1388 { 1389 double d; 1390 uint64_t i; 1391 }; 1392 1393 assert(srcSize == destSize); 1394 int size = srcSize; 1395 int sizeBits = size * 8; |
1396 int items = numItems(size); |
1397 uint64_t result = FpDestReg.uqw; 1398 1399 for (int i = 0; i < items; i++) { 1400 int hiIndex = (i + 1) * sizeBits - 1; 1401 int loIndex = (i + 0) * sizeBits; 1402 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1403 int64_t arg1 = arg1Bits | 1404 (0 - (arg1Bits & (ULL(1) << (sizeBits - 1)))); --- 22 unchanged lines hidden (view full) --- 1427 { 1428 double d; 1429 uint64_t i; 1430 }; 1431 1432 assert(srcSize == destSize); 1433 int size = srcSize; 1434 int sizeBits = size * 8; |
1435 int items = numItems(size); |
1436 uint64_t result = FpDestReg.uqw; 1437 1438 for (int i = 0; i < items; i++) { 1439 int hiIndex = (i + 1) * sizeBits - 1; 1440 int loIndex = (i + 0) * sizeBits; 1441 uint64_t arg1Bits = bits(FpSrcReg1.uqw, hiIndex, loIndex); 1442 uint64_t arg2Bits = bits(FpSrcReg2.uqw, hiIndex, loIndex); 1443 double arg1, arg2; --- 112 unchanged lines hidden --- |