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_sse3.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_SSE3_CPP
    29#define IDISA_SSE3_CPP
     
    494501#define shufflemask8_to_shufflemask4(msk) \
    495502        ((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))
    496 //The total number of operations is 2
     503//The total number of operations is 2.0
    497504IDISA_ALWAYS_INLINE bitblock128_t simd_nor(bitblock128_t arg1, bitblock128_t arg2)
    498505{
     
    500507}
    501508
    502 //The total number of operations is 1
     509//The total number of operations is 1.0
    503510IDISA_ALWAYS_INLINE bitblock128_t simd_not(bitblock128_t arg1)
    504511{
     
    506513}
    507514
    508 //The total number of operations is 1
     515//The total number of operations is 1.0
    509516IDISA_ALWAYS_INLINE bitblock128_t simd_andc(bitblock128_t arg1, bitblock128_t arg2)
    510517{
     
    512519}
    513520
    514 //The total number of operations is 1
     521//The total number of operations is 1.0
    515522IDISA_ALWAYS_INLINE bitblock128_t simd_or(bitblock128_t arg1, bitblock128_t arg2)
    516523{
     
    518525}
    519526
    520 //The total number of operations is 1
     527//The total number of operations is 1.0
    521528IDISA_ALWAYS_INLINE bitblock128_t simd_and(bitblock128_t arg1, bitblock128_t arg2)
    522529{
     
    524531}
    525532
    526 //The total number of operations is 1
     533//The total number of operations is 1.0
    527534IDISA_ALWAYS_INLINE bitblock128_t simd_xor(bitblock128_t arg1, bitblock128_t arg2)
    528535{
     
    530537}
    531538
    532 //The total number of operations is 1
     539//The total number of operations is 1.0
    533540template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::max(bitblock128_t arg1, bitblock128_t arg2)
    534541{
     
    536543}
    537544
    538 //The total number of operations is 18
     545//The total number of operations is 15.6666666667
    539546template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::max(bitblock128_t arg1, bitblock128_t arg2)
    540547{
    541         return simd128<1>::ifh(simd128<2>::lt(arg1, arg2), arg2, arg1);
    542 }
    543 
    544 //The total number of operations is 9
     548        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)))));
     549}
     550
     551//The total number of operations is 9.0
    545552template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::max(bitblock128_t arg1, bitblock128_t arg2)
    546553{
     
    549556}
    550557
    551 //The total number of operations is 4
     558//The total number of operations is 4.0
    552559template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::max(bitblock128_t arg1, bitblock128_t arg2)
    553560{
     
    555562}
    556563
    557 //The total number of operations is 1
     564//The total number of operations is 1.0
    558565template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::max(bitblock128_t arg1, bitblock128_t arg2)
    559566{
     
    561568}
    562569
    563 //The total number of operations is 4
     570//The total number of operations is 4.0
    564571template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::max(bitblock128_t arg1, bitblock128_t arg2)
    565572{
     
    567574}
    568575
    569 //The total number of operations is 18
     576//The total number of operations is 17.5
    570577template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2)
    571578{
     
    573580}
    574581
    575 //The total number of operations is 64
     582//The total number of operations is 54.75
    576583template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2)
    577584{
     
    579586}
    580587
    581 //The total number of operations is 1
     588//The total number of operations is 1.0
    582589template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::mult(bitblock128_t arg1, bitblock128_t arg2)
    583590{
     
    585592}
    586593
    587 //The total number of operations is 23
     594//The total number of operations is 19.6666666667
    588595template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::mult(bitblock128_t arg1, bitblock128_t arg2)
    589596{
     
    593600}
    594601
    595 //The total number of operations is 31
     602//The total number of operations is 31.0
    596603template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::mult(bitblock128_t arg1, bitblock128_t arg2)
    597604{
     
    602609}
    603610
    604 //The total number of operations is 10
     611//The total number of operations is 10.0
    605612template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::mult(bitblock128_t arg1, bitblock128_t arg2)
    606613{
     
    611618}
    612619
    613 //The total number of operations is 1
     620//The total number of operations is 1.0
    614621template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::mult(bitblock128_t arg1, bitblock128_t arg2)
    615622{
     
    617624}
    618625
    619 //The total number of operations is 30
     626//The total number of operations is 30.0
    620627template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::mult(bitblock128_t arg1, bitblock128_t arg2)
    621628{
     
    626633}
    627634
    628 //The total number of operations is 11
     635//The total number of operations is 11.0
    629636template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::mult(bitblock128_t arg1, bitblock128_t arg2)
    630637{
     
    640647}
    641648
    642 //The total number of operations is 205
     649//The total number of operations is 165.0
    643650template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::mult(bitblock128_t arg1, bitblock128_t arg2)
    644651{
     
    654661}
    655662
    656 //The total number of operations is 1
     663//The total number of operations is 1.0
    657664template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::gt(bitblock128_t arg1, bitblock128_t arg2)
    658665{
     
    660667}
    661668
    662 //The total number of operations is 15
     669//The total number of operations is 14.6666666667
    663670template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::gt(bitblock128_t arg1, bitblock128_t arg2)
    664671{
    665         bitblock128_t hiAns = simd128<(1)>::gt(arg1, arg2);
    666         bitblock128_t loAns = simd128<(1)>::ugt(arg1, arg2);
    667         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    668         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    669         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    670 }
    671 
    672 //The total number of operations is 10
     672        bitblock128_t tmp = simd_not(arg1);
     673        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)));
     674        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     675}
     676
     677//The total number of operations is 10.0
    673678template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::gt(bitblock128_t arg1, bitblock128_t arg2)
    674679{
     
    676681}
    677682
    678 //The total number of operations is 1
     683//The total number of operations is 1.0
    679684template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::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<16>::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<32>::gt(bitblock128_t arg1, bitblock128_t arg2)
    692697{
     
    694699}
    695700
    696 //The total number of operations is 15
     701//The total number of operations is 14.5
    697702template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2)
    698703{
     
    704709}
    705710
    706 //The total number of operations is 61
     711//The total number of operations is 51.75
    707712template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2)
    708713{
     
    714719}
    715720
    716 //The total number of operations is 289
     721//The total number of operations is 289.0
    717722template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umult(bitblock128_t arg1, bitblock128_t arg2)
    718723{
     
    723728}
    724729
    725 //The total number of operations is 139
     730//The total number of operations is 139.0
    726731template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umult(bitblock128_t arg1, bitblock128_t arg2)
    727732{
     
    732737}
    733738
    734 //The total number of operations is 64
     739//The total number of operations is 64.0
    735740template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umult(bitblock128_t arg1, bitblock128_t arg2)
    736741{
     
    741746}
    742747
    743 //The total number of operations is 28
     748//The total number of operations is 28.0
    744749template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umult(bitblock128_t arg1, bitblock128_t arg2)
    745750{
     
    750755}
    751756
    752 //The total number of operations is 10
     757//The total number of operations is 10.0
    753758template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umult(bitblock128_t arg1, bitblock128_t arg2)
    754759{
     
    759764}
    760765
    761 //The total number of operations is 1
     766//The total number of operations is 1.0
    762767template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umult(bitblock128_t arg1, bitblock128_t arg2)
    763768{
     
    765770}
    766771
    767 //The total number of operations is 55
     772//The total number of operations is 45.0
    768773template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umult(bitblock128_t arg1, bitblock128_t arg2)
    769774{
     
    783788}
    784789
    785 //The total number of operations is 1
     790//The total number of operations is 1.0
    786791template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ult(bitblock128_t arg1, bitblock128_t arg2)
    787792{
     
    789794}
    790795
    791 //The total number of operations is 14
     796//The total number of operations is 13.6666666667
    792797template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ult(bitblock128_t arg1, bitblock128_t arg2)
    793798{
    794         bitblock128_t tmpAns = simd128<(1)>::ult(arg1, arg2);
    795         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    796         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    797         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    798 }
    799 
    800 //The total number of operations is 20
     799        bitblock128_t tmp = simd_not(arg1);
     800        bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(tmp, arg2)), simd_or(tmp, arg2)));
     801        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     802}
     803
     804//The total number of operations is 20.0
    801805template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ult(bitblock128_t arg1, bitblock128_t arg2)
    802806{
     
    804808}
    805809
    806 //The total number of operations is 7
     810//The total number of operations is 7.0
    807811template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ult(bitblock128_t arg1, bitblock128_t arg2)
    808812{
     
    811815}
    812816
    813 //The total number of operations is 7
     817//The total number of operations is 7.0
    814818template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ult(bitblock128_t arg1, bitblock128_t arg2)
    815819{
     
    818822}
    819823
    820 //The total number of operations is 7
     824//The total number of operations is 7.0
    821825template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ult(bitblock128_t arg1, bitblock128_t arg2)
    822826{
     
    825829}
    826830
    827 //The total number of operations is 18
     831//The total number of operations is 17.5
    828832template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2)
    829833{
     
    834838}
    835839
    836 //The total number of operations is 50
     840//The total number of operations is 40.0833333333
    837841template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2)
    838842{
     
    840844}
    841845
    842 //The total number of operations is 1
     846//The total number of operations is 1.0
    843847template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::lt(bitblock128_t arg1, bitblock128_t arg2)
    844848{
     
    846850}
    847851
    848 //The total number of operations is 15
     852//The total number of operations is 14.6666666667
    849853template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::lt(bitblock128_t arg1, bitblock128_t arg2)
    850854{
    851         bitblock128_t hiAns = simd128<(1)>::lt(arg1, arg2);
    852         bitblock128_t loAns = simd128<(1)>::ult(arg1, arg2);
    853         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    854         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    855         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    856 }
    857 
    858 //The total number of operations is 18
     855        bitblock128_t tmp = simd_not(arg2);
     856        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)));
     857        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     858}
     859
     860//The total number of operations is 18.0
    859861template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::lt(bitblock128_t arg1, bitblock128_t arg2)
    860862{
     
    862864}
    863865
    864 //The total number of operations is 5
     866//The total number of operations is 5.0
    865867template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::lt(bitblock128_t arg1, bitblock128_t arg2)
    866868{
     
    868870}
    869871
    870 //The total number of operations is 5
     872//The total number of operations is 5.0
    871873template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::lt(bitblock128_t arg1, bitblock128_t arg2)
    872874{
     
    874876}
    875877
    876 //The total number of operations is 5
     878//The total number of operations is 5.0
    877879template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::lt(bitblock128_t arg1, bitblock128_t arg2)
    878880{
     
    880882}
    881883
    882 //The total number of operations is 20
     884//The total number of operations is 19.5
    883885template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2)
    884886{
     
    887889}
    888890
    889 //The total number of operations is 70
     891//The total number of operations is 60.75
    890892template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2)
    891893{
     
    897899}
    898900
    899 //The total number of operations is 2
     901//The total number of operations is 2.0
    900902template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srli(bitblock128_t arg1)
    901903{
     
    903905}
    904906
    905 //The total number of operations is 2
     907//The total number of operations is 2.0
    906908template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srli(bitblock128_t arg1)
    907909{
     
    909911}
    910912
    911 //The total number of operations is 2
     913//The total number of operations is 2.0
    912914template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srli(bitblock128_t arg1)
    913915{
     
    915917}
    916918
    917 //The total number of operations is 1
     919//The total number of operations is 1.0
    918920template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srli(bitblock128_t arg1)
    919921{
     
    921923}
    922924
    923 //The total number of operations is 1
     925//The total number of operations is 1.0
    924926template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srli(bitblock128_t arg1)
    925927{
     
    927929}
    928930
    929 //The total number of operations is 1
     931//The total number of operations is 1.0
    930932template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srli(bitblock128_t arg1)
    931933{
     
    933935}
    934936
    935 //The total number of operations is 4
     937//The total number of operations is 2.33333333333
    936938template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srli(bitblock128_t arg1)
    937939{
     
    939941}
    940942
    941 //The total number of operations is 1
     943//The total number of operations is 1.0
    942944template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ctz(bitblock128_t arg1)
    943945{
     
    945947}
    946948
    947 //The total number of operations is 14
     949//The total number of operations is 10.6666666667
    948950template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ctz(bitblock128_t arg1)
    949951{
     
    952954}
    953955
    954 //The total number of operations is 14
     956//The total number of operations is 14.0
    955957template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ctz(bitblock128_t arg1)
    956958{
     
    958960}
    959961
    960 //The total number of operations is 13
     962//The total number of operations is 13.0
    961963template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ctz(bitblock128_t arg1)
    962964{
     
    964966}
    965967
    966 //The total number of operations is 16
     968//The total number of operations is 16.0
    967969template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ctz(bitblock128_t arg1)
    968970{
     
    970972}
    971973
    972 //The total number of operations is 19
     974//The total number of operations is 19.0
    973975template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ctz(bitblock128_t arg1)
    974976{
     
    976978}
    977979
    978 //The total number of operations is 14
     980//The total number of operations is 14.0
    979981template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ctz(bitblock128_t arg1)
    980982{
     
    982984}
    983985
    984 //The total number of operations is 30
     986//The total number of operations is 26.6666666667
    985987template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ctz(bitblock128_t arg1)
    986988{
     
    988990}
    989991
    990 //The total number of operations is 7
     992//The total number of operations is 7.0
    991993template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sll(bitblock128_t arg1, bitblock128_t shift_mask)
    992994{
     
    994996}
    995997
    996 //The total number of operations is 11
     998//The total number of operations is 11.0
    997999template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sll(bitblock128_t arg1, bitblock128_t shift_mask)
    9981000{
     
    10001002}
    10011003
    1002 //The total number of operations is 1
     1004//The total number of operations is 1.0
    10031005template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10041006{
     
    10061008}
    10071009
    1008 //The total number of operations is 14
     1010//The total number of operations is 13.6666666667
    10091011template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10101012{
    1011         bitblock128_t tmpAns = simd128<(1)>::ugt(arg1, arg2);
    1012         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    1013         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    1014         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    1015 }
    1016 
    1017 //The total number of operations is 12
     1013        bitblock128_t tmp = simd_not(arg2);
     1014        bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(arg1, tmp)), simd_or(arg1, tmp)));
     1015        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     1016}
     1017
     1018//The total number of operations is 12.0
    10181019template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10191020{
     
    10211022}
    10221023
    1023 //The total number of operations is 3
     1024//The total number of operations is 3.0
    10241025template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10251026{
     
    10281029}
    10291030
    1030 //The total number of operations is 3
     1031//The total number of operations is 3.0
    10311032template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10321033{
     
    10351036}
    10361037
    1037 //The total number of operations is 3
     1038//The total number of operations is 3.0
    10381039template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10391040{
     
    10421043}
    10431044
    1044 //The total number of operations is 14
     1045//The total number of operations is 13.5
    10451046template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    10461047{
     
    10511052}
    10521053
    1053 //The total number of operations is 46
     1054//The total number of operations is 37.25
    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 4
     1256//The total number of operations is 4.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 8
     1274//The total number of operations is 8.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 15
     1280//The total number of operations is 13.3333333333
    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 4
     1461//The total number of operations is 4.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 4
     1473//The total number of operations is 4.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 18
     1479//The total number of operations is 17.5
    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 64
     1485//The total number of operations is 54.75
    14831486template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2)
    14841487{
     
    15281531}
    15291532
    1530 //The total number of operations is 1
     1533//The total number of operations is 1.0
    15311534template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15321535{
     
    15341537}
    15351538
    1536 //The total number of operations is 16
     1539//The total number of operations is 16.0
    15371540template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15381541{
     
    15401543}
    15411544
    1542 //The total number of operations is 6
     1545//The total number of operations is 6.0
    15431546template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15441547{
     
    15461549}
    15471550
    1548 //The total number of operations is 1
     1551//The total number of operations is 1.0
    15491552template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15501553{
     
    15521555}
    15531556
    1554 //The total number of operations is 4
     1557//The total number of operations is 4.0
    15551558template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15561559{
     
    15591562}
    15601563
    1561 //The total number of operations is 7
     1564//The total number of operations is 7.0
    15621565template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15631566{
     
    15661569}
    15671570
    1568 //The total number of operations is 20
     1571//The total number of operations is 20.0
    15691572template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umin(bitblock128_t arg1, bitblock128_t arg2)
    15701573{
     
    15751578}
    15761579
    1577 //The total number of operations is 47
     1580//The total number of operations is 43.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 5
     1602//The total number of operations is 5.0
    16001603template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::abs(bitblock128_t arg1)
    16011604{
     
    16041607}
    16051608
    1606 //The total number of operations is 5
     1609//The total number of operations is 5.0
    16071610template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::abs(bitblock128_t arg1)
    16081611{
     
    16111614}
    16121615
    1613 //The total number of operations is 5
     1616//The total number of operations is 5.0
    16141617template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::abs(bitblock128_t arg1)
    16151618{
     
    16181621}
    16191622
    1620 //The total number of operations is 17
     1623//The total number of operations is 17.0
    16211624template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::abs(bitblock128_t arg1)
    16221625{
     
    16251628}
    16261629
    1627 //The total number of operations is 49
     1630//The total number of operations is 44.0
    16281631template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::abs(bitblock128_t arg1)
    16291632{
     
    16321635}
    16331636
    1634 //The total number of operations is 2
     1637//The total number of operations is 2.0
    16351638template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16361639{
     
    16381641}
    16391642
    1640 //The total number of operations is 8
     1643//The total number of operations is 8.0
    16411644template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16421645{
     
    16471650}
    16481651
    1649 //The total number of operations is 9
     1652//The total number of operations is 9.0
    16501653template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16511654{
     
    16531656}
    16541657
    1655 //The total number of operations is 1
     1658//The total number of operations is 1.0
    16561659template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16571660{
     
    16591662}
    16601663
    1661 //The total number of operations is 1
     1664//The total number of operations is 1.0
    16621665template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16631666{
     
    16651668}
    16661669
    1667 //The total number of operations is 1
     1670//The total number of operations is 1.0
    16681671template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16691672{
     
    16711674}
    16721675
    1673 //The total number of operations is 5
     1676//The total number of operations is 5.0
    16741677template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16751678{
     
    16801683}
    16811684
    1682 //The total number of operations is 15
     1685//The total number of operations is 11.6666666667
    16831686template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::eq(bitblock128_t arg1, bitblock128_t arg2)
    16841687{
     
    16891692}
    16901693
    1691 //The total number of operations is 4
     1694//The total number of operations is 4.0
    16921695template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srai(bitblock128_t arg1)
    16931696{
     
    16951698}
    16961699
    1697 //The total number of operations is 10
     1700//The total number of operations is 10.0
    16981701template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srai(bitblock128_t arg1)
    16991702{
     
    17021705}
    17031706
    1704 //The total number of operations is 5
     1707//The total number of operations is 5.0
    17051708template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srai(bitblock128_t arg1)
    17061709{
     
    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<16>::srai(bitblock128_t arg1)
    17131716{
     
    17151718}
    17161719
    1717 //The total number of operations is 1
     1720//The total number of operations is 1.0
    17181721template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srai(bitblock128_t arg1)
    17191722{
     
    17211724}
    17221725
    1723 //The total number of operations is 5
     1726//The total number of operations is 4.5
    17241727template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1)
    17251728{
     
    17271730}
    17281731
    1729 //The total number of operations is 16
     1732//The total number of operations is 11.0833333333
    17301733template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1)
    17311734{
     
    17751778}
    17761779
    1777 //The total number of operations is 1
     1780//The total number of operations is 1.0
    17781781template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::add(bitblock128_t arg1, bitblock128_t arg2)
    17791782{
     
    17811784}
    17821785
    1783 //The total number of operations is 10
     1786//The total number of operations is 8.33333333333
    17841787template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add(bitblock128_t arg1, bitblock128_t arg2)
    17851788{
     
    17881791}
    17891792
    1790 //The total number of operations is 6
     1793//The total number of operations is 6.0
    17911794template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::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<8>::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<16>::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<32>::add(bitblock128_t arg1, bitblock128_t arg2)
    18101813{
     
    18121815}
    18131816
    1814 //The total number of operations is 1
     1817//The total number of operations is 1.0
    18151818template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add(bitblock128_t arg1, bitblock128_t arg2)
    18161819{
     
    18181821}
    18191822
    1820 //The total number of operations is 11
     1823//The total number of operations is 9.33333333333
    18211824template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add(bitblock128_t arg1, bitblock128_t arg2)
    18221825{
     
    18271830}
    18281831
    1829 //The total number of operations is 1
     1832//The total number of operations is 1.0
    18301833template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18311834{
     
    18331836}
    18341837
    1835 //The total number of operations is 16
     1838//The total number of operations is 15.6666666667
    18361839template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18371840{
    1838         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)));
    1839 }
    1840 
    1841 //The total number of operations is 6
     1841        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))))));
     1842}
     1843
     1844//The total number of operations is 6.0
    18421845template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::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<8>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18491852{
     
    18511854}
    18521855
    1853 //The total number of operations is 4
     1856//The total number of operations is 4.0
    18541857template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18551858{
     
    18581861}
    18591862
    1860 //The total number of operations is 7
     1863//The total number of operations is 7.0
    18611864template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18621865{
     
    18651868}
    18661869
    1867 //The total number of operations is 20
     1870//The total number of operations is 20.0
    18681871template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18691872{
     
    18741877}
    18751878
    1876 //The total number of operations is 47
     1879//The total number of operations is 43.6666666667
    18771880template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umax(bitblock128_t arg1, bitblock128_t arg2)
    18781881{
     
    18831886}
    18841887
    1885 //The total number of operations is 93
     1888//The total number of operations is 73.0
    18861889template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18871890{
     
    18891892}
    18901893
    1891 //The total number of operations is 80
     1894//The total number of operations is 66.6666666667
    18921895template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18931896{
     
    18951898}
    18961899
    1897 //The total number of operations is 42
     1900//The total number of operations is 35.3333333333
    18981901template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18991902{
     
    19011904}
    19021905
    1903 //The total number of operations is 7
     1906//The total number of operations is 7.0
    19041907template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19051908{
     
    19071910}
    19081911
    1909 //The total number of operations is 44
     1912//The total number of operations is 37.3333333333
    19101913template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19111914{
     
    19131916}
    19141917
    1915 //The total number of operations is 19
     1918//The total number of operations is 19.0
    19161919template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19171920{
     
    19191922}
    19201923
    1921 //The total number of operations is 34
     1924//The total number of operations is 30.6666666667
    19221925template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    19231926{
     
    19251928}
    19261929
    1927 //The total number of operations is 93
     1930//The total number of operations is 73.0
    19281931template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19291932{
     
    19311934}
    19321935
    1933 //The total number of operations is 74
     1936//The total number of operations is 59.0
    19341937template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19351938{
     
    19371940}
    19381941
    1939 //The total number of operations is 42
     1942//The total number of operations is 35.3333333333
    19401943template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19411944{
     
    19431946}
    19441947
    1945 //The total number of operations is 7
     1948//The total number of operations is 7.0
    19461949template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19471950{
     
    19491952}
    19501953
    1951 //The total number of operations is 41
     1954//The total number of operations is 34.3333333333
    19521955template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19531956{
     
    19551958}
    19561959
    1957 //The total number of operations is 13
     1960//The total number of operations is 13.0
    19581961template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19591962{
     
    19611964}
    19621965
    1963 //The total number of operations is 15
     1966//The total number of operations is 11.6666666667
    19641967template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    19651968{
     
    19671970}
    19681971
    1969 //The total number of operations is 120
     1972//The total number of operations is 108.666666667
    19701973template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19711974{
     
    19751978}
    19761979
    1977 //The total number of operations is 86
     1980//The total number of operations is 79.3333333333
    19781981template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19791982{
     
    19831986}
    19841987
    1985 //The total number of operations is 36
     1988//The total number of operations is 32.6666666667
    19861989template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19871990{
     
    19911994}
    19921995
    1993 //The total number of operations is 1
     1996//The total number of operations is 1.0
    19941997template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19951998{
     
    19972000}
    19982001
    1999 //The total number of operations is 1
     2002//The total number of operations is 1.0
    20002003template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packss(bitblock128_t arg1, bitblock128_t arg2)
    20012004{
     
    20032006}
    20042007
    2005 //The total number of operations is 79
     2008//The total number of operations is 77.0
    20062009template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2)
    20072010{
     
    20112014}
    20122015
    2013 //The total number of operations is 268
     2016//The total number of operations is 227.666666667
    20142017template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2)
    20152018{
     
    20192022}
    20202023
    2021 //The total number of operations is 24
     2024//The total number of operations is 24.0
    20222025template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<4>::signmask(bitblock128_t arg1)
    20232026{
     
    20272030}
    20282031
    2029 //The total number of operations is 1
     2032//The total number of operations is 1.0
    20302033template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<8>::signmask(bitblock128_t arg1)
    20312034{
     
    20332036}
    20342037
    2035 //The total number of operations is 4
     2038//The total number of operations is 4.0
    20362039template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<16>::signmask(bitblock128_t arg1)
    20372040{
     
    20392042}
    20402043
    2041 //The total number of operations is 8
     2044//The total number of operations is 8.0
    20422045template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<32>::signmask(bitblock128_t arg1)
    20432046{
     
    20452048}
    20462049
    2047 //The total number of operations is 8
     2050//The total number of operations is 8.0
    20482051template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<64>::signmask(bitblock128_t arg1)
    20492052{
     
    20512054}
    20522055
    2053 //The total number of operations is 15
     2056//The total number of operations is 13.3333333333
    20542057template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<128>::signmask(bitblock128_t arg1)
    20552058{
     
    20572060}
    20582061
    2059 //The total number of operations is 45
     2062//The total number of operations is 35.0
    20602063template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20612064{
     
    20632066}
    20642067
    2065 //The total number of operations is 31
     2068//The total number of operations is 24.3333333333
    20662069template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20672070{
     
    20692072}
    20702073
    2071 //The total number of operations is 17
     2074//The total number of operations is 13.6666666667
    20722075template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20732076{
     
    20752078}
    20762079
    2077 //The total number of operations is 3
     2080//The total number of operations is 3.0
    20782081template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20792082{
     
    20812084}
    20822085
    2083 //The total number of operations is 19
     2086//The total number of operations is 15.6666666667
    20842087template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20852088{
     
    20872090}
    20882091
    2089 //The total number of operations is 5
     2092//The total number of operations is 5.0
    20902093template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20912094{
     
    20932096}
    20942097
    2095 //The total number of operations is 7
     2098//The total number of operations is 5.33333333333
    20962099template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packl(bitblock128_t arg1, bitblock128_t arg2)
    20972100{
     
    20992102}
    21002103
    2101 //The total number of operations is 47
     2104//The total number of operations is 37.0
    21022105template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21032106{
     
    21052108}
    21062109
    2107 //The total number of operations is 33
     2110//The total number of operations is 26.3333333333
    21082111template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21092112{
     
    21112114}
    21122115
    2113 //The total number of operations is 19
     2116//The total number of operations is 15.6666666667
    21142117template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21152118{
     
    21172120}
    21182121
    2119 //The total number of operations is 3
     2122//The total number of operations is 3.0
    21202123template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21212124{
     
    21232126}
    21242127
    2125 //The total number of operations is 21
     2128//The total number of operations is 17.6666666667
    21262129template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21272130{
     
    21292132}
    21302133
    2131 //The total number of operations is 7
     2134//The total number of operations is 7.0
    21322135template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21332136{
     
    21352138}
    21362139
    2137 //The total number of operations is 7
     2140//The total number of operations is 5.33333333333
    21382141template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packh(bitblock128_t arg1, bitblock128_t arg2)
    21392142{
     
    21412144}
    21422145
    2143 //The total number of operations is 93
     2146//The total number of operations is 73.0
    21442147template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21452148{
     
    21472150}
    21482151
    2149 //The total number of operations is 82
     2152//The total number of operations is 67.3333333333
    21502153template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21512154{
     
    21532156}
    21542157
    2155 //The total number of operations is 45
     2158//The total number of operations is 38.3333333333
    21562159template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21572160{
     
    21592162}
    21602163
    2161 //The total number of operations is 10
     2164//The total number of operations is 10.0
    21622165template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21632166{
     
    21652168}
    21662169
    2167 //The total number of operations is 41
     2170//The total number of operations is 34.3333333333
    21682171template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21692172{
     
    21712174}
    21722175
    2173 //The total number of operations is 16
     2176//The total number of operations is 16.0
    21742177template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21752178{
     
    21772180}
    21782181
    2179 //The total number of operations is 32
     2182//The total number of operations is 28.1666666667
    21802183template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    21812184{
     
    21832186}
    21842187
    2185 //The total number of operations is 85
     2188//The total number of operations is 75.0
    21862189template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21872190{
     
    21932196}
    21942197
    2195 //The total number of operations is 83
     2198//The total number of operations is 74.3333333333
    21962199template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21972200{
    2198         bitblock128_t arg11 = simd128<4>::ifh(arg1, simd128<4>::constant<0>(), arg1);
    2199         bitblock128_t arg12 = simd_and(simd128<4>::lomask(), arg11);
    2200         bitblock128_t arg21 = simd128<4>::ifh(arg2, simd128<4>::constant<0>(), arg2);
    2201         bitblock128_t arg22 = simd_and(simd128<4>::lomask(), arg21);
    2202         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()));
    2203 }
    2204 
    2205 //The total number of operations is 35
     2201        bitblock128_t hiPart = hsimd128<4>::packh(arg1, arg2);
     2202        return simd128<(2)>::ifh(hiPart, simd128<(2)>::constant<0>(), simd_or(simd128<(2)>::gt(hiPart, simd128<(2)>::constant<0>()), hsimd128<4>::packl(arg1, arg2)));
     2203}
     2204
     2205//The total number of operations is 31.6666666667
    22062206template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22072207{
     
    22132213}
    22142214
    2215 //The total number of operations is 1
     2215//The total number of operations is 1.0
    22162216template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22172217{
     
    22192219}
    22202220
    2221 //The total number of operations is 37
     2221//The total number of operations is 33.6666666667
    22222222template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22232223{
     
    22292229}
    22302230
    2231 //The total number of operations is 18
     2231//The total number of operations is 18.0
    22322232template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22332233{
     
    22362236}
    22372237
    2238 //The total number of operations is 38
     2238//The total number of operations is 34.1666666667
    22392239template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2)
    22402240{
     
    22432243}
    22442244
    2245 //The total number of operations is 31
     2245//The total number of operations is 31.0
    22462246template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22472247{
     
    22492249}
    22502250
    2251 //The total number of operations is 21
     2251//The total number of operations is 21.0
    22522252template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22532253{
     
    22552255}
    22562256
    2257 //The total number of operations is 11
     2257//The total number of operations is 11.0
    22582258template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22592259{
     
    22612261}
    22622262
    2263 //The total number of operations is 1
     2263//The total number of operations is 1.0
    22642264template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22652265{
     
    22672267}
    22682268
    2269 //The total number of operations is 1
     2269//The total number of operations is 1.0
    22702270template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22712271{
     
    22732273}
    22742274
    2275 //The total number of operations is 1
     2275//The total number of operations is 1.0
    22762276template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22772277{
     
    22792279}
    22802280
    2281 //The total number of operations is 1
     2281//The total number of operations is 1.0
    22822282template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    22832283{
     
    22852285}
    22862286
    2287 //The total number of operations is 31
     2287//The total number of operations is 31.0
    22882288template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22892289{
     
    22912291}
    22922292
    2293 //The total number of operations is 21
     2293//The total number of operations is 21.0
    22942294template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22952295{
     
    22972297}
    22982298
    2299 //The total number of operations is 11
     2299//The total number of operations is 11.0
    23002300template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23012301{
     
    23032303}
    23042304
    2305 //The total number of operations is 1
     2305//The total number of operations is 1.0
    23062306template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23072307{
     
    23092309}
    23102310
    2311 //The total number of operations is 1
     2311//The total number of operations is 1.0
    23122312template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23132313{
     
    23152315}
    23162316
    2317 //The total number of operations is 1
     2317//The total number of operations is 1.0
    23182318template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23192319{
     
    23212321}
    23222322
    2323 //The total number of operations is 1
     2323//The total number of operations is 1.0
    23242324template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    23252325{
     
    23272327}
    23282328
    2329 //The total number of operations is 24
     2329//The total number of operations is 24.0
    23302330template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendh(bitblock128_t arg1)
    23312331{
     
    23332333}
    23342334
    2335 //The total number of operations is 14
     2335//The total number of operations is 14.0
    23362336template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendh(bitblock128_t arg1)
    23372337{
     
    23392339}
    23402340
    2341 //The total number of operations is 4
     2341//The total number of operations is 4.0
    23422342template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendh(bitblock128_t arg1)
    23432343{
     
    23452345}
    23462346
    2347 //The total number of operations is 3
     2347//The total number of operations is 3.0
    23482348template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendh(bitblock128_t arg1)
    23492349{
     
    23512351}
    23522352
    2353 //The total number of operations is 3
     2353//The total number of operations is 3.0
    23542354template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendh(bitblock128_t arg1)
    23552355{
     
    23572357}
    23582358
    2359 //The total number of operations is 3
     2359//The total number of operations is 3.0
    23602360template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendh(bitblock128_t arg1)
    23612361{
     
    23632363}
    23642364
    2365 //The total number of operations is 4
     2365//The total number of operations is 2.33333333333
    23662366template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendh(bitblock128_t arg1)
    23672367{
     
    23692369}
    23702370
    2371 //The total number of operations is 24
     2371//The total number of operations is 24.0
    23722372template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendl(bitblock128_t arg1)
    23732373{
     
    23752375}
    23762376
    2377 //The total number of operations is 14
     2377//The total number of operations is 14.0
    23782378template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendl(bitblock128_t arg1)
    23792379{
     
    23812381}
    23822382
    2383 //The total number of operations is 4
     2383//The total number of operations is 4.0
    23842384template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendl(bitblock128_t arg1)
    23852385{
     
    23872387}
    23882388
    2389 //The total number of operations is 3
     2389//The total number of operations is 3.0
    23902390template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendl(bitblock128_t arg1)
    23912391{
     
    23932393}
    23942394
    2395 //The total number of operations is 3
     2395//The total number of operations is 3.0
    23962396template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendl(bitblock128_t arg1)
    23972397{
     
    23992399}
    24002400
    2401 //The total number of operations is 3
     2401//The total number of operations is 3.0
    24022402template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendl(bitblock128_t arg1)
    24032403{
     
    24052405}
    24062406
    2407 //The total number of operations is 1
     2407//The total number of operations is 1.0
    24082408template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendl(bitblock128_t arg1)
    24092409{
     
    24112411}
    24122412
    2413 //The total number of operations is 31
     2413//The total number of operations is 31.0
    24142414template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendh(bitblock128_t arg1)
    24152415{
     
    24172417}
    24182418
    2419 //The total number of operations is 33
     2419//The total number of operations is 33.0
    24202420template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendh(bitblock128_t arg1)
    24212421{
     
    24232423}
    24242424
    2425 //The total number of operations is 13
     2425//The total number of operations is 13.0
    24262426template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendh(bitblock128_t arg1)
    24272427{
     
    24292429}
    24302430
    2431 //The total number of operations is 4
     2431//The total number of operations is 4.0
    24322432template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendh(bitblock128_t arg1)
    24332433{
     
    24352435}
    24362436
    2437 //The total number of operations is 4
     2437//The total number of operations is 4.0
    24382438template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendh(bitblock128_t arg1)
    24392439{
     
    24412441}
    24422442
    2443 //The total number of operations is 12
     2443//The total number of operations is 11.0
    24442444template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1)
    24452445{
     
    24472447}
    24482448
    2449 //The total number of operations is 16
     2449//The total number of operations is 11.0833333333
    24502450template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1)
    24512451{
     
    24532453}
    24542454
    2455 //The total number of operations is 31
     2455//The total number of operations is 31.0
    24562456template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendl(bitblock128_t arg1)
    24572457{
     
    24592459}
    24602460
    2461 //The total number of operations is 33
     2461//The total number of operations is 33.0
    24622462template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendl(bitblock128_t arg1)
    24632463{
     
    24652465}
    24662466
    2467 //The total number of operations is 13
     2467//The total number of operations is 13.0
    24682468template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendl(bitblock128_t arg1)
    24692469{
     
    24712471}
    24722472
    2473 //The total number of operations is 4
     2473//The total number of operations is 4.0
    24742474template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendl(bitblock128_t arg1)
    24752475{
     
    24772477}
    24782478
    2479 //The total number of operations is 4
     2479//The total number of operations is 4.0
    24802480template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendl(bitblock128_t arg1)
    24812481{
     
    24832483}
    24842484
    2485 //The total number of operations is 12
     2485//The total number of operations is 11.0
    24862486template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1)
    24872487{
     
    24892489}
    24902490
    2491 //The total number of operations is 20
     2491//The total number of operations is 13.4166666667
    24922492template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1)
    24932493{
     
    24952495}
    24962496
    2497 //The total number of operations is 17
     2497//The total number of operations is 13.6666666667
    24982498template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::shufflei(bitblock128_t arg1)
    24992499{
     
    25132513}
    25142514
    2515 //The total number of operations is 1
     2515//The total number of operations is 1.0
    25162516template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::shufflei(bitblock128_t arg1)
    25172517{
     
    25192519}
    25202520
    2521 //The total number of operations is 1
     2521//The total number of operations is 1.0
    25222522template <> template <uint64_t msk> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::shufflei(bitblock128_t arg1)
    25232523{
     
    25252525}
    25262526
    2527 //The total number of operations is 9
     2527//The total number of operations is 5.66666666667
    25282528template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25292529{
     
    25312531}
    25322532
    2533 //The total number of operations is 9
     2533//The total number of operations is 5.66666666667
    25342534template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25352535{
     
    25372537}
    25382538
    2539 //The total number of operations is 9
     2539//The total number of operations is 3.0
    25402540template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25412541{
     
    25432543}
    25442544
    2545 //The total number of operations is 9
     2545//The total number of operations is 3.0
    25462546template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25472547{
     
    25492549}
    25502550
    2551 //The total number of operations is 9
     2551//The total number of operations is 3.0
    25522552template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25532553{
     
    25552555}
    25562556
    2557 //The total number of operations is 9
     2557//The total number of operations is 3.0
    25582558template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25592559{
     
    25612561}
    25622562
    2563 //The total number of operations is 9
     2563//The total number of operations is 3.0
    25642564template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    25652565{
     
    25672567}
    25682568
    2569 //The total number of operations is 1
     2569//The total number of operations is 1.0
    25702570template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill(uint64_t val1)
    25712571{
     
    25732573}
    25742574
    2575 //The total number of operations is 1
     2575//The total number of operations is 1.0
    25762576template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill(uint64_t val1)
    25772577{
     
    25792579}
    25802580
    2581 //The total number of operations is 1
     2581//The total number of operations is 1.0
    25822582template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill(uint64_t val1)
    25832583{
     
    25852585}
    25862586
    2587 //The total number of operations is 1
     2587//The total number of operations is 1.0
    25882588template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill(uint64_t val1)
    25892589{
     
    25912591}
    25922592
    2593 //The total number of operations is 1
     2593//The total number of operations is 1.0
    25942594template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill(uint64_t val1)
    25952595{
     
    25972597}
    25982598
    2599 //The total number of operations is 1
     2599//The total number of operations is 1.0
    26002600template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill(uint64_t val1)
    26012601{
     
    26032603}
    26042604
    2605 //The total number of operations is 1
     2605//The total number of operations is 1.0
    26062606template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill(uint64_t val1)
    26072607{
     
    26092609}
    26102610
    2611 //The total number of operations is 1
     2611//The total number of operations is 1.0
    26122612template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::fill(uint64_t val1)
    26132613{
     
    26152615}
    26162616
    2617 //The total number of operations is 1
     2617//The total number of operations is 1.0
    26182618template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<1>::extract(bitblock128_t arg1)
    26192619{
     
    26212621}
    26222622
    2623 //The total number of operations is 1
     2623//The total number of operations is 1.0
    26242624template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<2>::extract(bitblock128_t arg1)
    26252625{
     
    26272627}
    26282628
    2629 //The total number of operations is 1
     2629//The total number of operations is 1.0
    26302630template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<4>::extract(bitblock128_t arg1)
    26312631{
     
    26332633}
    26342634
    2635 //The total number of operations is 1
     2635//The total number of operations is 1.0
    26362636template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<8>::extract(bitblock128_t arg1)
    26372637{
     
    26392639}
    26402640
    2641 //The total number of operations is 1
     2641//The total number of operations is 1.0
    26422642template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<16>::extract(bitblock128_t arg1)
    26432643{
     
    26452645}
    26462646
    2647 //The total number of operations is 2
     2647//The total number of operations is 2.0
    26482648template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<32>::extract(bitblock128_t arg1)
    26492649{
     
    26512651}
    26522652
    2653 //The total number of operations is 4
     2653//The total number of operations is 4.0
    26542654template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd128<64>::extract(bitblock128_t arg1)
    26552655{
     
    26572657}
    26582658
    2659 //The total number of operations is 16
     2659//The total number of operations is 12.6666666667
    26602660template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::splat(bitblock128_t arg1)
    26612661{
     
    26632663}
    26642664
    2665 //The total number of operations is 13
     2665//The total number of operations is 13.0
    26662666template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::splat(bitblock128_t arg1)
    26672667{
     
    26712671}
    26722672
    2673 //The total number of operations is 9
     2673//The total number of operations is 9.0
    26742674template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::splat(bitblock128_t arg1)
    26752675{
     
    26792679}
    26802680
    2681 //The total number of operations is 5
     2681//The total number of operations is 5.0
    26822682template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::splat(bitblock128_t arg1)
    26832683{
     
    26872687}
    26882688
    2689 //The total number of operations is 2
     2689//The total number of operations is 2.0
    26902690template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::splat(bitblock128_t arg1)
    26912691{
     
    26932693}
    26942694
    2695 //The total number of operations is 1
     2695//The total number of operations is 1.0
    26962696template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::splat(bitblock128_t arg1)
    26972697{
     
    26992699}
    27002700
    2701 //The total number of operations is 5
     2701//The total number of operations is 5.0
    27022702template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::splat(bitblock128_t arg1)
    27032703{
     
    27052705}
    27062706
    2707 //The total number of operations is 13
     2707//The total number of operations is 13.0
    27082708template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::splat(bitblock128_t arg1)
    27092709{
     
    27112711}
    27122712
    2713 //The total number of operations is 15
     2713//The total number of operations is 15.0
    27142714template <> 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)
    27152715{
     
    27172717}
    27182718
    2719 //The total number of operations is 7
     2719//The total number of operations is 7.0
    27202720template <> 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)
    27212721{
     
    27232723}
    27242724
    2725 //The total number of operations is 3
     2725//The total number of operations is 3.0
    27262726template <> 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)
    27272727{
     
    27292729}
    27302730
    2731 //The total number of operations is 1
     2731//The total number of operations is 1.0
    27322732template <> 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)
    27332733{
     
    27352735}
    27362736
    2737 //The total number of operations is 5
     2737//The total number of operations is 5.0
    27382738template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27392739{
     
    27412741}
    27422742
    2743 //The total number of operations is 5
     2743//The total number of operations is 5.0
    27442744template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27452745{
     
    27472747}
    27482748
    2749 //The total number of operations is 5
     2749//The total number of operations is 5.0
    27502750template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27512751{
     
    27532753}
    27542754
    2755 //The total number of operations is 5
     2755//The total number of operations is 5.0
    27562756template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27572757{
     
    27592759}
    27602760
    2761 //The total number of operations is 3
     2761//The total number of operations is 3.0
    27622762template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27632763{
     
    27652765}
    27662766
    2767 //The total number of operations is 1
     2767//The total number of operations is 1.0
    27682768template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    27692769{
     
    27712771}
    27722772
    2773 //The total number of operations is 4
     2773//The total number of operations is 2.33333333333
    27742774template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::srli(bitblock128_t arg1)
    27752775{
     
    27772777}
    27782778
    2779 //The total number of operations is 4
     2779//The total number of operations is 2.33333333333
    27802780template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::srli(bitblock128_t arg1)
    27812781{
     
    27832783}
    27842784
    2785 //The total number of operations is 4
     2785//The total number of operations is 1.0
    27862786template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::srli(bitblock128_t arg1)
    27872787{
    2788         return simd128<128>::srli<(sh*8)>(arg1);
    2789 }
    2790 
    2791 //The total number of operations is 4
     2788        return _mm_srli_si128(arg1, (int32_t)(sh));
     2789}
     2790
     2791//The total number of operations is 1.0
    27922792template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::srli(bitblock128_t arg1)
    27932793{
    2794         return simd128<128>::srli<(sh*16)>(arg1);
    2795 }
    2796 
    2797 //The total number of operations is 4
     2794        return mvmd128<(8)>::srli<(sh*2)>(arg1);
     2795}
     2796
     2797//The total number of operations is 1.0
    27982798template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::srli(bitblock128_t arg1)
    27992799{
    2800         return simd128<128>::srli<(sh*32)>(arg1);
    2801 }
    2802 
    2803 //The total number of operations is 4
     2800        return mvmd128<(16)>::srli<(sh*2)>(arg1);
     2801}
     2802
     2803//The total number of operations is 1.0
    28042804template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::srli(bitblock128_t arg1)
    28052805{
    2806         return simd128<128>::srli<(sh*64)>(arg1);
    2807 }
    2808 
    2809 //The total number of operations is 4
     2806        return mvmd128<(32)>::srli<(sh*2)>(arg1);
     2807}
     2808
     2809//The total number of operations is 1.0
    28102810template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::srli(bitblock128_t arg1)
    28112811{
    2812         return simd128<128>::srli<(sh*128)>(arg1);
    2813 }
    2814 
    2815 //The total number of operations is 1
     2812        return mvmd128<(64)>::srli<(sh*2)>(arg1);
     2813}
     2814
     2815//The total number of operations is 1.0
    28162816template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<1>::fill2(uint64_t val1, uint64_t val2)
    28172817{
     
    28192819}
    28202820
    2821 //The total number of operations is 1
     2821//The total number of operations is 1.0
    28222822template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::fill2(uint64_t val1, uint64_t val2)
    28232823{
     
    28252825}
    28262826
    2827 //The total number of operations is 1
     2827//The total number of operations is 1.0
    28282828template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::fill2(uint64_t val1, uint64_t val2)
    28292829{
     
    28312831}
    28322832
    2833 //The total number of operations is 1
     2833//The total number of operations is 1.0
    28342834template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::fill2(uint64_t val1, uint64_t val2)
    28352835{
     
    28372837}
    28382838
    2839 //The total number of operations is 1
     2839//The total number of operations is 1.0
    28402840template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::fill2(uint64_t val1, uint64_t val2)
    28412841{
     
    28432843}
    28442844
    2845 //The total number of operations is 5
     2845//The total number of operations is 5.0
    28462846template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::fill2(uint64_t val1, uint64_t val2)
    28472847{
     
    28492849}
    28502850
    2851 //The total number of operations is 5
     2851//The total number of operations is 5.0
    28522852template <> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::fill2(uint64_t val1, uint64_t val2)
    28532853{
     
    28552855}
    28562856
    2857 //The total number of operations is 9
     2857//The total number of operations is 5.66666666667
    28582858template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28592859{
     
    28612861}
    28622862
    2863 //The total number of operations is 9
     2863//The total number of operations is 5.66666666667
    28642864template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28652865{
     
    28672867}
    28682868
    2869 //The total number of operations is 9
     2869//The total number of operations is 3.0
    28702870template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28712871{
     
    28732873}
    28742874
    2875 //The total number of operations is 9
     2875//The total number of operations is 3.0
    28762876template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28772877{
     
    28792879}
    28802880
    2881 //The total number of operations is 9
     2881//The total number of operations is 3.0
    28822882template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28832883{
     
    28852885}
    28862886
    2887 //The total number of operations is 9
     2887//The total number of operations is 3.0
    28882888template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28892889{
     
    28912891}
    28922892
    2893 //The total number of operations is 9
     2893//The total number of operations is 3.0
    28942894template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::dslli(bitblock128_t arg1, bitblock128_t arg2)
    28952895{
     
    28972897}
    28982898
    2899 //The total number of operations is 4
     2899//The total number of operations is 2.33333333333
    29002900template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::slli(bitblock128_t arg1)
    29012901{
     
    29032903}
    29042904
    2905 //The total number of operations is 4
     2905//The total number of operations is 2.33333333333
    29062906template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::slli(bitblock128_t arg1)
    29072907{
     
    29092909}
    29102910
    2911 //The total number of operations is 4
     2911//The total number of operations is 1.0
    29122912template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::slli(bitblock128_t arg1)
    29132913{
    2914         return simd128<128>::slli<(sh*8)>(arg1);
    2915 }
    2916 
    2917 //The total number of operations is 4
     2914        return _mm_slli_si128(arg1, (int32_t)(sh));
     2915}
     2916
     2917//The total number of operations is 1.0
    29182918template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::slli(bitblock128_t arg1)
    29192919{
     
    29212921}
    29222922
    2923 //The total number of operations is 4
     2923//The total number of operations is 1.0
    29242924template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::slli(bitblock128_t arg1)
    29252925{
    2926         return simd128<128>::slli<(sh*32)>(arg1);
    2927 }
    2928 
    2929 //The total number of operations is 4
     2926        return mvmd128<(16)>::slli<(sh*2)>(arg1);
     2927}
     2928
     2929//The total number of operations is 1.0
    29302930template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<64>::slli(bitblock128_t arg1)
    29312931{
     
    29332933}
    29342934
    2935 //The total number of operations is 4
     2935//The total number of operations is 1.0
    29362936template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<128>::slli(bitblock128_t arg1)
    29372937{
    2938         return simd128<128>::slli<(sh*128)>(arg1);
    2939 }
    2940 
    2941 //The total number of operations is 13
     2938        return mvmd128<(64)>::slli<(sh*2)>(arg1);
     2939}
     2940
     2941//The total number of operations is 13.0
    29422942template <> 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)
    29432943{
     
    29452945}
    29462946
    2947 //The total number of operations is 13
     2947//The total number of operations is 13.0
    29482948template <> 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)
    29492949{
     
    29512951}
    29522952
    2953 //The total number of operations is 7
     2953//The total number of operations is 7.0
    29542954template <> 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)
    29552955{
     
    29572957}
    29582958
    2959 //The total number of operations is 3
     2959//The total number of operations is 3.0
    29602960template <> 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)
    29612961{
     
    29632963}
    29642964
    2965 //The total number of operations is 1
     2965//The total number of operations is 1.0
    29662966template <> 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)
    29672967{
     
    29692969}
    29702970
    2971 //The total number of operations is 11
     2971//The total number of operations is 11.0
    29722972IDISA_ALWAYS_INLINE bitblock128_t bitblock128::sll(bitblock128_t arg1, bitblock128_t arg2)
    29732973{
     
    29752975}
    29762976
    2977 //The total number of operations is 1
     2977//The total number of operations is 1.0
    29782978IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_unaligned(bitblock128_t* arg1)
    29792979{
     
    29812981}
    29822982
    2983 //The total number of operations is 4
     2983//The total number of operations is 2.33333333333
    29842984template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srli(bitblock128_t arg1)
    29852985{
     
    29872987}
    29882988
    2989 //The total number of operations is 1
     2989//The total number of operations is 1.0
    29902990IDISA_ALWAYS_INLINE void bitblock128::store_aligned(bitblock128_t* arg1, bitblock128_t arg2)
    29912991{
     
    29932993}
    29942994
    2995 //The total number of operations is 22
     2995//The total number of operations is 20.3333333333
    29962996IDISA_ALWAYS_INLINE uint64_t bitblock128::popcount(bitblock128_t arg1)
    29972997{
     
    29992999}
    30003000
    3001 //The total number of operations is 2
     3001//The total number of operations is 2.0
    30023002IDISA_ALWAYS_INLINE bool bitblock128::all(bitblock128_t arg1)
    30033003{
     
    30053005}
    30063006
    3007 //The total number of operations is 11
     3007//The total number of operations is 11.0
    30083008IDISA_ALWAYS_INLINE bitblock128_t bitblock128::srl(bitblock128_t arg1, bitblock128_t arg2)
    30093009{
     
    30113011}
    30123012
    3013 //The total number of operations is 4
     3013//The total number of operations is 2.33333333333
    30143014template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t bitblock128::slli(bitblock128_t arg1)
    30153015{
     
    30173017}
    30183018
    3019 //The total number of operations is 2
     3019//The total number of operations is 2.0
    30203020IDISA_ALWAYS_INLINE bool bitblock128::any(bitblock128_t arg1)
    30213021{
     
    30233023}
    30243024
    3025 //The total number of operations is 1
     3025//The total number of operations is 1.0
    30263026IDISA_ALWAYS_INLINE bitblock128_t bitblock128::load_aligned(bitblock128_t* arg1)
    30273027{
     
    30293029}
    30303030
    3031 //The total number of operations is 1
     3031//The total number of operations is 1.0
    30323032IDISA_ALWAYS_INLINE void bitblock128::store_unaligned(bitblock128_t* arg1, bitblock128_t arg2)
    30333033{
Note: See TracChangeset for help on using the changeset viewer.