Ignore:
Timestamp:
Dec 12, 2011, 12:00:15 PM (8 years ago)
Author:
huah
Message:

The final version of IDISA+ toolkit...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/idisa_cpp/idisa_sse4_2.cpp

    r1740 r1767  
     1
     2/* Copyright (c) 2011, Hua Huang and Robert D. Cameron.
     3   Licensed under the Academic Free License 3.0.
     4   This file is generated by the IDISA+ generator;
     5   modifications should be made only by changing the
     6   generator configuration and data files. */
     7
    18#ifndef IDISA_SSE4_2_CPP
    29#define IDISA_SSE4_2_CPP
     
    499506#define shufflemask8_to_shufflemask4(msk) \
    500507        ((msk&3) | (((msk>>3)&3)<<2) | (((msk>>6)&3)<<4) | (((msk>>9)&3)<<6) | (((msk>>12)&3)<<8) | (((msk>>15)&3)<<10) | (((msk>>18)&3)<<12) | (((msk>>21)&3)<<14))
    501 //The total number of operations is 2
     508//The total number of operations is 2.0
    502509IDISA_ALWAYS_INLINE bitblock128_t simd_nor(bitblock128_t arg1, bitblock128_t arg2)
    503510{
     
    505512}
    506513
    507 //The total number of operations is 1
     514//The total number of operations is 1.0
    508515IDISA_ALWAYS_INLINE bitblock128_t simd_not(bitblock128_t arg1)
    509516{
     
    511518}
    512519
    513 //The total number of operations is 1
     520//The total number of operations is 1.0
    514521IDISA_ALWAYS_INLINE bitblock128_t simd_andc(bitblock128_t arg1, bitblock128_t arg2)
    515522{
     
    517524}
    518525
    519 //The total number of operations is 1
     526//The total number of operations is 1.0
    520527IDISA_ALWAYS_INLINE bitblock128_t simd_or(bitblock128_t arg1, bitblock128_t arg2)
    521528{
     
    523530}
    524531
    525 //The total number of operations is 1
     532//The total number of operations is 1.0
    526533IDISA_ALWAYS_INLINE bitblock128_t simd_and(bitblock128_t arg1, bitblock128_t arg2)
    527534{
     
    529536}
    530537
    531 //The total number of operations is 1
     538//The total number of operations is 1.0
    532539IDISA_ALWAYS_INLINE bitblock128_t simd_xor(bitblock128_t arg1, bitblock128_t arg2)
    533540{
     
    535542}
    536543
    537 //The total number of operations is 1
     544//The total number of operations is 1.0
    538545template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::max(bitblock128_t arg1, bitblock128_t arg2)
    539546{
     
    541548}
    542549
    543 //The total number of operations is 18
     550//The total number of operations is 15.6666666667
    544551template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::max(bitblock128_t arg1, bitblock128_t arg2)
    545552{
    546         return simd128<1>::ifh(simd128<2>::lt(arg1, arg2), arg2, arg1);
    547 }
    548 
    549 //The total number of operations is 9
     553        return simd128<1>::ifh(simd128<2>::himask(), simd_and(arg1, arg2), simd_or(simd_and(arg2, simd128<128>::srli<1>(simd_or(arg1, simd_not(arg2)))), simd_and(arg1, simd128<128>::srli<1>(simd_or(simd_not(arg1), arg2)))));
     554}
     555
     556//The total number of operations is 9.0
    550557template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::max(bitblock128_t arg1, bitblock128_t arg2)
    551558{
     
    554561}
    555562
    556 //The total number of operations is 1
     563//The total number of operations is 1.0
    557564template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::max(bitblock128_t arg1, bitblock128_t arg2)
    558565{
     
    560567}
    561568
    562 //The total number of operations is 1
     569//The total number of operations is 1.0
    563570template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::max(bitblock128_t arg1, bitblock128_t arg2)
    564571{
     
    566573}
    567574
    568 //The total number of operations is 1
     575//The total number of operations is 1.0
    569576template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::max(bitblock128_t arg1, bitblock128_t arg2)
    570577{
     
    572579}
    573580
    574 //The total number of operations is 4
     581//The total number of operations is 4.0
    575582template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2)
    576583{
     
    578585}
    579586
    580 //The total number of operations is 30
     587//The total number of operations is 26.6666666667
    581588template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2)
    582589{
     
    588595}
    589596
    590 //The total number of operations is 1
     597//The total number of operations is 1.0
    591598template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::mult(bitblock128_t arg1, bitblock128_t arg2)
    592599{
     
    594601}
    595602
    596 //The total number of operations is 23
     603//The total number of operations is 19.6666666667
    597604template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::mult(bitblock128_t arg1, bitblock128_t arg2)
    598605{
     
    602609}
    603610
    604 //The total number of operations is 31
     611//The total number of operations is 31.0
    605612template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::mult(bitblock128_t arg1, bitblock128_t arg2)
    606613{
     
    611618}
    612619
    613 //The total number of operations is 10
     620//The total number of operations is 10.0
    614621template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::mult(bitblock128_t arg1, bitblock128_t arg2)
    615622{
     
    620627}
    621628
    622 //The total number of operations is 1
     629//The total number of operations is 1.0
    623630template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::mult(bitblock128_t arg1, bitblock128_t arg2)
    624631{
     
    626633}
    627634
    628 //The total number of operations is 1
     635//The total number of operations is 1.0
    629636template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::mult(bitblock128_t arg1, bitblock128_t arg2)
    630637{
     
    632639}
    633640
    634 //The total number of operations is 11
     641//The total number of operations is 11.0
    635642template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::mult(bitblock128_t arg1, bitblock128_t arg2)
    636643{
     
    646653}
    647654
    648 //The total number of operations is 205
     655//The total number of operations is 165.0
    649656template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::mult(bitblock128_t arg1, bitblock128_t arg2)
    650657{
     
    660667}
    661668
    662 //The total number of operations is 1
     669//The total number of operations is 1.0
    663670template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::gt(bitblock128_t arg1, bitblock128_t arg2)
    664671{
     
    666673}
    667674
    668 //The total number of operations is 15
     675//The total number of operations is 14.6666666667
    669676template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::gt(bitblock128_t arg1, bitblock128_t arg2)
    670677{
    671         bitblock128_t hiAns = simd128<(1)>::gt(arg1, arg2);
    672         bitblock128_t loAns = simd128<(1)>::ugt(arg1, arg2);
    673         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    674         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    675         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    676 }
    677 
    678 //The total number of operations is 10
     678        bitblock128_t tmp = simd_not(arg1);
     679        bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(arg1, simd_not(arg2))), simd_or(tmp, arg2)));
     680        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     681}
     682
     683//The total number of operations is 10.0
    679684template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::gt(bitblock128_t arg1, bitblock128_t arg2)
    680685{
     
    682687}
    683688
    684 //The total number of operations is 1
     689//The total number of operations is 1.0
    685690template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::gt(bitblock128_t arg1, bitblock128_t arg2)
    686691{
     
    688693}
    689694
    690 //The total number of operations is 1
     695//The total number of operations is 1.0
    691696template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::gt(bitblock128_t arg1, bitblock128_t arg2)
    692697{
     
    694699}
    695700
    696 //The total number of operations is 1
     701//The total number of operations is 1.0
    697702template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::gt(bitblock128_t arg1, bitblock128_t arg2)
    698703{
     
    700705}
    701706
    702 //The total number of operations is 1
     707//The total number of operations is 1.0
    703708template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2)
    704709{
     
    706711}
    707712
    708 //The total number of operations is 32
     713//The total number of operations is 23.75
    709714template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2)
    710715{
     
    716721}
    717722
    718 //The total number of operations is 289
     723//The total number of operations is 289.0
    719724template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umult(bitblock128_t arg1, bitblock128_t arg2)
    720725{
     
    725730}
    726731
    727 //The total number of operations is 139
     732//The total number of operations is 139.0
    728733template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umult(bitblock128_t arg1, bitblock128_t arg2)
    729734{
     
    734739}
    735740
    736 //The total number of operations is 64
     741//The total number of operations is 64.0
    737742template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umult(bitblock128_t arg1, bitblock128_t arg2)
    738743{
     
    743748}
    744749
    745 //The total number of operations is 28
     750//The total number of operations is 28.0
    746751template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umult(bitblock128_t arg1, bitblock128_t arg2)
    747752{
     
    752757}
    753758
    754 //The total number of operations is 10
     759//The total number of operations is 10.0
    755760template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umult(bitblock128_t arg1, bitblock128_t arg2)
    756761{
     
    761766}
    762767
    763 //The total number of operations is 1
     768//The total number of operations is 1.0
    764769template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umult(bitblock128_t arg1, bitblock128_t arg2)
    765770{
     
    767772}
    768773
    769 //The total number of operations is 55
     774//The total number of operations is 45.0
    770775template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umult(bitblock128_t arg1, bitblock128_t arg2)
    771776{
     
    785790}
    786791
    787 //The total number of operations is 1
     792//The total number of operations is 1.0
    788793template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ult(bitblock128_t arg1, bitblock128_t arg2)
    789794{
     
    791796}
    792797
    793 //The total number of operations is 14
     798//The total number of operations is 13.6666666667
    794799template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ult(bitblock128_t arg1, bitblock128_t arg2)
    795800{
    796         bitblock128_t tmpAns = simd128<(1)>::ult(arg1, arg2);
    797         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    798         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    799         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    800 }
    801 
    802 //The total number of operations is 20
     801        bitblock128_t tmp = simd_not(arg1);
     802        bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(tmp, arg2)), simd_or(tmp, arg2)));
     803        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     804}
     805
     806//The total number of operations is 20.0
    803807template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ult(bitblock128_t arg1, bitblock128_t arg2)
    804808{
     
    806810}
    807811
    808 //The total number of operations is 7
     812//The total number of operations is 7.0
    809813template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ult(bitblock128_t arg1, bitblock128_t arg2)
    810814{
     
    813817}
    814818
    815 //The total number of operations is 7
     819//The total number of operations is 7.0
    816820template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ult(bitblock128_t arg1, bitblock128_t arg2)
    817821{
     
    820824}
    821825
    822 //The total number of operations is 7
     826//The total number of operations is 7.0
    823827template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ult(bitblock128_t arg1, bitblock128_t arg2)
    824828{
     
    827831}
    828832
    829 //The total number of operations is 7
     833//The total number of operations is 7.0
    830834template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2)
    831835{
     
    834838}
    835839
    836 //The total number of operations is 35
     840//The total number of operations is 26.75
    837841template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2)
    838842{
     
    843847}
    844848
    845 //The total number of operations is 1
     849//The total number of operations is 1.0
    846850template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::lt(bitblock128_t arg1, bitblock128_t arg2)
    847851{
     
    849853}
    850854
    851 //The total number of operations is 15
     855//The total number of operations is 14.6666666667
    852856template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::lt(bitblock128_t arg1, bitblock128_t arg2)
    853857{
    854         bitblock128_t hiAns = simd128<(1)>::lt(arg1, arg2);
    855         bitblock128_t loAns = simd128<(1)>::ult(arg1, arg2);
    856         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    857         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    858         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    859 }
    860 
    861 //The total number of operations is 18
     858        bitblock128_t tmp = simd_not(arg2);
     859        bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(simd_not(arg1), arg2)), simd_or(arg1, tmp)));
     860        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     861}
     862
     863//The total number of operations is 18.0
    862864template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::lt(bitblock128_t arg1, bitblock128_t arg2)
    863865{
     
    865867}
    866868
    867 //The total number of operations is 5
     869//The total number of operations is 5.0
    868870template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::lt(bitblock128_t arg1, bitblock128_t arg2)
    869871{
     
    871873}
    872874
    873 //The total number of operations is 5
     875//The total number of operations is 5.0
    874876template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::lt(bitblock128_t arg1, bitblock128_t arg2)
    875877{
     
    877879}
    878880
    879 //The total number of operations is 5
     881//The total number of operations is 5.0
    880882template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::lt(bitblock128_t arg1, bitblock128_t arg2)
    881883{
     
    883885}
    884886
    885 //The total number of operations is 5
     887//The total number of operations is 5.0
    886888template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2)
    887889{
     
    889891}
    890892
    891 //The total number of operations is 40
     893//The total number of operations is 31.75
    892894template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2)
    893895{
     
    899901}
    900902
    901 //The total number of operations is 2
     903//The total number of operations is 2.0
    902904template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srli(bitblock128_t arg1)
    903905{
     
    905907}
    906908
    907 //The total number of operations is 2
     909//The total number of operations is 2.0
    908910template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srli(bitblock128_t arg1)
    909911{
     
    911913}
    912914
    913 //The total number of operations is 2
     915//The total number of operations is 2.0
    914916template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srli(bitblock128_t arg1)
    915917{
     
    917919}
    918920
    919 //The total number of operations is 1
     921//The total number of operations is 1.0
    920922template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srli(bitblock128_t arg1)
    921923{
     
    923925}
    924926
    925 //The total number of operations is 1
     927//The total number of operations is 1.0
    926928template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srli(bitblock128_t arg1)
    927929{
     
    929931}
    930932
    931 //The total number of operations is 1
     933//The total number of operations is 1.0
    932934template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srli(bitblock128_t arg1)
    933935{
     
    935937}
    936938
    937 //The total number of operations is 4
     939//The total number of operations is 2.33333333333
    938940template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srli(bitblock128_t arg1)
    939941{
     
    941943}
    942944
    943 //The total number of operations is 1
     945//The total number of operations is 1.0
    944946template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ctz(bitblock128_t arg1)
    945947{
     
    947949}
    948950
    949 //The total number of operations is 14
     951//The total number of operations is 10.6666666667
    950952template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ctz(bitblock128_t arg1)
    951953{
     
    954956}
    955957
    956 //The total number of operations is 14
     958//The total number of operations is 14.0
    957959template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ctz(bitblock128_t arg1)
    958960{
     
    960962}
    961963
    962 //The total number of operations is 13
     964//The total number of operations is 13.0
    963965template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ctz(bitblock128_t arg1)
    964966{
     
    966968}
    967969
    968 //The total number of operations is 16
     970//The total number of operations is 16.0
    969971template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ctz(bitblock128_t arg1)
    970972{
     
    972974}
    973975
    974 //The total number of operations is 19
     976//The total number of operations is 19.0
    975977template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ctz(bitblock128_t arg1)
    976978{
     
    978980}
    979981
    980 //The total number of operations is 14
     982//The total number of operations is 14.0
    981983template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ctz(bitblock128_t arg1)
    982984{
     
    984986}
    985987
    986 //The total number of operations is 30
     988//The total number of operations is 26.6666666667
    987989template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ctz(bitblock128_t arg1)
    988990{
     
    990992}
    991993
    992 //The total number of operations is 7
     994//The total number of operations is 7.0
    993995template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sll(bitblock128_t arg1, bitblock128_t shift_mask)
    994996{
     
    996998}
    997999
    998 //The total number of operations is 11
     1000//The total number of operations is 11.0
    9991001template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sll(bitblock128_t arg1, bitblock128_t shift_mask)
    10001002{
     
    10021004}
    10031005
    1004 //The total number of operations is 1
     1006//The total number of operations is 1.0
    10051007template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10061008{
     
    10081010}
    10091011
    1010 //The total number of operations is 14
     1012//The total number of operations is 13.6666666667
    10111013template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10121014{
    1013         bitblock128_t tmpAns = simd128<(1)>::ugt(arg1, arg2);
    1014         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    1015         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    1016         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    1017 }
    1018 
    1019 //The total number of operations is 12
     1015        bitblock128_t tmp = simd_not(arg2);
     1016        bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(arg1, tmp)), simd_or(arg1, tmp)));
     1017        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     1018}
     1019
     1020//The total number of operations is 12.0
    10201021template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10211022{
     
    10231024}
    10241025
    1025 //The total number of operations is 3
     1026//The total number of operations is 3.0
    10261027template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10271028{
     
    10301031}
    10311032
    1032 //The total number of operations is 3
     1033//The total number of operations is 3.0
    10331034template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10341035{
     
    10371038}
    10381039
    1039 //The total number of operations is 3
     1040//The total number of operations is 3.0
    10401041template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10411042{
     
    10441045}
    10451046
    1046 //The total number of operations is 3
     1047//The total number of operations is 3.0
    10471048template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10481049{
     
    10511052}
    10521053
    1053 //The total number of operations is 31
     1054//The total number of operations is 22.75
    10541055template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10551056{
     
    10601061}
    10611062
    1062 //The total number of operations is 4
     1063//The total number of operations is 4.0
    10631064template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::xor_hl(bitblock128_t arg1)
    10641065{
     
    10661067}
    10671068
    1068 //The total number of operations is 4
     1069//The total number of operations is 4.0
    10691070template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::xor_hl(bitblock128_t arg1)
    10701071{
     
    10721073}
    10731074
    1074 //The total number of operations is 4
     1075//The total number of operations is 4.0
    10751076template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::xor_hl(bitblock128_t arg1)
    10761077{
     
    10781079}
    10791080
    1080 //The total number of operations is 3
     1081//The total number of operations is 3.0
    10811082template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::xor_hl(bitblock128_t arg1)
    10821083{
     
    10841085}
    10851086
    1086 //The total number of operations is 3
     1087//The total number of operations is 3.0
    10871088template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::xor_hl(bitblock128_t arg1)
    10881089{
     
    10901091}
    10911092
    1092 //The total number of operations is 3
     1093//The total number of operations is 3.0
    10931094template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::xor_hl(bitblock128_t arg1)
    10941095{
     
    10961097}
    10971098
    1098 //The total number of operations is 6
     1099//The total number of operations is 4.33333333333
    10991100template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::xor_hl(bitblock128_t arg1)
    11001101{
     
    11081109}
    11091110
    1110 //The total number of operations is 3
     1111//The total number of operations is 3.0
    11111112template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::popcount(bitblock128_t arg1)
    11121113{
     
    11141115}
    11151116
    1116 //The total number of operations is 7
     1117//The total number of operations is 7.0
    11171118template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::popcount(bitblock128_t arg1)
    11181119{
     
    11201121}
    11211122
    1122 //The total number of operations is 11
     1123//The total number of operations is 11.0
    11231124template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::popcount(bitblock128_t arg1)
    11241125{
     
    11261127}
    11271128
    1128 //The total number of operations is 14
     1129//The total number of operations is 14.0
    11291130template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::popcount(bitblock128_t arg1)
    11301131{
     
    11321133}
    11331134
    1134 //The total number of operations is 17
     1135//The total number of operations is 17.0
    11351136template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::popcount(bitblock128_t arg1)
    11361137{
     
    11381139}
    11391140
    1140 //The total number of operations is 12
     1141//The total number of operations is 12.0
    11411142template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::popcount(bitblock128_t arg1)
    11421143{
     
    11441145}
    11451146
    1146 //The total number of operations is 18
     1147//The total number of operations is 16.3333333333
    11471148template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::popcount(bitblock128_t arg1)
    11481149{
     
    11511152}
    11521153
    1153 //The total number of operations is 8
     1154//The total number of operations is 6.33333333333
    11541155template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::neg(bitblock128_t arg1)
    11551156{
     
    11571158}
    11581159
    1159 //The total number of operations is 6
     1160//The total number of operations is 6.0
    11601161template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::neg(bitblock128_t arg1)
    11611162{
     
    11631164}
    11641165
    1165 //The total number of operations is 1
     1166//The total number of operations is 1.0
    11661167template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::neg(bitblock128_t arg1)
    11671168{
     
    11691170}
    11701171
    1171 //The total number of operations is 1
     1172//The total number of operations is 1.0
    11721173template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::neg(bitblock128_t arg1)
    11731174{
     
    11751176}
    11761177
    1177 //The total number of operations is 1
     1178//The total number of operations is 1.0
    11781179template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::neg(bitblock128_t arg1)
    11791180{
     
    11811182}
    11821183
    1183 //The total number of operations is 1
     1184//The total number of operations is 1.0
    11841185template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::neg(bitblock128_t arg1)
    11851186{
     
    11871188}
    11881189
    1189 //The total number of operations is 11
     1190//The total number of operations is 9.33333333333
    11901191template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::neg(bitblock128_t arg1)
    11911192{
     
    11931194}
    11941195
    1195 //The total number of operations is 2
     1196//The total number of operations is 2.0
    11961197template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::slli(bitblock128_t arg1)
    11971198{
     
    11991200}
    12001201
    1201 //The total number of operations is 2
     1202//The total number of operations is 2.0
    12021203template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::slli(bitblock128_t arg1)
    12031204{
     
    12051206}
    12061207
    1207 //The total number of operations is 2
     1208//The total number of operations is 2.0
    12081209template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::slli(bitblock128_t arg1)
    12091210{
     
    12111212}
    12121213
    1213 //The total number of operations is 1
     1214//The total number of operations is 1.0
    12141215template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::slli(bitblock128_t arg1)
    12151216{
     
    12171218}
    12181219
    1219 //The total number of operations is 1
     1220//The total number of operations is 1.0
    12201221template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::slli(bitblock128_t arg1)
    12211222{
     
    12231224}
    12241225
    1225 //The total number of operations is 1
     1226//The total number of operations is 1.0
    12261227template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::slli(bitblock128_t arg1)
    12271228{
     
    12291230}
    12301231
    1231 //The total number of operations is 4
     1232//The total number of operations is 2.33333333333
    12321233template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::slli(bitblock128_t arg1)
    12331234{
     
    12351236}
    12361237
    1237 //The total number of operations is 3
     1238//The total number of operations is 3.0
    12381239template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12391240{
     
    12411242}
    12421243
    1243 //The total number of operations is 8
     1244//The total number of operations is 8.0
    12441245template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12451246{
     
    12471248}
    12481249
    1249 //The total number of operations is 13
     1250//The total number of operations is 13.0
    12501251template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12511252{
     
    12531254}
    12541255
    1255 //The total number of operations is 1
     1256//The total number of operations is 1.0
    12561257template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12571258{
     
    12591260}
    12601261
    1261 //The total number of operations is 4
     1262//The total number of operations is 4.0
    12621263template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12631264{
     
    12651266}
    12661267
    1267 //The total number of operations is 4
     1268//The total number of operations is 4.0
    12681269template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12691270{
     
    12711272}
    12721273
    1273 //The total number of operations is 4
     1274//The total number of operations is 4.0
    12741275template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12751276{
     
    12771278}
    12781279
    1279 //The total number of operations is 11
     1280//The total number of operations is 9.33333333333
    12801281template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    12811282{
     
    12831284}
    12841285
    1285 //The total number of operations is 1
     1286//The total number of operations is 1.0
    12861287template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::sub(bitblock128_t arg1, bitblock128_t arg2)
    12871288{
     
    12891290}
    12901291
    1291 //The total number of operations is 11
     1292//The total number of operations is 9.33333333333
    12921293template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::sub(bitblock128_t arg1, bitblock128_t arg2)
    12931294{
     
    12961297}
    12971298
    1298 //The total number of operations is 6
     1299//The total number of operations is 6.0
    12991300template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13001301{
     
    13021303}
    13031304
    1304 //The total number of operations is 1
     1305//The total number of operations is 1.0
    13051306template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13061307{
     
    13081309}
    13091310
    1310 //The total number of operations is 1
     1311//The total number of operations is 1.0
    13111312template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13121313{
     
    13141315}
    13151316
    1316 //The total number of operations is 1
     1317//The total number of operations is 1.0
    13171318template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13181319{
     
    13201321}
    13211322
    1322 //The total number of operations is 1
     1323//The total number of operations is 1.0
    13231324template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13241325{
     
    13261327}
    13271328
    1328 //The total number of operations is 11
     1329//The total number of operations is 9.33333333333
    13291330template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sub(bitblock128_t arg1, bitblock128_t arg2)
    13301331{
     
    13351336}
    13361337
    1337 //The total number of operations is 3
     1338//The total number of operations is 3.0
    13381339template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add_hl(bitblock128_t arg1)
    13391340{
     
    13411342}
    13421343
    1343 //The total number of operations is 4
     1344//The total number of operations is 4.0
    13441345template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add_hl(bitblock128_t arg1)
    13451346{
     
    13471348}
    13481349
    1349 //The total number of operations is 4
     1350//The total number of operations is 4.0
    13501351template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add_hl(bitblock128_t arg1)
    13511352{
     
    13531354}
    13541355
    1355 //The total number of operations is 3
     1356//The total number of operations is 3.0
    13561357template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add_hl(bitblock128_t arg1)
    13571358{
     
    13591360}
    13601361
    1361 //The total number of operations is 3
     1362//The total number of operations is 3.0
    13621363template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add_hl(bitblock128_t arg1)
    13631364{
     
    13651366}
    13661367
    1367 //The total number of operations is 3
     1368//The total number of operations is 3.0
    13681369template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add_hl(bitblock128_t arg1)
    13691370{
     
    13711372}
    13721373
    1373 //The total number of operations is 16
     1374//The total number of operations is 12.6666666667
    13741375template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add_hl(bitblock128_t arg1)
    13751376{
     
    13771378}
    13781379
    1379 //The total number of operations is 7
     1380//The total number of operations is 7.0
    13801381template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srl(bitblock128_t arg1, bitblock128_t shift_mask)
    13811382{
     
    13831384}
    13841385
    1385 //The total number of operations is 11
     1386//The total number of operations is 11.0
    13861387template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srl(bitblock128_t arg1, bitblock128_t shift_mask)
    13871388{
     
    14371438}
    14381439
    1439 //The total number of operations is 1
     1440//The total number of operations is 1.0
    14401441template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::min(bitblock128_t arg1, bitblock128_t arg2)
    14411442{
     
    14431444}
    14441445
    1445 //The total number of operations is 18
     1446//The total number of operations is 16.6666666667
    14461447template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::min(bitblock128_t arg1, bitblock128_t arg2)
    14471448{
    1448         return simd128<1>::ifh(simd128<2>::lt(arg1, arg2), arg1, arg2);
    1449 }
    1450 
    1451 //The total number of operations is 9
     1449        bitblock128_t tmp1 = simd128<128>::srli<1>(arg1);
     1450        bitblock128_t tmp2 = simd128<128>::srli<1>(arg2);
     1451        return simd128<1>::ifh(simd128<2>::himask(), simd_or(arg1, arg2), simd_or(simd_and(arg1, simd_and(tmp1, simd_not(tmp2))), simd_and(arg2, simd_or(simd_and(simd_not(tmp1), tmp2), arg1))));
     1452}
     1453
     1454//The total number of operations is 9.0
    14521455template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::min(bitblock128_t arg1, bitblock128_t arg2)
    14531456{
     
    14561459}
    14571460
    1458 //The total number of operations is 1
     1461//The total number of operations is 1.0
    14591462template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::min(bitblock128_t arg1, bitblock128_t arg2)
    14601463{
     
    14621465}
    14631466
    1464 //The total number of operations is 1
     1467//The total number of operations is 1.0
    14651468template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::min(bitblock128_t arg1, bitblock128_t arg2)
    14661469{
     
    14681471}
    14691472
    1470 //The total number of operations is 1
     1473//The total number of operations is 1.0
    14711474template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::min(bitblock128_t arg1, bitblock128_t arg2)
    14721475{
     
    14741477}
    14751478
    1476 //The total number of operations is 4
     1479//The total number of operations is 4.0
    14771480template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::min(bitblock128_t arg1, bitblock128_t arg2)
    14781481{
     
    14801483}
    14811484
    1482 //The total number of operations is 30
     1485//The total number of operations is 26.6666666667
    14831486template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2)
    14841487{
     
    15321535}
    15331536
    1534 //The total number of operations is 1
     1537//The total number of operations is 1.0
    15351538template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15361539{
     
    15381541}
    15391542
    1540 //The total number of operations is 16
     1543//The total number of operations is 16.0
    15411544template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15421545{
     
    15441547}
    15451548
    1546 //The total number of operations is 6
     1549//The total number of operations is 6.0
    15471550template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15481551{
     
    15501553}
    15511554
    1552 //The total number of operations is 1
     1555//The total number of operations is 1.0
    15531556template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15541557{
     
    15561559}
    15571560
    1558 //The total number of operations is 1
     1561//The total number of operations is 1.0
    15591562template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15601563{
     
    15621565}
    15631566
    1564 //The total number of operations is 1
     1567//The total number of operations is 1.0
    15651568template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15661569{
     
    15681571}
    15691572
    1570 //The total number of operations is 7
     1573//The total number of operations is 7.0
    15711574template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15721575{
     
    15751578}
    15761579
    1577 //The total number of operations is 26
     1580//The total number of operations is 22.6666666667
    15781581template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15791582{
     
    15841587}
    15851588
    1586 //The total number of operations is 9
     1589//The total number of operations is 7.33333333333
    15871590template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::abs(bitblock128_t arg1)
    15881591{
     
    15901593}
    15911594
    1592 //The total number of operations is 19
     1595//The total number of operations is 19.0
    15931596template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::abs(bitblock128_t arg1)
    15941597{
     
    15971600}
    15981601
    1599 //The total number of operations is 1
     1602//The total number of operations is 1.0
    16001603template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::abs(bitblock128_t arg1)
    16011604{
     
    16031606}
    16041607
    1605 //The total number of operations is 1
     1608//The total number of operations is 1.0
    16061609template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::abs(bitblock128_t arg1)
    16071610{
     
    16091612}
    16101613
    1611 //The total number of operations is 1
     1614//The total number of operations is 1.0
    16121615template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::abs(bitblock128_t arg1)
    16131616{
     
    16151618}
    16161619
    1617 //The total number of operations is 5
     1620//The total number of operations is 5.0
    16181621template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::abs(bitblock128_t arg1)
    16191622{
     
    16221625}
    16231626
    1624 //The total number of operations is 33
     1627//The total number of operations is 28.0
    16251628template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::abs(bitblock128_t arg1)
    16261629{
     
    16291632}
    16301633
    1631 //The total number of operations is 2
     1634//The total number of operations is 2.0
    16321635template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16331636{
     
    16351638}
    16361639
    1637 //The total number of operations is 8
     1640//The total number of operations is 8.0
    16381641template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16391642{
     
    16441647}
    16451648
    1646 //The total number of operations is 9
     1649//The total number of operations is 9.0
    16471650template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16481651{
     
    16501653}
    16511654
    1652 //The total number of operations is 1
     1655//The total number of operations is 1.0
    16531656template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16541657{
     
    16561659}
    16571660
    1658 //The total number of operations is 1
     1661//The total number of operations is 1.0
    16591662template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16601663{
     
    16621665}
    16631666
    1664 //The total number of operations is 1
     1667//The total number of operations is 1.0
    16651668template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16661669{
     
    16681671}
    16691672
    1670 //The total number of operations is 1
     1673//The total number of operations is 1.0
    16711674template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16721675{
     
    16741677}
    16751678
    1676 //The total number of operations is 11
     1679//The total number of operations is 7.66666666667
    16771680template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16781681{
     
    16831686}
    16841687
    1685 //The total number of operations is 4
     1688//The total number of operations is 4.0
    16861689template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srai(bitblock128_t arg1)
    16871690{
     
    16891692}
    16901693
    1691 //The total number of operations is 10
     1694//The total number of operations is 10.0
    16921695template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srai(bitblock128_t arg1)
    16931696{
     
    16961699}
    16971700
    1698 //The total number of operations is 5
     1701//The total number of operations is 5.0
    16991702template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srai(bitblock128_t arg1)
    17001703{
     
    17031706}
    17041707
    1705 //The total number of operations is 1
     1708//The total number of operations is 1.0
    17061709template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srai(bitblock128_t arg1)
    17071710{
     
    17091712}
    17101713
    1711 //The total number of operations is 1
     1714//The total number of operations is 1.0
    17121715template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srai(bitblock128_t arg1)
    17131716{
     
    17151718}
    17161719
    1717 //The total number of operations is 5
     1720//The total number of operations is 4.5
    17181721template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1)
    17191722{
     
    17211724}
    17221725
    1723 //The total number of operations is 16
     1726//The total number of operations is 11.0833333333
    17241727template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1)
    17251728{
     
    17691772}
    17701773
    1771 //The total number of operations is 1
     1774//The total number of operations is 1.0
    17721775template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::add(bitblock128_t arg1, bitblock128_t arg2)
    17731776{
     
    17751778}
    17761779
    1777 //The total number of operations is 10
     1780//The total number of operations is 8.33333333333
    17781781template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add(bitblock128_t arg1, bitblock128_t arg2)
    17791782{
     
    17821785}
    17831786
    1784 //The total number of operations is 6
     1787//The total number of operations is 6.0
    17851788template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add(bitblock128_t arg1, bitblock128_t arg2)
    17861789{
     
    17881791}
    17891792
    1790 //The total number of operations is 1
     1793//The total number of operations is 1.0
    17911794template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add(bitblock128_t arg1, bitblock128_t arg2)
    17921795{
     
    17941797}
    17951798
    1796 //The total number of operations is 1
     1799//The total number of operations is 1.0
    17971800template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add(bitblock128_t arg1, bitblock128_t arg2)
    17981801{
     
    18001803}
    18011804
    1802 //The total number of operations is 1
     1805//The total number of operations is 1.0
    18031806template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add(bitblock128_t arg1, bitblock128_t arg2)
    18041807{
     
    18061809}
    18071810
    1808 //The total number of operations is 1
     1811//The total number of operations is 1.0
    18091812template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add(bitblock128_t arg1, bitblock128_t arg2)
    18101813{
     
    18121815}
    18131816
    1814 //The total number of operations is 11
     1817//The total number of operations is 9.33333333333
    18151818template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add(bitblock128_t arg1, bitblock128_t arg2)
    18161819{
     
    18211824}
    18221825
    1823 //The total number of operations is 1
     1826//The total number of operations is 1.0
    18241827template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18251828{
     
    18271830}
    18281831
    1829 //The total number of operations is 16
     1832//The total number of operations is 15.6666666667
    18301833template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18311834{
    1832         return simd_or(simd_and(simd128<(4)>::himask(), simd128<(4)>::umax(arg1, arg2)), simd128<(4)>::umax(simd_and(simd128<(4)>::lomask(), arg1), simd_and(simd128<(4)>::lomask(), arg2)));
    1833 }
    1834 
    1835 //The total number of operations is 6
     1835        return simd128<1>::ifh(simd128<2>::himask(), simd_or(arg1, arg2), simd_or(simd_and(arg2, simd128<128>::srli<1>(simd_or(simd_not(arg1), arg2))), simd_and(arg1, simd128<128>::srli<1>(simd_or(arg1, simd_not(arg2))))));
     1836}
     1837
     1838//The total number of operations is 6.0
    18361839template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18371840{
     
    18391842}
    18401843
    1841 //The total number of operations is 1
     1844//The total number of operations is 1.0
    18421845template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18431846{
     
    18451848}
    18461849
    1847 //The total number of operations is 1
     1850//The total number of operations is 1.0
    18481851template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18491852{
     
    18511854}
    18521855
    1853 //The total number of operations is 1
     1856//The total number of operations is 1.0
    18541857template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18551858{
     
    18571860}
    18581861
    1859 //The total number of operations is 7
     1862//The total number of operations is 7.0
    18601863template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18611864{
     
    18641867}
    18651868
    1866 //The total number of operations is 26
     1869//The total number of operations is 22.6666666667
    18671870template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18681871{
     
    18731876}
    18741877
    1875 //The total number of operations is 93
     1878//The total number of operations is 73.0
    18761879template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18771880{
     
    18791882}
    18801883
    1881 //The total number of operations is 80
     1884//The total number of operations is 66.6666666667
    18821885template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18831886{
     
    18851888}
    18861889
    1887 //The total number of operations is 42
     1890//The total number of operations is 35.3333333333
    18881891template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18891892{
     
    18911894}
    18921895
    1893 //The total number of operations is 7
     1896//The total number of operations is 7.0
    18941897template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18951898{
     
    18971900}
    18981901
    1899 //The total number of operations is 7
     1902//The total number of operations is 7.0
    19001903template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19011904{
     
    19031906}
    19041907
    1905 //The total number of operations is 7
     1908//The total number of operations is 7.0
    19061909template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19071910{
     
    19091912}
    19101913
    1911 //The total number of operations is 21
     1914//The total number of operations is 17.6666666667
    19121915template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19131916{
     
    19151918}
    19161919
    1917 //The total number of operations is 93
     1920//The total number of operations is 73.0
    19181921template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19191922{
     
    19211924}
    19221925
    1923 //The total number of operations is 74
     1926//The total number of operations is 59.0
    19241927template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19251928{
     
    19271930}
    19281931
    1929 //The total number of operations is 42
     1932//The total number of operations is 35.3333333333
    19301933template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19311934{
     
    19331936}
    19341937
    1935 //The total number of operations is 7
     1938//The total number of operations is 7.0
    19361939template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19371940{
     
    19391942}
    19401943
    1941 //The total number of operations is 1
     1944//The total number of operations is 1.0
    19421945template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19431946{
     
    19451948}
    19461949
    1947 //The total number of operations is 1
     1950//The total number of operations is 1.0
    19481951template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19491952{
     
    19511954}
    19521955
    1953 //The total number of operations is 15
     1956//The total number of operations is 11.6666666667
    19541957template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19551958{
     
    19571960}
    19581961
    1959 //The total number of operations is 120
     1962//The total number of operations is 108.666666667
    19601963template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19611964{
     
    19651968}
    19661969
    1967 //The total number of operations is 86
     1970//The total number of operations is 79.3333333333
    19681971template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19691972{
     
    19731976}
    19741977
    1975 //The total number of operations is 36
     1978//The total number of operations is 32.6666666667
    19761979template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19771980{
     
    19811984}
    19821985
    1983 //The total number of operations is 1
     1986//The total number of operations is 1.0
    19841987template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19851988{
     
    19871990}
    19881991
    1989 //The total number of operations is 1
     1992//The total number of operations is 1.0
    19901993template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19911994{
     
    19931996}
    19941997
    1995 //The total number of operations is 21
     1998//The total number of operations is 21.0
    19961999template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19972000{
     
    20012004}
    20022005
    2003 //The total number of operations is 152
     2006//The total number of operations is 115.666666667
    20042007template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2)
    20052008{
     
    20092012}
    20102013
    2011 //The total number of operations is 24
     2014//The total number of operations is 24.0
    20122015template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<4>::signmask(bitblock128_t arg1)
    20132016{
     
    20172020}
    20182021
    2019 //The total number of operations is 1
     2022//The total number of operations is 1.0
    20202023template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<8>::signmask(bitblock128_t arg1)
    20212024{
     
    20232026}
    20242027
    2025 //The total number of operations is 4
     2028//The total number of operations is 4.0
    20262029template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<16>::signmask(bitblock128_t arg1)
    20272030{
     
    20292032}
    20302033
    2031 //The total number of operations is 4
     2034//The total number of operations is 4.0
    20322035template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<32>::signmask(bitblock128_t arg1)
    20332036{
     
    20352038}
    20362039
    2037 //The total number of operations is 4
     2040//The total number of operations is 4.0
    20382041template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<64>::signmask(bitblock128_t arg1)
    20392042{
     
    20412044}
    20422045
    2043 //The total number of operations is 11
     2046//The total number of operations is 9.33333333333
    20442047template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<128>::signmask(bitblock128_t arg1)
    20452048{
     
    20472050}
    20482051
    2049 //The total number of operations is 45
     2052//The total number of operations is 35.0
    20502053template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20512054{
     
    20532056}
    20542057
    2055 //The total number of operations is 31
     2058//The total number of operations is 24.3333333333
    20562059template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20572060{
     
    20592062}
    20602063
    2061 //The total number of operations is 17
     2064//The total number of operations is 13.6666666667
    20622065template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20632066{
     
    20652068}
    20662069
    2067 //The total number of operations is 3
     2070//The total number of operations is 3.0
    20682071template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20692072{
     
    20712074}
    20722075
    2073 //The total number of operations is 3
     2076//The total number of operations is 3.0
    20742077template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20752078{
     
    20772080}
    20782081
    2079 //The total number of operations is 3
     2082//The total number of operations is 3.0
    20802083template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20812084{
     
    20832086}
    20842087
    2085 //The total number of operations is 7
     2088//The total number of operations is 5.33333333333
    20862089template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20872090{
     
    20892092}
    20902093
    2091 //The total number of operations is 47
     2094//The total number of operations is 37.0
    20922095template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20932096{
     
    20952098}
    20962099
    2097 //The total number of operations is 33
     2100//The total number of operations is 26.3333333333
    20982101template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20992102{
     
    21012104}
    21022105
    2103 //The total number of operations is 19
     2106//The total number of operations is 15.6666666667
    21042107template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21052108{
     
    21072110}
    21082111
    2109 //The total number of operations is 3
     2112//The total number of operations is 3.0
    21102113template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21112114{
     
    21132116}
    21142117
    2115 //The total number of operations is 3
     2118//The total number of operations is 3.0
    21162119template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21172120{
     
    21192122}
    21202123
    2121 //The total number of operations is 3
     2124//The total number of operations is 3.0
    21222125template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21232126{
     
    21252128}
    21262129
    2127 //The total number of operations is 7
     2130//The total number of operations is 5.33333333333
    21282131template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21292132{
     
    21312134}
    21322135
    2133 //The total number of operations is 93
     2136//The total number of operations is 73.0
    21342137template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21352138{
     
    21372140}
    21382141
    2139 //The total number of operations is 82
     2142//The total number of operations is 67.3333333333
    21402143template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21412144{
     
    21432146}
    21442147
    2145 //The total number of operations is 45
     2148//The total number of operations is 38.3333333333
    21462149template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21472150{
     
    21492152}
    21502153
    2151 //The total number of operations is 7
     2154//The total number of operations is 7.0
    21522155template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21532156{
     
    21552158}
    21562159
    2157 //The total number of operations is 7
     2160//The total number of operations is 7.0
    21582161template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21592162{
     
    21612164}
    21622165
    2163 //The total number of operations is 7
     2166//The total number of operations is 7.0
    21642167template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21652168{
     
    21672170}
    21682171
    2169 //The total number of operations is 18
     2172//The total number of operations is 14.6666666667
    21702173template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21712174{
     
    21732176}
    21742177
    2175 //The total number of operations is 85
     2178//The total number of operations is 75.0
    21762179template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21772180{
     
    21832186}
    21842187
    2185 //The total number of operations is 83
     2188//The total number of operations is 74.3333333333
    21862189template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21872190{
    2188         bitblock128_t arg11 = simd128<4>::ifh(arg1, simd128<4>::constant<0>(), arg1);
    2189         bitblock128_t arg12 = simd_and(simd128<4>::lomask(), arg11);
    2190         bitblock128_t arg21 = simd128<4>::ifh(arg2, simd128<4>::constant<0>(), arg2);
    2191         bitblock128_t arg22 = simd_and(simd128<4>::lomask(), arg21);
    2192         return hsimd128<4>::packl(simd128<1>::ifh(simd128<4>::eq(arg12, arg11), arg12, simd128<4>::lomask()), simd128<1>::ifh(simd128<4>::eq(arg22, arg21), arg22, simd128<4>::lomask()));
    2193 }
    2194 
    2195 //The total number of operations is 29
     2191        bitblock128_t hiPart = hsimd128<4>::packh(arg1, arg2);
     2192        return simd128<(2)>::ifh(hiPart, simd128<(2)>::constant<0>(), simd_or(simd128<(2)>::gt(hiPart, simd128<(2)>::constant<0>()), hsimd128<4>::packl(arg1, arg2)));
     2193}
     2194
     2195//The total number of operations is 25.6666666667
    21962196template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21972197{
     
    22032203}
    22042204
    2205 //The total number of operations is 1
     2205//The total number of operations is 1.0
    22062206template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22072207{
     
    22092209}
    22102210
    2211 //The total number of operations is 1
     2211//The total number of operations is 1.0
    22122212template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22132213{
     
    22152215}
    22162216
    2217 //The total number of operations is 12
     2217//The total number of operations is 12.0
    22182218template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22192219{
     
    22222222}
    22232223
    2224 //The total number of operations is 20
     2224//The total number of operations is 16.6666666667
    22252225template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22262226{
     
    22292229}
    22302230
    2231 //The total number of operations is 31
     2231//The total number of operations is 31.0
    22322232template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22332233{
     
    22352235}
    22362236
    2237 //The total number of operations is 21
     2237//The total number of operations is 21.0
    22382238template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22392239{
     
    22412241}
    22422242
    2243 //The total number of operations is 11
     2243//The total number of operations is 11.0
    22442244template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22452245{
     
    22472247}
    22482248
    2249 //The total number of operations is 1
     2249//The total number of operations is 1.0
    22502250template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22512251{
     
    22532253}
    22542254
    2255 //The total number of operations is 1
     2255//The total number of operations is 1.0
    22562256template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22572257{
     
    22592259}
    22602260
    2261 //The total number of operations is 1
     2261//The total number of operations is 1.0
    22622262template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22632263{
     
    22652265}
    22662266
    2267 //The total number of operations is 1
     2267//The total number of operations is 1.0
    22682268template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22692269{
     
    22712271}
    22722272
    2273 //The total number of operations is 31
     2273//The total number of operations is 31.0
    22742274template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22752275{
     
    22772277}
    22782278
    2279 //The total number of operations is 21
     2279//The total number of operations is 21.0
    22802280template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22812281{
     
    22832283}
    22842284
    2285 //The total number of operations is 11
     2285//The total number of operations is 11.0
    22862286template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22872287{
     
    22892289}
    22902290
    2291 //The total number of operations is 1
     2291//The total number of operations is 1.0
    22922292template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22932293{
     
    22952295}
    22962296
    2297 //The total number of operations is 1
     2297//The total number of operations is 1.0
    22982298template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22992299{
     
    23012301}
    23022302
    2303 //The total number of operations is 1
     2303//The total number of operations is 1.0
    23042304template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23052305{
     
    23072307}
    23082308
    2309 //The total number of operations is 1
     2309//The total number of operations is 1.0
    23102310template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23112311{
     
    23132313}
    23142314
    2315 //The total number of operations is 24
     2315//The total number of operations is 24.0
    23162316template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendh(bitblock128_t arg1)
    23172317{
     
    23192319}
    23202320
    2321 //The total number of operations is 14
     2321//The total number of operations is 14.0
    23222322template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendh(bitblock128_t arg1)
    23232323{
     
    23252325}
    23262326
    2327 //The total number of operations is 4
     2327//The total number of operations is 4.0
    23282328template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendh(bitblock128_t arg1)
    23292329{
     
    23312331}
    23322332
    2333 //The total number of operations is 3
     2333//The total number of operations is 3.0
    23342334template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendh(bitblock128_t arg1)
    23352335{
     
    23372337}
    23382338
    2339 //The total number of operations is 3
     2339//The total number of operations is 3.0
    23402340template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendh(bitblock128_t arg1)
    23412341{
     
    23432343}
    23442344
    2345 //The total number of operations is 3
     2345//The total number of operations is 3.0
    23462346template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendh(bitblock128_t arg1)
    23472347{
     
    23492349}
    23502350
    2351 //The total number of operations is 4
     2351//The total number of operations is 2.33333333333
    23522352template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendh(bitblock128_t arg1)
    23532353{
     
    23552355}
    23562356
    2357 //The total number of operations is 24
     2357//The total number of operations is 24.0
    23582358template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendl(bitblock128_t arg1)
    23592359{
     
    23612361}
    23622362
    2363 //The total number of operations is 14
     2363//The total number of operations is 14.0
    23642364template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendl(bitblock128_t arg1)
    23652365{
     
    23672367}
    23682368
    2369 //The total number of operations is 4
     2369//The total number of operations is 4.0
    23702370template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendl(bitblock128_t arg1)
    23712371{
     
    23732373}
    23742374
    2375 //The total number of operations is 1
     2375//The total number of operations is 1.0
    23762376template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendl(bitblock128_t arg1)
    23772377{
     
    23792379}
    23802380
    2381 //The total number of operations is 1
     2381//The total number of operations is 1.0
    23822382template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendl(bitblock128_t arg1)
    23832383{
     
    23852385}
    23862386
    2387 //The total number of operations is 1
     2387//The total number of operations is 1.0
    23882388template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendl(bitblock128_t arg1)
    23892389{
     
    23912391}
    23922392
    2393 //The total number of operations is 1
     2393//The total number of operations is 1.0
    23942394template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendl(bitblock128_t arg1)
    23952395{
     
    23972397}
    23982398
    2399 //The total number of operations is 31
     2399//The total number of operations is 31.0
    24002400template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendh(bitblock128_t arg1)
    24012401{
     
    24032403}
    24042404
    2405 //The total number of operations is 33
     2405//The total number of operations is 33.0
    24062406template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendh(bitblock128_t arg1)
    24072407{
     
    24092409}
    24102410
    2411 //The total number of operations is 13
     2411//The total number of operations is 13.0
    24122412template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendh(bitblock128_t arg1)
    24132413{
     
    24152415}
    24162416
    2417 //The total number of operations is 4
     2417//The total number of operations is 3.33333333333
    24182418template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendh(bitblock128_t arg1)
    24192419{
    2420         return esimd128<(16)>::mergeh(simd128<(16)>::srai<8>(arg1), simd128<(16)>::srai<8>(simd128<(16)>::slli<8>(arg1)));
    2421 }
    2422 
    2423 //The total number of operations is 4
     2420        return esimd128<8>::signextendl(simd128<128>::srli<(64)>(arg1));
     2421}
     2422
     2423//The total number of operations is 3.33333333333
    24242424template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendh(bitblock128_t arg1)
    24252425{
    2426         return esimd128<(32)>::mergeh(simd128<(32)>::srai<16>(arg1), simd128<(32)>::srai<16>(simd128<(32)>::slli<16>(arg1)));
    2427 }
    2428 
    2429 //The total number of operations is 5
     2426        return esimd128<16>::signextendl(simd128<128>::srli<(64)>(arg1));
     2427}
     2428
     2429//The total number of operations is 3.33333333333
    24302430template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1)
    24312431{
     
    24332433}
    24342434
    2435 //The total number of operations is 16
     2435//The total number of operations is 11.0833333333
    24362436template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1)
    24372437{
     
    24392439}
    24402440
    2441 //The total number of operations is 31
     2441//The total number of operations is 31.0
    24422442template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendl(bitblock128_t arg1)
    24432443{
     
    24452445}
    24462446
    2447 //The total number of operations is 33
     2447//The total number of operations is 33.0
    24482448template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendl(bitblock128_t arg1)
    24492449{
     
    24512451}
    24522452
    2453 //The total number of operations is 13
     2453//The total number of operations is 13.0
    24542454template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendl(bitblock128_t arg1)
    24552455{
     
    24572457}
    24582458
    2459 //The total number of operations is 1
     2459//The total number of operations is 1.0
    24602460template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendl(bitblock128_t arg1)
    24612461{
     
    24632463}
    24642464
    2465 //The total number of operations is 1
     2465//The total number of operations is 1.0
    24662466template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendl(bitblock128_t arg1)
    24672467{
     
    24692469}
    24702470
    2471 //The total number of operations is 1
     2471//The total number of operations is 1.0
    24722472template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1)
    24732473{
     
    24752475}
    24762476
    2477 //The total number of operations is 20
     2477//The total number of operations is 13.4166666667
    24782478template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1)
    24792479{
     
    24812481}
    24822482
    2483 //The total number of operations is 17
     2483//The total number of operations is 13.6666666667
    24842484template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::shufflei(bitblock128_t arg1)
    24852485{
     
    24992499}
    25002500
    2501 //The total number of operations is 1
     2501//The total number of operations is 1.0
    25022502template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::shufflei(bitblock128_t arg1)
    25032503{
     
    25052505}
    25062506
    2507 //The total number of operations is 1
     2507//The total number of operations is 1.0
    25082508template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::shufflei(bitblock128_t arg1)
    25092509{
     
    25112511}
    25122512
    2513 //The total number of operations is 9
     2513//The total number of operations is 5.66666666667
    25142514template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25152515{
     
    25172517}
    25182518
    2519 //The total number of operations is 9
     2519//The total number of operations is 5.66666666667
    25202520template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25212521{
     
    25232523}
    25242524
    2525 //The total number of operations is 9
     2525//The total number of operations is 3.0
    25262526template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25272527{
     
    25292529}
    25302530
    2531 //The total number of operations is 9
     2531//The total number of operations is 3.0
    25322532template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25332533{
     
    25352535}
    25362536
    2537 //The total number of operations is 9
     2537//The total number of operations is 3.0
    25382538template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25392539{
     
    25412541}
    25422542
    2543 //The total number of operations is 9
     2543//The total number of operations is 3.0
    25442544template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25452545{
     
    25472547}
    25482548
    2549 //The total number of operations is 9
     2549//The total number of operations is 3.0
    25502550template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25512551{
     
    25532553}
    25542554
    2555 //The total number of operations is 1
     2555//The total number of operations is 1.0
    25562556template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill(uint64_t val1)
    25572557{
     
    25592559}
    25602560
    2561 //The total number of operations is 1
     2561//The total number of operations is 1.0
    25622562template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill(uint64_t val1)
    25632563{
     
    25652565}
    25662566
    2567 //The total number of operations is 1
     2567//The total number of operations is 1.0
    25682568template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill(uint64_t val1)
    25692569{
     
    25712571}
    25722572
    2573 //The total number of operations is 1
     2573//The total number of operations is 1.0
    25742574template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill(uint64_t val1)
    25752575{
     
    25772577}
    25782578
    2579 //The total number of operations is 1
     2579//The total number of operations is 1.0
    25802580template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill(uint64_t val1)
    25812581{
     
    25832583}
    25842584
    2585 //The total number of operations is 1
     2585//The total number of operations is 1.0
    25862586template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill(uint64_t val1)
    25872587{
     
    25892589}
    25902590
    2591 //The total number of operations is 1
     2591//The total number of operations is 1.0
    25922592template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill(uint64_t val1)
    25932593{
     
    25952595}
    25962596
    2597 //The total number of operations is 1
     2597//The total number of operations is 1.0
    25982598template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::fill(uint64_t val1)
    25992599{
     
    26012601}
    26022602
    2603 //The total number of operations is 1
     2603//The total number of operations is 1.0
    26042604template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::shuffle(bitblock128_t arg1, bitblock128_t arg2)
    26052605{
     
    26072607}
    26082608
    2609 //The total number of operations is 10
     2609//The total number of operations is 10.0
    26102610template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::shuffle(bitblock128_t arg1, bitblock128_t arg2)
    26112611{
     
    26172617}
    26182618
    2619 //The total number of operations is 19
     2619//The total number of operations is 19.0
    26202620template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::shuffle(bitblock128_t arg1, bitblock128_t arg2)
    26212621{
     
    26272627}
    26282628
    2629 //The total number of operations is 28
     2629//The total number of operations is 28.0
    26302630template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::shuffle(bitblock128_t arg1, bitblock128_t arg2)
    26312631{
     
    26372637}
    26382638
    2639 //The total number of operations is 1
     2639//The total number of operations is 1.0
    26402640template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<1>::extract(bitblock128_t arg1)
    26412641{
     
    26432643}
    26442644
    2645 //The total number of operations is 1
     2645//The total number of operations is 1.0
    26462646template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<2>::extract(bitblock128_t arg1)
    26472647{
     
    26492649}
    26502650
    2651 //The total number of operations is 1
     2651//The total number of operations is 1.0
    26522652template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<4>::extract(bitblock128_t arg1)
    26532653{
     
    26552655}
    26562656
    2657 //The total number of operations is 1
     2657//The total number of operations is 1.0
    26582658template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<8>::extract(bitblock128_t arg1)
    26592659{
     
    26612661}
    26622662
    2663 //The total number of operations is 1
     2663//The total number of operations is 1.0
    26642664template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<16>::extract(bitblock128_t arg1)
    26652665{
     
    26672667}
    26682668
    2669 //The total number of operations is 1
     2669//The total number of operations is 1.0
    26702670template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<32>::extract(bitblock128_t arg1)
    26712671{
     
    26732673}
    26742674
    2675 //The total number of operations is 2
     2675//The total number of operations is 2.0
    26762676template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<64>::extract(bitblock128_t arg1)
    26772677{
     
    26792679}
    26802680
    2681 //The total number of operations is 14
     2681//The total number of operations is 12.6666666667
    26822682template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::splat(bitblock128_t arg1)
    26832683{
    2684         bitblock128_t tmpArg = (((pos%2) == 0) ? simd128<(2)>::slli<1>(arg1) : simd128<(2)>::srli<1>(arg1));
    2685         bitblock128_t arg11 = (((pos%2) == 0) ? simd_and(simd128<(2)>::lomask(), arg1) : simd_and(simd128<(2)>::himask(), arg1));
    2686         return mvmd128<(2)>::splat<(pos/2)>(simd_or(tmpArg, arg11));
    2687 }
    2688 
    2689 //The total number of operations is 10
     2684        return simd128<128>::sub(simd128<128>::constant<0>(), simd_and(simd128<128>::constant<1>(), simd128<128>::srli<pos>(arg1)));
     2685}
     2686
     2687//The total number of operations is 10.0
    26902688template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::splat(bitblock128_t arg1)
    26912689{
     
    26952693}
    26962694
    2697 //The total number of operations is 6
     2695//The total number of operations is 6.0
    26982696template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::splat(bitblock128_t arg1)
    26992697{
     
    27032701}
    27042702
    2705 //The total number of operations is 2
     2703//The total number of operations is 2.0
    27062704template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::splat(bitblock128_t arg1)
    27072705{
     
    27092707}
    27102708
    2711 //The total number of operations is 2
     2709//The total number of operations is 2.0
    27122710template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::splat(bitblock128_t arg1)
    27132711{
     
    27152713}
    27162714
    2717 //The total number of operations is 1
     2715//The total number of operations is 1.0
    27182716template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::splat(bitblock128_t arg1)
    27192717{
     
    27212719}
    27222720
    2723 //The total number of operations is 5
     2721//The total number of operations is 5.0
    27242722template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::splat(bitblock128_t arg1)
    27252723{
     
    27272725}
    27282726
    2729 //The total number of operations is 13
     2727//The total number of operations is 13.0
    27302728template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::splat(bitblock128_t arg1)
    27312729{
     
    27332731}
    27342732
    2735 //The total number of operations is 15
     2733//The total number of operations is 15.0
    27362734template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16)
    27372735{
     
    27392737}
    27402738
    2741 //The total number of operations is 7
     2739//The total number of operations is 7.0
    27422740template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16)
    27432741{
     
    27452743}
    27462744
    2747 //The total number of operations is 3
     2745//The total number of operations is 3.0
    27482746template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16)
    27492747{
     
    27512749}
    27522750
    2753 //The total number of operations is 1
     2751//The total number of operations is 1.0
    27542752template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill16(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8, uint64_t val9, uint64_t val10, uint64_t val11, uint64_t val12, uint64_t val13, uint64_t val14, uint64_t val15, uint64_t val16)
    27552753{
     
    27572755}
    27582756
    2759 //The total number of operations is 5
     2757//The total number of operations is 5.0
    27602758template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27612759{
     
    27632761}
    27642762
    2765 //The total number of operations is 5
     2763//The total number of operations is 5.0
    27662764template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27672765{
     
    27692767}
    27702768
    2771 //The total number of operations is 5
     2769//The total number of operations is 5.0
    27722770template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27732771{
     
    27752773}
    27762774
    2777 //The total number of operations is 5
     2775//The total number of operations is 5.0
    27782776template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27792777{
     
    27812779}
    27822780
    2783 //The total number of operations is 3
     2781//The total number of operations is 3.0
    27842782template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27852783{
     
    27872785}
    27882786
    2789 //The total number of operations is 1
     2787//The total number of operations is 1.0
    27902788template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27912789{
     
    27932791}
    27942792
    2795 //The total number of operations is 4
     2793//The total number of operations is 2.33333333333
    27962794template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::srli(bitblock128_t arg1)
    27972795{
     
    27992797}
    28002798
    2801 //The total number of operations is 4
     2799//The total number of operations is 2.33333333333
    28022800template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::srli(bitblock128_t arg1)
    28032801{
     
    28052803}
    28062804
    2807 //The total number of operations is 4
     2805//The total number of operations is 1.0
    28082806template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::srli(bitblock128_t arg1)
    28092807{
    2810         return simd128<128>::srli<(sh*8)>(arg1);
    2811 }
    2812 
    2813 //The total number of operations is 4
     2808        return _mm_srli_si128(arg1, (int32_t)(sh));
     2809}
     2810
     2811//The total number of operations is 1.0
    28142812template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::srli(bitblock128_t arg1)
    28152813{
    2816         return simd128<128>::srli<(sh*16)>(arg1);
    2817 }
    2818 
    2819 //The total number of operations is 4
     2814        return mvmd128<(8)>::srli<(sh*2)>(arg1);
     2815}
     2816
     2817//The total number of operations is 1.0
    28202818template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::srli(bitblock128_t arg1)
    28212819{
    2822         return simd128<128>::srli<(sh*32)>(arg1);
    2823 }
    2824 
    2825 //The total number of operations is 4
     2820        return mvmd128<(16)>::srli<(sh*2)>(arg1);
     2821}
     2822
     2823//The total number of operations is 1.0
    28262824template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::srli(bitblock128_t arg1)
    28272825{
    2828         return simd128<128>::srli<(sh*64)>(arg1);
    2829 }
    2830 
    2831 //The total number of operations is 4
     2826        return mvmd128<(32)>::srli<(sh*2)>(arg1);
     2827}
     2828
     2829//The total number of operations is 1.0
    28322830template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::srli(bitblock128_t arg1)
    28332831{
    2834         return simd128<128>::srli<(sh*128)>(arg1);
    2835 }
    2836 
    2837 //The total number of operations is 1
     2832        return mvmd128<(64)>::srli<(sh*2)>(arg1);
     2833}
     2834
     2835//The total number of operations is 1.0
    28382836template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill2(uint64_t val1, uint64_t val2)
    28392837{
     
    28412839}
    28422840
    2843 //The total number of operations is 1
     2841//The total number of operations is 1.0
    28442842template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill2(uint64_t val1, uint64_t val2)
    28452843{
     
    28472845}
    28482846
    2849 //The total number of operations is 1
     2847//The total number of operations is 1.0
    28502848template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill2(uint64_t val1, uint64_t val2)
    28512849{
     
    28532851}
    28542852
    2855 //The total number of operations is 1
     2853//The total number of operations is 1.0
    28562854template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill2(uint64_t val1, uint64_t val2)
    28572855{
     
    28592857}
    28602858
    2861 //The total number of operations is 1
     2859//The total number of operations is 1.0
    28622860template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill2(uint64_t val1, uint64_t val2)
    28632861{
     
    28652863}
    28662864
    2867 //The total number of operations is 5
     2865//The total number of operations is 5.0
    28682866template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill2(uint64_t val1, uint64_t val2)
    28692867{
     
    28712869}
    28722870
    2873 //The total number of operations is 5
     2871//The total number of operations is 5.0
    28742872template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill2(uint64_t val1, uint64_t val2)
    28752873{
     
    28772875}
    28782876
    2879 //The total number of operations is 9
     2877//The total number of operations is 5.66666666667
    28802878template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28812879{
     
    28832881}
    28842882
    2885 //The total number of operations is 9
     2883//The total number of operations is 5.66666666667
    28862884template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28872885{
     
    28892887}
    28902888
    2891 //The total number of operations is 9
     2889//The total number of operations is 3.0
    28922890template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28932891{
     
    28952893}
    28962894
    2897 //The total number of operations is 9
     2895//The total number of operations is 3.0
    28982896template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28992897{
     
    29012899}
    29022900
    2903 //The total number of operations is 9
     2901//The total number of operations is 3.0
    29042902template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    29052903{
     
    29072905}
    29082906
    2909 //The total number of operations is 9
     2907//The total number of operations is 3.0
    29102908template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    29112909{
     
    29132911}
    29142912
    2915 //The total number of operations is 9
     2913//The total number of operations is 3.0
    29162914template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    29172915{
     
    29192917}
    29202918
    2921 //The total number of operations is 4
     2919//The total number of operations is 2.33333333333
    29222920template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::slli(bitblock128_t arg1)
    29232921{
     
    29252923}
    29262924
    2927 //The total number of operations is 4
     2925//The total number of operations is 2.33333333333
    29282926template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::slli(bitblock128_t arg1)
    29292927{
     
    29312929}
    29322930
    2933 //The total number of operations is 4
     2931//The total number of operations is 1.0
    29342932template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::slli(bitblock128_t arg1)
    29352933{
    2936         return simd128<128>::slli<(sh*8)>(arg1);
    2937 }
    2938 
    2939 //The total number of operations is 4
     2934        return _mm_slli_si128(arg1, (int32_t)(sh));
     2935}
     2936
     2937//The total number of operations is 1.0
    29402938template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::slli(bitblock128_t arg1)
    29412939{
     
    29432941}
    29442942
    2945 //The total number of operations is 4
     2943//The total number of operations is 1.0
    29462944template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::slli(bitblock128_t arg1)
    29472945{
    2948         return simd128<128>::slli<(sh*32)>(arg1);
    2949 }
    2950 
    2951 //The total number of operations is 4
     2946        return mvmd128<(16)>::slli<(sh*2)>(arg1);
     2947}
     2948
     2949//The total number of operations is 1.0
    29522950template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::slli(bitblock128_t arg1)
    29532951{
     
    29552953}
    29562954
    2957 //The total number of operations is 4
     2955//The total number of operations is 1.0
    29582956template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::slli(bitblock128_t arg1)
    29592957{
    2960         return simd128<128>::slli<(sh*128)>(arg1);
    2961 }
    2962 
    2963 //The total number of operations is 13
     2958        return mvmd128<(64)>::slli<(sh*2)>(arg1);
     2959}
     2960
     2961//The total number of operations is 13.0
    29642962template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8)
    29652963{
     
    29672965}
    29682966
    2969 //The total number of operations is 13
     2967//The total number of operations is 13.0
    29702968template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8)
    29712969{
     
    29732971}
    29742972
    2975 //The total number of operations is 7
     2973//The total number of operations is 7.0
    29762974template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8)
    29772975{
     
    29792977}
    29802978
    2981 //The total number of operations is 3
     2979//The total number of operations is 3.0
    29822980template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8)
    29832981{
     
    29852983}
    29862984
    2987 //The total number of operations is 1
     2985//The total number of operations is 1.0
    29882986template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill8(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4, uint64_t val5, uint64_t val6, uint64_t val7, uint64_t val8)
    29892987{
     
    29912989}
    29922990
    2993 //The total number of operations is 11
     2991//The total number of operations is 11.0
    29942992IDISA_ALWAYS_INLINE bitblock128_t bitblock128::sll(bitblock128_t arg1, bitblock128_t arg2)
    29952993{
     
    29972995}
    29982996
    2999 //The total number of operations is 1
     2997//The total number of operations is 1.0
    30002998IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_unaligned(bitblock128_t* arg1)
    30012999{
     
    30033001}
    30043002
    3005 //The total number of operations is 4
     3003//The total number of operations is 2.33333333333
    30063004template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srli(bitblock128_t arg1)
    30073005{
     
    30093007}
    30103008
    3011 //The total number of operations is 1
     3009//The total number of operations is 1.0
    30123010IDISA_ALWAYS_INLINE void bitblock128::store_aligned(bitblock128_t* arg1, bitblock128_t arg2)
    30133011{
     
    30153013}
    30163014
    3017 //The total number of operations is 20
     3015//The total number of operations is 18.3333333333
    30183016IDISA_ALWAYS_INLINE uint64_t bitblock128::popcount(bitblock128_t arg1)
    30193017{
     
    30213019}
    30223020
    3023 //The total number of operations is 2
     3021//The total number of operations is 2.0
    30243022IDISA_ALWAYS_INLINE bool bitblock128::all(bitblock128_t arg1)
    30253023{
     
    30273025}
    30283026
    3029 //The total number of operations is 11
     3027//The total number of operations is 11.0
    30303028IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srl(bitblock128_t arg1, bitblock128_t arg2)
    30313029{
     
    30333031}
    30343032
    3035 //The total number of operations is 4
     3033//The total number of operations is 2.33333333333
    30363034template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::slli(bitblock128_t arg1)
    30373035{
     
    30393037}
    30403038
    3041 //The total number of operations is 2
     3039//The total number of operations is 2.0
    30423040IDISA_ALWAYS_INLINE bool bitblock128::any(bitblock128_t arg1)
    30433041{
     
    30453043}
    30463044
    3047 //The total number of operations is 1
     3045//The total number of operations is 1.0
    30483046IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_aligned(bitblock128_t* arg1)
    30493047{
     
    30513049}
    30523050
    3053 //The total number of operations is 1
     3051//The total number of operations is 1.0
    30543052IDISA_ALWAYS_INLINE void bitblock128::store_unaligned(bitblock128_t* arg1, bitblock128_t arg2)
    30553053{
Note: See TracChangeset for help on using the changeset viewer.