Changeset 1767 for trunk/lib


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

The final version of IDISA+ toolkit...

Location:
trunk/lib
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/idisa.hpp

    r1580 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_HPP
    29#define IDISA_HPP
  • trunk/lib/idisa128.hpp

    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 IDISA128_HPP
    29#define IDISA128_HPP
  • trunk/lib/idisa256.hpp

    r1548 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 IDISA256_HPP
    29#define IDISA256_HPP
  • trunk/lib/idisa_cpp/idisa_avx.cpp

    r1661 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_AVX_CPP
    29#define IDISA_AVX_CPP
     
    101108IDISA_ALWAYS_INLINE bitblock256_t simd_andc(bitblock256_t arg1, bitblock256_t arg2);
    102109IDISA_ALWAYS_INLINE bitblock256_t simd_or(bitblock256_t arg1, bitblock256_t arg2);
     110IDISA_ALWAYS_INLINE bitblock256_t simd_and(bitblock256_t arg1, bitblock256_t arg2);
    103111IDISA_ALWAYS_INLINE bitblock256_t simd_xor(bitblock256_t arg1, bitblock256_t arg2);
    104 IDISA_ALWAYS_INLINE bitblock256_t simd_and(bitblock256_t arg1, bitblock256_t arg2);
    105112template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::max(bitblock256_t arg1, bitblock256_t arg2);
    106113template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::max(bitblock256_t arg1, bitblock256_t arg2);
     
    537544#define avx_general_combine256(x, y) \
    538545   (_mm256_insertf128_ps(_mm256_castps128_ps256((__m128) y), (__m128) x, 1))
    539 //The total number of operations is 2
     546//The total number of operations is 2.0
    540547IDISA_ALWAYS_INLINE bitblock256_t simd_nor(bitblock256_t arg1, bitblock256_t arg2)
    541548{
     
    543550}
    544551
    545 //The total number of operations is 1
     552//The total number of operations is 1.0
    546553IDISA_ALWAYS_INLINE bitblock256_t simd_not(bitblock256_t arg1)
    547554{
     
    549556}
    550557
    551 //The total number of operations is 1
     558//The total number of operations is 1.0
    552559IDISA_ALWAYS_INLINE bitblock256_t simd_andc(bitblock256_t arg1, bitblock256_t arg2)
    553560{
     
    555562}
    556563
    557 //The total number of operations is 1
     564//The total number of operations is 1.0
    558565IDISA_ALWAYS_INLINE bitblock256_t simd_or(bitblock256_t arg1, bitblock256_t arg2)
    559566{
     
    561568}
    562569
    563 //The total number of operations is 1
     570//The total number of operations is 1.0
     571IDISA_ALWAYS_INLINE bitblock256_t simd_and(bitblock256_t arg1, bitblock256_t arg2)
     572{
     573        return _mm256_and_ps(arg1, arg2);
     574}
     575
     576//The total number of operations is 1.0
    564577IDISA_ALWAYS_INLINE bitblock256_t simd_xor(bitblock256_t arg1, bitblock256_t arg2)
    565578{
     
    567580}
    568581
    569 //The total number of operations is 1
    570 IDISA_ALWAYS_INLINE bitblock256_t simd_and(bitblock256_t arg1, bitblock256_t arg2)
    571 {
    572         return _mm256_and_ps(arg1, arg2);
    573 }
    574 
    575 //The total number of operations is 1
     582//The total number of operations is 1.0
    576583template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::max(bitblock256_t arg1, bitblock256_t arg2)
    577584{
     
    579586}
    580587
    581 //The total number of operations is 29
     588//The total number of operations is 25.0
    582589template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::max(bitblock256_t arg1, bitblock256_t arg2)
    583590{
     
    589596}
    590597
    591 //The total number of operations is 23
     598//The total number of operations is 17.0
    592599template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::max(bitblock256_t arg1, bitblock256_t arg2)
    593600{
     
    596603}
    597604
    598 //The total number of operations is 8
     605//The total number of operations is 5.0
    599606template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::max(bitblock256_t arg1, bitblock256_t arg2)
    600607{
     
    602609}
    603610
    604 //The total number of operations is 8
     611//The total number of operations is 5.0
    605612template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::max(bitblock256_t arg1, bitblock256_t arg2)
    606613{
     
    608615}
    609616
    610 //The total number of operations is 8
     617//The total number of operations is 5.0
    611618template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::max(bitblock256_t arg1, bitblock256_t arg2)
    612619{
     
    614621}
    615622
    616 //The total number of operations is 11
     623//The total number of operations is 8.0
    617624template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::max(bitblock256_t arg1, bitblock256_t arg2)
    618625{
     
    620627}
    621628
    622 //The total number of operations is 88
     629//The total number of operations is 54.6666666667
    623630template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::max(bitblock256_t arg1, bitblock256_t arg2)
    624631{
     
    630637}
    631638
    632 //The total number of operations is 352
     639//The total number of operations is 186.666666667
    633640template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::max(bitblock256_t arg1, bitblock256_t arg2)
    634641{
     
    640647}
    641648
    642 //The total number of operations is 1
     649//The total number of operations is 1.0
    643650template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::mult(bitblock256_t arg1, bitblock256_t arg2)
    644651{
     
    646653}
    647654
    648 //The total number of operations is 95
     655//The total number of operations is 43.0
    649656template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::mult(bitblock256_t arg1, bitblock256_t arg2)
    650657{
     
    654661}
    655662
    656 //The total number of operations is 104
     663//The total number of operations is 74.0
    657664template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::mult(bitblock256_t arg1, bitblock256_t arg2)
    658665{
     
    663670}
    664671
    665 //The total number of operations is 39
     672//The total number of operations is 27.0
    666673template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::mult(bitblock256_t arg1, bitblock256_t arg2)
    667674{
     
    672679}
    673680
    674 //The total number of operations is 8
     681//The total number of operations is 5.0
    675682template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::mult(bitblock256_t arg1, bitblock256_t arg2)
    676683{
     
    678685}
    679686
    680 //The total number of operations is 8
     687//The total number of operations is 5.0
    681688template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::mult(bitblock256_t arg1, bitblock256_t arg2)
    682689{
     
    684691}
    685692
    686 //The total number of operations is 66
     693//The total number of operations is 43.0
    687694template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::mult(bitblock256_t arg1, bitblock256_t arg2)
    688695{
     
    698705}
    699706
    700 //The total number of operations is 877
     707//The total number of operations is 496.0
    701708template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::mult(bitblock256_t arg1, bitblock256_t arg2)
    702709{
     
    712719}
    713720
    714 //The total number of operations is 5001
     721//The total number of operations is 2711.33333333
    715722template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::mult(bitblock256_t arg1, bitblock256_t arg2)
    716723{
     
    726733}
    727734
    728 //The total number of operations is 1
     735//The total number of operations is 1.0
    729736template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::gt(bitblock256_t arg1, bitblock256_t arg2)
    730737{
     
    732739}
    733740
    734 //The total number of operations is 30
     741//The total number of operations is 24.0
    735742template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::gt(bitblock256_t arg1, bitblock256_t arg2)
    736743{
     
    742749}
    743750
    744 //The total number of operations is 28
     751//The total number of operations is 22.0
    745752template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::gt(bitblock256_t arg1, bitblock256_t arg2)
    746753{
     
    749756}
    750757
    751 //The total number of operations is 8
     758//The total number of operations is 5.0
    752759template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::gt(bitblock256_t arg1, bitblock256_t arg2)
    753760{
     
    755762}
    756763
    757 //The total number of operations is 8
     764//The total number of operations is 5.0
    758765template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::gt(bitblock256_t arg1, bitblock256_t arg2)
    759766{
     
    761768}
    762769
    763 //The total number of operations is 8
     770//The total number of operations is 5.0
    764771template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::gt(bitblock256_t arg1, bitblock256_t arg2)
    765772{
     
    767774}
    768775
    769 //The total number of operations is 8
     776//The total number of operations is 5.0
    770777template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::gt(bitblock256_t arg1, bitblock256_t arg2)
    771778{
     
    773780}
    774781
    775 //The total number of operations is 151
     782//The total number of operations is 65.0
    776783template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::gt(bitblock256_t arg1, bitblock256_t arg2)
    777784{
     
    783790}
    784791
    785 //The total number of operations is 646
     792//The total number of operations is 239.166666667
    786793template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::gt(bitblock256_t arg1, bitblock256_t arg2)
    787794{
     
    793800}
    794801
    795 //The total number of operations is 978
     802//The total number of operations is 696.0
    796803template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::umult(bitblock256_t arg1, bitblock256_t arg2)
    797804{
     
    802809}
    803810
    804 //The total number of operations is 476
     811//The total number of operations is 338.0
    805812template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::umult(bitblock256_t arg1, bitblock256_t arg2)
    806813{
     
    811818}
    812819
    813 //The total number of operations is 225
     820//The total number of operations is 159.0
    814821template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::umult(bitblock256_t arg1, bitblock256_t arg2)
    815822{
     
    820827}
    821828
    822 //The total number of operations is 101
     829//The total number of operations is 71.0
    823830template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::umult(bitblock256_t arg1, bitblock256_t arg2)
    824831{
     
    829836}
    830837
    831 //The total number of operations is 39
     838//The total number of operations is 27.0
    832839template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::umult(bitblock256_t arg1, bitblock256_t arg2)
    833840{
     
    838845}
    839846
    840 //The total number of operations is 8
     847//The total number of operations is 5.0
    841848template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::umult(bitblock256_t arg1, bitblock256_t arg2)
    842849{
     
    844851}
    845852
    846 //The total number of operations is 237
     853//The total number of operations is 136.0
    847854template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::umult(bitblock256_t arg1, bitblock256_t arg2)
    848855{
     
    862869}
    863870
    864 //The total number of operations is 1521
     871//The total number of operations is 833.666666667
    865872template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::umult(bitblock256_t arg1, bitblock256_t arg2)
    866873{
     
    880887}
    881888
    882 //The total number of operations is 1
     889//The total number of operations is 1.0
    883890template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::ult(bitblock256_t arg1, bitblock256_t arg2)
    884891{
     
    886893}
    887894
    888 //The total number of operations is 29
     895//The total number of operations is 23.0
    889896template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::ult(bitblock256_t arg1, bitblock256_t arg2)
    890897{
     
    895902}
    896903
    897 //The total number of operations is 48
     904//The total number of operations is 36.0
    898905template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::ult(bitblock256_t arg1, bitblock256_t arg2)
    899906{
     
    901908}
    902909
    903 //The total number of operations is 21
     910//The total number of operations is 15.0
    904911template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::ult(bitblock256_t arg1, bitblock256_t arg2)
    905912{
     
    908915}
    909916
    910 //The total number of operations is 21
     917//The total number of operations is 15.0
    911918template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::ult(bitblock256_t arg1, bitblock256_t arg2)
    912919{
     
    915922}
    916923
    917 //The total number of operations is 21
     924//The total number of operations is 15.0
    918925template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::ult(bitblock256_t arg1, bitblock256_t arg2)
    919926{
    920         bitblock256_t high_bit = simd256<32>::constant<(2147483648UL)>();
     927        bitblock256_t high_bit = simd256<32>::constant<(2147483648ULL)>();
    921928        return simd256<32>::lt(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit));
    922929}
    923930
    924 //The total number of operations is 21
     931//The total number of operations is 15.0
    925932template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::ult(bitblock256_t arg1, bitblock256_t arg2)
    926933{
    927         bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808UL)>();
     934        bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808ULL)>();
    928935        return simd256<64>::lt(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit));
    929936}
    930937
    931 //The total number of operations is 154
     938//The total number of operations is 68.0
    932939template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::ult(bitblock256_t arg1, bitblock256_t arg2)
    933940{
     
    938945}
    939946
    940 //The total number of operations is 496
     947//The total number of operations is 182.166666667
    941948template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::ult(bitblock256_t arg1, bitblock256_t arg2)
    942949{
    943         return simd_and(simd256<256>::srai<(255)>(simd_or(simd_and(simd_not(arg1), arg2), simd_and(simd_not(simd_xor(arg1, arg2)), simd256<256>::sub(arg1, arg2)))), simd_not(simd256<256>::eq(arg1, arg2)));
    944 }
    945 
    946 //The total number of operations is 1
     950        bitblock256_t tmpAns = simd256<(128)>::ult(arg1, arg2);
     951        bitblock256_t mask = simd_and(tmpAns, simd256<256>::srli<(128)>(simd256<(128)>::eq(arg1, arg2)));
     952        mask = simd_or(mask, simd256<256>::slli<(128)>(mask));
     953        return simd_or(simd256<256>::srai<(128)>(tmpAns), mask);
     954}
     955
     956//The total number of operations is 1.0
    947957template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::lt(bitblock256_t arg1, bitblock256_t arg2)
    948958{
     
    950960}
    951961
    952 //The total number of operations is 30
     962//The total number of operations is 24.0
    953963template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::lt(bitblock256_t arg1, bitblock256_t arg2)
    954964{
     
    960970}
    961971
    962 //The total number of operations is 50
     972//The total number of operations is 38.0
    963973template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::lt(bitblock256_t arg1, bitblock256_t arg2)
    964974{
     
    967977}
    968978
    969 //The total number of operations is 19
     979//The total number of operations is 13.0
    970980template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::lt(bitblock256_t arg1, bitblock256_t arg2)
    971981{
     
    973983}
    974984
    975 //The total number of operations is 19
     985//The total number of operations is 13.0
    976986template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::lt(bitblock256_t arg1, bitblock256_t arg2)
    977987{
     
    979989}
    980990
    981 //The total number of operations is 19
     991//The total number of operations is 13.0
    982992template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::lt(bitblock256_t arg1, bitblock256_t arg2)
    983993{
     
    985995}
    986996
    987 //The total number of operations is 19
     997//The total number of operations is 13.0
    988998template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::lt(bitblock256_t arg1, bitblock256_t arg2)
    989999{
     
    9911001}
    9921002
    993 //The total number of operations is 173
     1003//The total number of operations is 81.0
    9941004template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::lt(bitblock256_t arg1, bitblock256_t arg2)
    9951005{
     
    10011011}
    10021012
    1003 //The total number of operations is 679
     1013//The total number of operations is 263.166666667
    10041014template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::lt(bitblock256_t arg1, bitblock256_t arg2)
    10051015{
     
    10111021}
    10121022
    1013 //The total number of operations is 7
     1023//The total number of operations is 5.0
    10141024template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::srli(bitblock256_t arg1)
    10151025{
     
    10171027}
    10181028
    1019 //The total number of operations is 7
     1029//The total number of operations is 5.0
    10201030template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::srli(bitblock256_t arg1)
    10211031{
     
    10231033}
    10241034
    1025 //The total number of operations is 7
     1035//The total number of operations is 5.0
    10261036template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::srli(bitblock256_t arg1)
    10271037{
     
    10291039}
    10301040
    1031 //The total number of operations is 6
     1041//The total number of operations is 4.0
    10321042template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::srli(bitblock256_t arg1)
    10331043{
     
    10351045}
    10361046
    1037 //The total number of operations is 6
     1047//The total number of operations is 4.0
    10381048template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::srli(bitblock256_t arg1)
    10391049{
     
    10411051}
    10421052
    1043 //The total number of operations is 6
     1053//The total number of operations is 4.0
    10441054template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::srli(bitblock256_t arg1)
    10451055{
     
    10471057}
    10481058
    1049 //The total number of operations is 19
     1059//The total number of operations is 8.33333333333
    10501060template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::srli(bitblock256_t arg1)
    10511061{
     
    10531063}
    10541064
    1055 //The total number of operations is 41
     1065//The total number of operations is 14.5
    10561066template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::srli(bitblock256_t arg1)
    10571067{
     
    10591069}
    10601070
    1061 //The total number of operations is 1
     1071//The total number of operations is 1.0
    10621072template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::ctz(bitblock256_t arg1)
    10631073{
     
    10651075}
    10661076
    1067 //The total number of operations is 34
     1077//The total number of operations is 27.0
    10681078template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::ctz(bitblock256_t arg1)
    10691079{
     
    10711081}
    10721082
    1073 //The total number of operations is 52
     1083//The total number of operations is 36.0
    10741084template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::ctz(bitblock256_t arg1)
    10751085{
     
    10771087}
    10781088
    1079 //The total number of operations is 56
     1089//The total number of operations is 38.0
    10801090template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::ctz(bitblock256_t arg1)
    10811091{
     
    10831093}
    10841094
    1085 //The total number of operations is 71
     1095//The total number of operations is 48.0
    10861096template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::ctz(bitblock256_t arg1)
    10871097{
     
    10891099}
    10901100
    1091 //The total number of operations is 86
     1101//The total number of operations is 58.0
    10921102template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::ctz(bitblock256_t arg1)
    10931103{
     
    10951105}
    10961106
    1097 //The total number of operations is 64
     1107//The total number of operations is 44.0
    10981108template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::ctz(bitblock256_t arg1)
    10991109{
     
    11011111}
    11021112
    1103 //The total number of operations is 164
     1113//The total number of operations is 101.0
    11041114template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::ctz(bitblock256_t arg1)
    11051115{
     
    11071117}
    11081118
    1109 //The total number of operations is 343
     1119//The total number of operations is 192.166666667
    11101120template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::ctz(bitblock256_t arg1)
    11111121{
     
    11131123}
    11141124
    1115 //The total number of operations is 1
     1125//The total number of operations is 1.0
    11161126template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11171127{
     
    11191129}
    11201130
    1121 //The total number of operations is 29
     1131//The total number of operations is 23.0
    11221132template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11231133{
     
    11281138}
    11291139
    1130 //The total number of operations is 26
     1140//The total number of operations is 20.0
    11311141template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11321142{
     
    11341144}
    11351145
    1136 //The total number of operations is 10
     1146//The total number of operations is 7.0
    11371147template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11381148{
     
    11411151}
    11421152
    1143 //The total number of operations is 10
     1153//The total number of operations is 7.0
    11441154template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11451155{
     
    11481158}
    11491159
    1150 //The total number of operations is 10
     1160//The total number of operations is 7.0
    11511161template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11521162{
    1153         bitblock256_t high_bit = simd256<32>::constant<(2147483648UL)>();
     1163        bitblock256_t high_bit = simd256<32>::constant<(2147483648ULL)>();
    11541164        return simd256<32>::gt(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit));
    11551165}
    11561166
    1157 //The total number of operations is 10
     1167//The total number of operations is 7.0
    11581168template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11591169{
    1160         bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808UL)>();
     1170        bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808ULL)>();
    11611171        return simd256<64>::gt(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit));
    11621172}
    11631173
    1164 //The total number of operations is 143
     1174//The total number of operations is 60.0
    11651175template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11661176{
     
    11711181}
    11721182
    1173 //The total number of operations is 495
     1183//The total number of operations is 174.166666667
    11741184template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::ugt(bitblock256_t arg1, bitblock256_t arg2)
    11751185{
     
    11801190}
    11811191
    1182 //The total number of operations is 9
     1192//The total number of operations is 7.0
    11831193template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::xor_hl(bitblock256_t arg1)
    11841194{
     
    11861196}
    11871197
    1188 //The total number of operations is 9
     1198//The total number of operations is 7.0
    11891199template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::xor_hl(bitblock256_t arg1)
    11901200{
     
    11921202}
    11931203
    1194 //The total number of operations is 9
     1204//The total number of operations is 7.0
    11951205template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::xor_hl(bitblock256_t arg1)
    11961206{
     
    11981208}
    11991209
    1200 //The total number of operations is 8
     1210//The total number of operations is 6.0
    12011211template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::xor_hl(bitblock256_t arg1)
    12021212{
     
    12041214}
    12051215
    1206 //The total number of operations is 8
     1216//The total number of operations is 6.0
    12071217template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::xor_hl(bitblock256_t arg1)
    12081218{
     
    12101220}
    12111221
    1212 //The total number of operations is 8
     1222//The total number of operations is 6.0
    12131223template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::xor_hl(bitblock256_t arg1)
    12141224{
     
    12161226}
    12171227
    1218 //The total number of operations is 21
     1228//The total number of operations is 10.3333333333
    12191229template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::xor_hl(bitblock256_t arg1)
    12201230{
     
    12221232}
    12231233
    1224 //The total number of operations is 43
     1234//The total number of operations is 16.5
    12251235template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::xor_hl(bitblock256_t arg1)
    12261236{
     
    12341244}
    12351245
    1236 //The total number of operations is 15
     1246//The total number of operations is 10.0
    12371247template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::popcount(bitblock256_t arg1)
    12381248{
     
    12401250}
    12411251
    1242 //The total number of operations is 31
     1252//The total number of operations is 21.0
    12431253template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::popcount(bitblock256_t arg1)
    12441254{
     
    12461256}
    12471257
    1248 //The total number of operations is 47
     1258//The total number of operations is 32.0
    12491259template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::popcount(bitblock256_t arg1)
    12501260{
     
    12521262}
    12531263
    1254 //The total number of operations is 62
     1264//The total number of operations is 42.0
    12551265template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::popcount(bitblock256_t arg1)
    12561266{
     
    12581268}
    12591269
    1260 //The total number of operations is 77
     1270//The total number of operations is 52.0
    12611271template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::popcount(bitblock256_t arg1)
    12621272{
     
    12641274}
    12651275
    1266 //The total number of operations is 55
     1276//The total number of operations is 38.0
    12671277template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::popcount(bitblock256_t arg1)
    12681278{
     
    12711281}
    12721282
    1273 //The total number of operations is 119
     1283//The total number of operations is 73.6666666667
    12741284template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::popcount(bitblock256_t arg1)
    12751285{
     
    12771287}
    12781288
    1279 //The total number of operations is 205
     1289//The total number of operations is 115.5
    12801290template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::popcount(bitblock256_t arg1)
    12811291{
     
    12841294}
    12851295
    1286 //The total number of operations is 18
     1296//The total number of operations is 16.0
    12871297template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::neg(bitblock256_t arg1)
    12881298{
     
    12901300}
    12911301
    1292 //The total number of operations is 20
     1302//The total number of operations is 14.0
    12931303template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::neg(bitblock256_t arg1)
    12941304{
     
    12961306}
    12971307
    1298 //The total number of operations is 8
     1308//The total number of operations is 5.0
    12991309template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::neg(bitblock256_t arg1)
    13001310{
     
    13021312}
    13031313
    1304 //The total number of operations is 8
     1314//The total number of operations is 5.0
    13051315template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::neg(bitblock256_t arg1)
    13061316{
     
    13081318}
    13091319
    1310 //The total number of operations is 8
     1320//The total number of operations is 5.0
    13111321template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::neg(bitblock256_t arg1)
    13121322{
     
    13141324}
    13151325
    1316 //The total number of operations is 8
     1326//The total number of operations is 5.0
    13171327template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::neg(bitblock256_t arg1)
    13181328{
     
    13201330}
    13211331
    1322 //The total number of operations is 44
     1332//The total number of operations is 26.3333333333
    13231333template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::neg(bitblock256_t arg1)
    13241334{
     
    13261336}
    13271337
    1328 //The total number of operations is 137
     1338//The total number of operations is 75.6666666667
    13291339template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::neg(bitblock256_t arg1)
    13301340{
     
    13321342}
    13331343
    1334 //The total number of operations is 7
     1344//The total number of operations is 5.0
    13351345template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::slli(bitblock256_t arg1)
    13361346{
     
    13381348}
    13391349
    1340 //The total number of operations is 7
     1350//The total number of operations is 5.0
    13411351template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::slli(bitblock256_t arg1)
    13421352{
     
    13441354}
    13451355
    1346 //The total number of operations is 7
     1356//The total number of operations is 5.0
    13471357template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::slli(bitblock256_t arg1)
    13481358{
     
    13501360}
    13511361
    1352 //The total number of operations is 6
     1362//The total number of operations is 4.0
    13531363template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::slli(bitblock256_t arg1)
    13541364{
     
    13561366}
    13571367
    1358 //The total number of operations is 6
     1368//The total number of operations is 4.0
    13591369template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::slli(bitblock256_t arg1)
    13601370{
     
    13621372}
    13631373
    1364 //The total number of operations is 6
     1374//The total number of operations is 4.0
    13651375template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::slli(bitblock256_t arg1)
    13661376{
     
    13681378}
    13691379
    1370 //The total number of operations is 19
     1380//The total number of operations is 8.33333333333
    13711381template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::slli(bitblock256_t arg1)
    13721382{
     
    13741384}
    13751385
    1376 //The total number of operations is 40
     1386//The total number of operations is 14.0
    13771387template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::slli(bitblock256_t arg1)
    13781388{
     
    13801390}
    13811391
    1382 //The total number of operations is 3
     1392//The total number of operations is 3.0
    13831393template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    13841394{
     
    13861396}
    13871397
    1388 //The total number of operations is 13
     1398//The total number of operations is 11.0
    13891399template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    13901400{
     
    13921402}
    13931403
    1394 //The total number of operations is 23
     1404//The total number of operations is 19.0
    13951405template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    13961406{
     
    13981408}
    13991409
    1400 //The total number of operations is 11
     1410//The total number of operations is 8.0
    14011411template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14021412{
     
    14041414}
    14051415
    1406 //The total number of operations is 11
     1416//The total number of operations is 8.0
    14071417template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14081418{
     
    14101420}
    14111421
    1412 //The total number of operations is 11
     1422//The total number of operations is 8.0
    14131423template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14141424{
     
    14161426}
    14171427
    1418 //The total number of operations is 1
     1428//The total number of operations is 1.0
    14191429template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14201430{
     
    14221432}
    14231433
    1424 //The total number of operations is 23
     1434//The total number of operations is 12.3333333333
    14251435template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14261436{
     
    14281438}
    14291439
    1430 //The total number of operations is 67
     1440//The total number of operations is 29.8333333333
    14311441template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::ifh(bitblock256_t arg1, bitblock256_t arg2, bitblock256_t arg3)
    14321442{
     
    14341444}
    14351445
    1436 //The total number of operations is 1
     1446//The total number of operations is 1.0
    14371447template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14381448{
     
    14401450}
    14411451
    1442 //The total number of operations is 18
     1452//The total number of operations is 16.0
    14431453template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14441454{
     
    14501460}
    14511461
    1452 //The total number of operations is 20
     1462//The total number of operations is 14.0
    14531463template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14541464{
     
    14561466}
    14571467
    1458 //The total number of operations is 8
     1468//The total number of operations is 5.0
    14591469template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14601470{
     
    14621472}
    14631473
    1464 //The total number of operations is 8
     1474//The total number of operations is 5.0
    14651475template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14661476{
     
    14681478}
    14691479
    1470 //The total number of operations is 8
     1480//The total number of operations is 5.0
    14711481template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14721482{
     
    14741484}
    14751485
    1476 //The total number of operations is 8
     1486//The total number of operations is 5.0
    14771487template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14781488{
     
    14801490}
    14811491
    1482 //The total number of operations is 44
     1492//The total number of operations is 26.3333333333
    14831493template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14841494{
    1485         bitblock256_t ans = simd256<(64)>::sub(arg1, arg2);
    1486         bitblock256_t borrowMask = simd_or(simd_andc(arg2, arg1), simd_and(simd_not(simd_xor(arg1, arg2)), ans));
    1487         bitblock256_t loMask = simd256<128>::lomask();
    1488         bitblock256_t borrow = simd256<128>::slli<1>(simd_and(borrowMask, loMask));
    1489         return simd256<1>::ifh(loMask, ans, simd256<(64)>::sub(ans, borrow));
    1490 }
    1491 
    1492 //The total number of operations is 137
     1495        bitblock256_t partial = simd256<(64)>::sub(arg1, arg2);
     1496        bitblock256_t borrowMask = simd_or(simd_andc(arg2, arg1), simd_andc(partial, simd_xor(arg1, arg2)));
     1497        bitblock256_t borrow = simd256<128>::slli<(64)>(simd256<(64)>::srli<(63)>(borrowMask));
     1498        return simd256<(64)>::sub(partial, borrow);
     1499}
     1500
     1501//The total number of operations is 75.6666666667
    14931502template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::sub(bitblock256_t arg1, bitblock256_t arg2)
    14941503{
     
    15001509}
    15011510
    1502 //The total number of operations is 15
     1511//The total number of operations is 10.0
    15031512template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::add_hl(bitblock256_t arg1)
    15041513{
     
    15061515}
    15071516
    1508 //The total number of operations is 16
     1517//The total number of operations is 11.0
    15091518template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::add_hl(bitblock256_t arg1)
    15101519{
     
    15121521}
    15131522
    1514 //The total number of operations is 16
     1523//The total number of operations is 11.0
    15151524template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::add_hl(bitblock256_t arg1)
    15161525{
     
    15181527}
    15191528
    1520 //The total number of operations is 15
     1529//The total number of operations is 10.0
    15211530template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::add_hl(bitblock256_t arg1)
    15221531{
     
    15241533}
    15251534
    1526 //The total number of operations is 15
     1535//The total number of operations is 10.0
    15271536template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::add_hl(bitblock256_t arg1)
    15281537{
     
    15301539}
    15311540
    1532 //The total number of operations is 15
     1541//The total number of operations is 10.0
    15331542template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::add_hl(bitblock256_t arg1)
    15341543{
     
    15361545}
    15371546
    1538 //The total number of operations is 64
     1547//The total number of operations is 35.6666666667
    15391548template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::add_hl(bitblock256_t arg1)
    15401549{
     
    15421551}
    15431552
    1544 //The total number of operations is 179
     1553//The total number of operations is 91.1666666667
    15451554template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::add_hl(bitblock256_t arg1)
    15461555{
     
    16021611}
    16031612
    1604 //The total number of operations is 1
     1613//The total number of operations is 1.0
    16051614template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::min(bitblock256_t arg1, bitblock256_t arg2)
    16061615{
     
    16081617}
    16091618
    1610 //The total number of operations is 29
     1619//The total number of operations is 25.0
    16111620template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::min(bitblock256_t arg1, bitblock256_t arg2)
    16121621{
     
    16181627}
    16191628
    1620 //The total number of operations is 23
     1629//The total number of operations is 17.0
    16211630template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::min(bitblock256_t arg1, bitblock256_t arg2)
    16221631{
     
    16251634}
    16261635
    1627 //The total number of operations is 8
     1636//The total number of operations is 5.0
    16281637template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::min(bitblock256_t arg1, bitblock256_t arg2)
    16291638{
     
    16311640}
    16321641
    1633 //The total number of operations is 8
     1642//The total number of operations is 5.0
    16341643template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::min(bitblock256_t arg1, bitblock256_t arg2)
    16351644{
     
    16371646}
    16381647
    1639 //The total number of operations is 8
     1648//The total number of operations is 5.0
    16401649template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::min(bitblock256_t arg1, bitblock256_t arg2)
    16411650{
     
    16431652}
    16441653
    1645 //The total number of operations is 11
     1654//The total number of operations is 8.0
    16461655template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::min(bitblock256_t arg1, bitblock256_t arg2)
    16471656{
     
    16491658}
    16501659
    1651 //The total number of operations is 88
     1660//The total number of operations is 54.6666666667
    16521661template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::min(bitblock256_t arg1, bitblock256_t arg2)
    16531662{
     
    16591668}
    16601669
    1661 //The total number of operations is 352
     1670//The total number of operations is 186.666666667
    16621671template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::min(bitblock256_t arg1, bitblock256_t arg2)
    16631672{
     
    17171726}
    17181727
    1719 //The total number of operations is 1
     1728//The total number of operations is 1.0
    17201729template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17211730{
     
    17231732}
    17241733
    1725 //The total number of operations is 28
     1734//The total number of operations is 24.0
    17261735template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17271736{
     
    17321741}
    17331742
    1734 //The total number of operations is 20
     1743//The total number of operations is 14.0
    17351744template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17361745{
     
    17381747}
    17391748
    1740 //The total number of operations is 8
     1749//The total number of operations is 5.0
    17411750template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17421751{
     
    17441753}
    17451754
    1746 //The total number of operations is 8
     1755//The total number of operations is 5.0
    17471756template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17481757{
     
    17501759}
    17511760
    1752 //The total number of operations is 8
     1761//The total number of operations is 5.0
    17531762template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17541763{
     
    17561765}
    17571766
    1758 //The total number of operations is 14
     1767//The total number of operations is 11.0
    17591768template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17601769{
    1761         bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808UL)>();
     1770        bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808ULL)>();
    17621771        return simd_xor(simd256<64>::min(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit)), high_bit);
    17631772}
    17641773
    1765 //The total number of operations is 77
     1774//The total number of operations is 46.6666666667
    17661775template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17671776{
     
    17721781}
    17731782
    1774 //The total number of operations is 264
     1783//The total number of operations is 132.0
    17751784template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::umin(bitblock256_t arg1, bitblock256_t arg2)
    17761785{
     
    17811790}
    17821791
    1783 //The total number of operations is 45
     1792//The total number of operations is 19.0
    17841793template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::abs(bitblock256_t arg1)
    17851794{
     
    17871796}
    17881797
    1789 //The total number of operations is 51
     1798//The total number of operations is 39.0
    17901799template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::abs(bitblock256_t arg1)
    17911800{
     
    17941803}
    17951804
    1796 //The total number of operations is 6
     1805//The total number of operations is 4.0
    17971806template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::abs(bitblock256_t arg1)
    17981807{
     
    18001809}
    18011810
    1802 //The total number of operations is 6
     1811//The total number of operations is 4.0
    18031812template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::abs(bitblock256_t arg1)
    18041813{
     
    18061815}
    18071816
    1808 //The total number of operations is 6
     1817//The total number of operations is 4.0
    18091818template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::abs(bitblock256_t arg1)
    18101819{
     
    18121821}
    18131822
    1814 //The total number of operations is 19
     1823//The total number of operations is 13.0
    18151824template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::abs(bitblock256_t arg1)
    18161825{
     
    18191828}
    18201829
    1821 //The total number of operations is 117
     1830//The total number of operations is 69.0
    18221831template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::abs(bitblock256_t arg1)
    18231832{
     
    18261835}
    18271836
    1828 //The total number of operations is 391
     1837//The total number of operations is 204.833333333
    18291838template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::abs(bitblock256_t arg1)
    18301839{
     
    18331842}
    18341843
    1835 //The total number of operations is 2
     1844//The total number of operations is 2.0
    18361845template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18371846{
     
    18391848}
    18401849
    1841 //The total number of operations is 18
     1850//The total number of operations is 14.0
    18421851template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18431852{
     
    18481857}
    18491858
    1850 //The total number of operations is 23
     1859//The total number of operations is 17.0
    18511860template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18521861{
     
    18541863}
    18551864
    1856 //The total number of operations is 8
     1865//The total number of operations is 5.0
    18571866template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18581867{
     
    18601869}
    18611870
    1862 //The total number of operations is 8
     1871//The total number of operations is 5.0
    18631872template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18641873{
     
    18661875}
    18671876
    1868 //The total number of operations is 8
     1877//The total number of operations is 5.0
    18691878template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18701879{
     
    18721881}
    18731882
    1874 //The total number of operations is 8
     1883//The total number of operations is 5.0
    18751884template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18761885{
     
    18781887}
    18791888
    1880 //The total number of operations is 48
     1889//The total number of operations is 23.6666666667
    18811890template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18821891{
     
    18871896}
    18881897
    1889 //The total number of operations is 131
     1898//The total number of operations is 54.1666666667
    18901899template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::eq(bitblock256_t arg1, bitblock256_t arg2)
    18911900{
     
    18961905}
    18971906
    1898 //The total number of operations is 9
     1907//The total number of operations is 7.0
    18991908template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::srai(bitblock256_t arg1)
    19001909{
     
    19021911}
    19031912
    1904 //The total number of operations is 29
     1913//The total number of operations is 17.5
    19051914template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::srai(bitblock256_t arg1)
    19061915{
    1907         bitblock256_t tmp = simd256<4>::srli<((sh >= 4) ? (3) : ((sh < 0) ? 0 : sh))>(arg1);
    1908         return simd_or(tmp, simd256<4>::sub(simd256<4>::constant<0>(), simd_and(simd256<4>::constant<(1<<((4-((sh >= 4) ? (3) : ((sh < 0) ? 0 : sh)))-1))>(), tmp)));
    1909 }
    1910 
    1911 //The total number of operations is 17
     1916        return simd_or(simd_and(simd256<4>::himask(), simd256<(2)>::srai<((sh < (2)) ? sh : (2))>(arg1)), ((sh <= (2)) ? simd256<4>::srli<sh>(arg1) : simd256<(2)>::srai<(sh-(2))>(simd256<4>::srli<(2)>(arg1))));
     1917}
     1918
     1919//The total number of operations is 12.0
    19121920template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::srai(bitblock256_t arg1)
    19131921{
     
    19161924}
    19171925
    1918 //The total number of operations is 6
     1926//The total number of operations is 4.0
    19191927template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::srai(bitblock256_t arg1)
    19201928{
     
    19221930}
    19231931
    1924 //The total number of operations is 6
     1932//The total number of operations is 4.0
    19251933template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::srai(bitblock256_t arg1)
    19261934{
     
    19281936}
    19291937
    1930 //The total number of operations is 22
     1938//The total number of operations is 12.0
    19311939template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::srai(bitblock256_t arg1)
    19321940{
    1933         bitblock256_t tmp = simd256<64>::srli<((sh >= 64) ? (63) : ((sh < 0) ? 0 : sh))>(arg1);
    1934         return simd_or(tmp, simd256<64>::sub(simd256<64>::constant<0>(), simd_and(simd256<64>::slli<((64-((sh >= 64) ? (63) : ((sh < 0) ? 0 : sh)))-1)>(simd256<64>::constant<1>()), tmp)));
    1935 }
    1936 
    1937 //The total number of operations is 84
     1941        return simd_or(simd_and(simd256<64>::himask(), simd256<(32)>::srai<((sh < (32)) ? sh : (32))>(arg1)), ((sh <= (32)) ? simd256<64>::srli<sh>(arg1) : simd256<(32)>::srai<(sh-(32))>(simd256<64>::srli<(32)>(arg1))));
     1942}
     1943
     1944//The total number of operations is 28.3333333333
    19381945template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::srai(bitblock256_t arg1)
    19391946{
    1940         bitblock256_t tmp = simd256<128>::srli<((sh >= 128) ? (127) : ((sh < 0) ? 0 : sh))>(arg1);
    1941         return simd_or(tmp, simd256<128>::sub(simd256<128>::constant<0>(), simd_and(simd256<128>::slli<((128-((sh >= 128) ? (127) : ((sh < 0) ? 0 : sh)))-1)>(simd256<128>::constant<1>()), tmp)));
    1942 }
    1943 
    1944 //The total number of operations is 220
     1947        return simd_or(simd_and(simd256<128>::himask(), simd256<(64)>::srai<((sh < (64)) ? sh : (64))>(arg1)), ((sh <= (64)) ? simd256<128>::srli<sh>(arg1) : simd256<(64)>::srai<(sh-(64))>(simd256<128>::srli<(64)>(arg1))));
     1948}
     1949
     1950//The total number of operations is 59.0
    19451951template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::srai(bitblock256_t arg1)
    19461952{
    1947         bitblock256_t tmp = simd256<256>::srli<((sh >= 256) ? (255) : ((sh < 0) ? 0 : sh))>(arg1);
    1948         return simd_or(tmp, simd256<256>::sub(simd256<256>::constant<0>(), simd_and(simd256<256>::slli<((256-((sh >= 256) ? (255) : ((sh < 0) ? 0 : sh)))-1)>(simd256<256>::constant<1>()), tmp)));
     1953        return simd_or(simd_and(simd256<256>::himask(), simd256<(128)>::srai<((sh < (128)) ? sh : (128))>(arg1)), ((sh <= (128)) ? simd256<256>::srli<sh>(arg1) : simd256<(128)>::srai<(sh-(128))>(simd256<256>::srli<(128)>(arg1))));
    19491954}
    19501955
     
    19972002}
    19982003
    1999 //The total number of operations is 1
     2004//The total number of operations is 1.0
    20002005template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::add(bitblock256_t arg1, bitblock256_t arg2)
    20012006{
     
    20032008}
    20042009
    2005 //The total number of operations is 18
     2010//The total number of operations is 16.0
    20062011template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::add(bitblock256_t arg1, bitblock256_t arg2)
    20072012{
     
    20132018}
    20142019
    2015 //The total number of operations is 20
     2020//The total number of operations is 14.0
    20162021template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::add(bitblock256_t arg1, bitblock256_t arg2)
    20172022{
     
    20192024}
    20202025
    2021 //The total number of operations is 8
     2026//The total number of operations is 5.0
    20222027template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::add(bitblock256_t arg1, bitblock256_t arg2)
    20232028{
     
    20252030}
    20262031
    2027 //The total number of operations is 8
     2032//The total number of operations is 5.0
    20282033template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::add(bitblock256_t arg1, bitblock256_t arg2)
    20292034{
     
    20312036}
    20322037
    2033 //The total number of operations is 8
     2038//The total number of operations is 5.0
    20342039template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::add(bitblock256_t arg1, bitblock256_t arg2)
    20352040{
     
    20372042}
    20382043
    2039 //The total number of operations is 8
     2044//The total number of operations is 5.0
    20402045template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::add(bitblock256_t arg1, bitblock256_t arg2)
    20412046{
     
    20432048}
    20442049
    2045 //The total number of operations is 44
     2050//The total number of operations is 26.3333333333
    20462051template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::add(bitblock256_t arg1, bitblock256_t arg2)
    20472052{
    2048         bitblock256_t ans = simd256<(64)>::add(arg1, arg2);
    2049         bitblock256_t carryMask = simd_or(simd_and(arg1, arg2), simd_and(simd_xor(arg1, arg2), simd_not(ans)));
    2050         bitblock256_t loMask = simd256<128>::lomask();
    2051         bitblock256_t carry = simd256<128>::slli<1>(simd_and(carryMask, loMask));
    2052         return simd256<1>::ifh(loMask, ans, simd256<(64)>::add(ans, carry));
    2053 }
    2054 
    2055 //The total number of operations is 137
     2053        bitblock256_t partial = simd256<(64)>::add(arg1, arg2);
     2054        bitblock256_t carryMask = simd_or(simd_and(arg1, arg2), simd_andc(simd_xor(arg1, arg2), partial));
     2055        bitblock256_t carry = simd256<128>::slli<(64)>(simd256<(64)>::srli<(63)>(carryMask));
     2056        return simd256<(64)>::add(partial, carry);
     2057}
     2058
     2059//The total number of operations is 75.6666666667
    20562060template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::add(bitblock256_t arg1, bitblock256_t arg2)
    20572061{
     
    20632067}
    20642068
    2065 //The total number of operations is 1
     2069//The total number of operations is 1.0
    20662070template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<1>::umax(bitblock256_t arg1, bitblock256_t arg2)
    20672071{
     
    20692073}
    20702074
    2071 //The total number of operations is 28
     2075//The total number of operations is 24.0
    20722076template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<2>::umax(bitblock256_t arg1, bitblock256_t arg2)
    20732077{
     
    20782082}
    20792083
    2080 //The total number of operations is 20
     2084//The total number of operations is 14.0
    20812085template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<4>::umax(bitblock256_t arg1, bitblock256_t arg2)
    20822086{
     
    20842088}
    20852089
    2086 //The total number of operations is 8
     2090//The total number of operations is 5.0
    20872091template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<8>::umax(bitblock256_t arg1, bitblock256_t arg2)
    20882092{
     
    20902094}
    20912095
    2092 //The total number of operations is 8
     2096//The total number of operations is 5.0
    20932097template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<16>::umax(bitblock256_t arg1, bitblock256_t arg2)
    20942098{
     
    20962100}
    20972101
    2098 //The total number of operations is 8
     2102//The total number of operations is 5.0
    20992103template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<32>::umax(bitblock256_t arg1, bitblock256_t arg2)
    21002104{
     
    21022106}
    21032107
    2104 //The total number of operations is 14
     2108//The total number of operations is 11.0
    21052109template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<64>::umax(bitblock256_t arg1, bitblock256_t arg2)
    21062110{
    2107         bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808UL)>();
     2111        bitblock256_t high_bit = simd256<64>::constant<(9223372036854775808ULL)>();
    21082112        return simd_xor(simd256<64>::max(simd_xor(arg1, high_bit), simd_xor(arg2, high_bit)), high_bit);
    21092113}
    21102114
    2111 //The total number of operations is 77
     2115//The total number of operations is 46.6666666667
    21122116template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<128>::umax(bitblock256_t arg1, bitblock256_t arg2)
    21132117{
     
    21182122}
    21192123
    2120 //The total number of operations is 264
     2124//The total number of operations is 132.0
    21212125template <> IDISA_ALWAYS_INLINE bitblock256_t simd256<256>::umax(bitblock256_t arg1, bitblock256_t arg2)
    21222126{
     
    21272131}
    21282132
    2129 //The total number of operations is 561
     2133//The total number of operations is 233.0
    21302134template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21312135{
     
    21332137}
    21342138
    2135 //The total number of operations is 412
     2139//The total number of operations is 186.0
    21362140template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21372141{
     
    21392143}
    21402144
    2141 //The total number of operations is 228
     2145//The total number of operations is 106.0
    21422146template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21432147{
     
    21452149}
    21462150
    2147 //The total number of operations is 38
     2151//The total number of operations is 25.0
    21482152template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21492153{
     
    21512155}
    21522156
    2153 //The total number of operations is 38
     2157//The total number of operations is 25.0
    21542158template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21552159{
     
    21572161}
    21582162
    2159 //The total number of operations is 450
     2163//The total number of operations is 179.0
    21602164template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21612165{
     
    21632167}
    21642168
    2165 //The total number of operations is 456
     2169//The total number of operations is 203.666666667
    21662170template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21672171{
     
    21692173}
    21702174
    2171 //The total number of operations is 164
     2175//The total number of operations is 81.1666666667
    21722176template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::umin_hl(bitblock256_t arg1, bitblock256_t arg2)
    21732177{
     
    21752179}
    21762180
    2177 //The total number of operations is 561
     2181//The total number of operations is 233.0
    21782182template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    21792183{
     
    21812185}
    21822186
    2183 //The total number of operations is 402
     2187//The total number of operations is 178.0
    21842188template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    21852189{
     
    21872191}
    21882192
    2189 //The total number of operations is 228
     2193//The total number of operations is 106.0
    21902194template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    21912195{
     
    21932197}
    21942198
    2195 //The total number of operations is 38
     2199//The total number of operations is 25.0
    21962200template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    21972201{
     
    21992203}
    22002204
    2201 //The total number of operations is 8
     2205//The total number of operations is 5.0
    22022206template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    22032207{
     
    22052209}
    22062210
    2207 //The total number of operations is 8
     2211//The total number of operations is 5.0
    22082212template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    22092213{
     
    22112215}
    22122216
    2213 //The total number of operations is 450
     2217//The total number of operations is 197.666666667
    22142218template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    22152219{
     
    22172221}
    22182222
    2219 //The total number of operations is 131
     2223//The total number of operations is 60.8333333333
    22202224template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::add_hl(bitblock256_t arg1, bitblock256_t arg2)
    22212225{
     
    22232227}
    22242228
    2225 //The total number of operations is 414
     2229//The total number of operations is 226.0
    22262230template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22272231{
     
    22312235}
    22322236
    2233 //The total number of operations is 318
     2237//The total number of operations is 183.0
    22342238template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22352239{
     
    22392243}
    22402244
    2241 //The total number of operations is 150
     2245//The total number of operations is 80.0
    22422246template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22432247{
     
    22472251}
    22482252
    2249 //The total number of operations is 8
     2253//The total number of operations is 5.0
    22502254template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22512255{
     
    22532257}
    22542258
    2255 //The total number of operations is 8
     2259//The total number of operations is 5.0
    22562260template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22572261{
     
    22592263}
    22602264
    2261 //The total number of operations is 266
     2265//The total number of operations is 120.0
    22622266template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22632267{
     
    22672271}
    22682272
    2269 //The total number of operations is 763
     2273//The total number of operations is 329.333333333
    22702274template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22712275{
     
    22752279}
    22762280
    2277 //The total number of operations is 2681
     2281//The total number of operations is 1001.16666667
    22782282template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::packss(bitblock256_t arg1, bitblock256_t arg2)
    22792283{
     
    22832287}
    22842288
    2285 //The total number of operations is 4
     2289//The total number of operations is 3.0
    22862290template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<8>::signmask(bitblock256_t arg1)
    22872291{
     
    22892293}
    22902294
    2291 //The total number of operations is 24
     2295//The total number of operations is 16.0
    22922296template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<16>::signmask(bitblock256_t arg1)
    22932297{
     
    22952299}
    22962300
    2297 //The total number of operations is 44
     2301//The total number of operations is 29.0
    22982302template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<32>::signmask(bitblock256_t arg1)
    22992303{
     
    23012305}
    23022306
    2303 //The total number of operations is 271
     2307//The total number of operations is 120.0
    23042308template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<64>::signmask(bitblock256_t arg1)
    23052309{
     
    23072311}
    23082312
    2309 //The total number of operations is 586
     2313//The total number of operations is 264.666666667
    23102314template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<128>::signmask(bitblock256_t arg1)
    23112315{
     
    23132317}
    23142318
    2315 //The total number of operations is 630
     2319//The total number of operations is 282.166666667
    23162320template <> IDISA_ALWAYS_INLINE uint64_t hsimd256<256>::signmask(bitblock256_t arg1)
    23172321{
     
    23192323}
    23202324
    2321 //The total number of operations is 274
     2325//The total number of operations is 112.0
    23222326template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23232327{
     
    23252329}
    23262330
    2327 //The total number of operations is 186
     2331//The total number of operations is 77.0
    23282332template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23292333{
     
    23312335}
    23322336
    2333 //The total number of operations is 98
     2337//The total number of operations is 42.0
    23342338template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23352339{
     
    23372341}
    23382342
    2339 //The total number of operations is 10
     2343//The total number of operations is 7.0
    23402344template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23412345{
     
    23432347}
    23442348
    2345 //The total number of operations is 10
     2349//The total number of operations is 7.0
    23462350template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23472351{
     
    23492353}
    23502354
    2351 //The total number of operations is 215
     2355//The total number of operations is 83.0
    23522356template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23532357{
     
    23552359}
    23562360
    2357 //The total number of operations is 127
     2361//The total number of operations is 48.0
    23582362template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23592363{
     
    23612365}
    23622366
    2363 //The total number of operations is 43
     2367//The total number of operations is 17.0
    23642368template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::packl(bitblock256_t arg1, bitblock256_t arg2)
    23652369{
     
    23672371}
    23682372
    2369 //The total number of operations is 286
     2373//The total number of operations is 120.0
    23702374template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::packh(bitblock256_t arg1, bitblock256_t arg2)
    23712375{
     
    23732377}
    23742378
    2375 //The total number of operations is 198
     2379//The total number of operations is 85.0
    23762380template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::packh(bitblock256_t arg1, bitblock256_t arg2)
    23772381{
     
    23792383}
    23802384
    2381 //The total number of operations is 110
     2385//The total number of operations is 50.0
    23822386template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::packh(bitblock256_t arg1, bitblock256_t arg2)
    23832387{
     
    23852389}
    23862390
    2387 //The total number of operations is 20
     2391//The total number of operations is 13.0
    23882392template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::packh(bitblock256_t arg1, bitblock256_t arg2)
    23892393{
     
    23912395}
    23922396
    2393 //The total number of operations is 20
     2397//The total number of operations is 13.0
    23942398template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::packh(bitblock256_t arg1, bitblock256_t arg2)
    23952399{
     
    23972401}
    23982402
    2399 //The total number of operations is 227
     2403//The total number of operations is 91.0
    24002404template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::packh(bitblock256_t arg1, bitblock256_t arg2)
    24012405{
     
    24032407}
    24042408
    2405 //The total number of operations is 315
     2409//The total number of operations is 144.666666667
    24062410template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::packh(bitblock256_t arg1, bitblock256_t arg2)
    24072411{
     
    24092413}
    24102414
    2411 //The total number of operations is 44
     2415//The total number of operations is 17.5
    24122416template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::packh(bitblock256_t arg1, bitblock256_t arg2)
    24132417{
     
    24152419}
    24162420
    2417 //The total number of operations is 561
     2421//The total number of operations is 233.0
    24182422template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24192423{
     
    24212425}
    24222426
    2423 //The total number of operations is 413
     2427//The total number of operations is 187.0
    24242428template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24252429{
     
    24272431}
    24282432
    2429 //The total number of operations is 231
     2433//The total number of operations is 109.0
    24302434template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24312435{
     
    24332437}
    24342438
    2435 //The total number of operations is 38
     2439//The total number of operations is 25.0
    24362440template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24372441{
     
    24392443}
    24402444
    2441 //The total number of operations is 38
     2445//The total number of operations is 25.0
    24422446template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24432447{
     
    24452449}
    24462450
    2447 //The total number of operations is 450
     2451//The total number of operations is 179.0
    24482452template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24492453{
     
    24512455}
    24522456
    2453 //The total number of operations is 453
     2457//The total number of operations is 200.666666667
    24542458template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24552459{
     
    24572461}
    24582462
    2459 //The total number of operations is 175
     2463//The total number of operations is 89.1666666667
    24602464template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::min_hl(bitblock256_t arg1, bitblock256_t arg2)
    24612465{
     
    24632467}
    24642468
    2465 //The total number of operations is 344
     2469//The total number of operations is 170.0
    24662470template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<2>::packus(bitblock256_t arg1, bitblock256_t arg2)
    24672471{
     
    24732477}
    24742478
    2475 //The total number of operations is 286
     2479//The total number of operations is 157.0
    24762480template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<4>::packus(bitblock256_t arg1, bitblock256_t arg2)
    24772481{
     
    24832487}
    24842488
    2485 //The total number of operations is 144
     2489//The total number of operations is 76.0
    24862490template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<8>::packus(bitblock256_t arg1, bitblock256_t arg2)
    24872491{
     
    24932497}
    24942498
    2495 //The total number of operations is 8
     2499//The total number of operations is 5.0
    24962500template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<16>::packus(bitblock256_t arg1, bitblock256_t arg2)
    24972501{
     
    24992503}
    25002504
    2501 //The total number of operations is 8
     2505//The total number of operations is 5.0
    25022506template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<32>::packus(bitblock256_t arg1, bitblock256_t arg2)
    25032507{
     
    25052509}
    25062510
    2507 //The total number of operations is 241
     2511//The total number of operations is 103.0
    25082512template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<64>::packus(bitblock256_t arg1, bitblock256_t arg2)
    25092513{
     
    25152519}
    25162520
    2517 //The total number of operations is 277
     2521//The total number of operations is 128.0
    25182522template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<128>::packus(bitblock256_t arg1, bitblock256_t arg2)
    25192523{
     
    25252529}
    25262530
    2527 //The total number of operations is 262
     2531//The total number of operations is 112.833333333
    25282532template <> IDISA_ALWAYS_INLINE bitblock256_t hsimd256<256>::packus(bitblock256_t arg1, bitblock256_t arg2)
    25292533{
     
    25322536}
    25332537
    2534 //The total number of operations is 64
     2538//The total number of operations is 49.0
    25352539template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25362540{
     
    25382542}
    25392543
    2540 //The total number of operations is 44
     2544//The total number of operations is 33.0
    25412545template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25422546{
     
    25442548}
    25452549
    2546 //The total number of operations is 24
     2550//The total number of operations is 17.0
    25472551template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25482552{
     
    25502554}
    25512555
    2552 //The total number of operations is 4
     2556//The total number of operations is 1.0
    25532557template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25542558{
     
    25582562}
    25592563
    2560 //The total number of operations is 4
     2564//The total number of operations is 1.0
    25612565template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25622566{
     
    25662570}
    25672571
    2568 //The total number of operations is 4
     2572//The total number of operations is 1.0
    25692573template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25702574{
     
    25742578}
    25752579
    2576 //The total number of operations is 4
     2580//The total number of operations is 1.0
    25772581template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25782582{
     
    25822586}
    25832587
    2584 //The total number of operations is 48
     2588//The total number of operations is 23.6666666667
    25852589template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::mergel(bitblock256_t arg1, bitblock256_t arg2)
    25862590{
     
    25882592}
    25892593
    2590 //The total number of operations is 64
     2594//The total number of operations is 51.0
    25912595template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    25922596{
     
    25942598}
    25952599
    2596 //The total number of operations is 44
     2600//The total number of operations is 35.0
    25972601template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    25982602{
     
    26002604}
    26012605
    2602 //The total number of operations is 24
     2606//The total number of operations is 19.0
    26032607template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26042608{
     
    26062610}
    26072611
    2608 //The total number of operations is 4
     2612//The total number of operations is 3.0
    26092613template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26102614{
     
    26142618}
    26152619
    2616 //The total number of operations is 4
     2620//The total number of operations is 3.0
    26172621template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26182622{
     
    26222626}
    26232627
    2624 //The total number of operations is 4
     2628//The total number of operations is 3.0
    26252629template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26262630{
     
    26302634}
    26312635
    2632 //The total number of operations is 4
     2636//The total number of operations is 3.0
    26332637template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26342638{
     
    26382642}
    26392643
    2640 //The total number of operations is 48
     2644//The total number of operations is 25.6666666667
    26412645template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::mergeh(bitblock256_t arg1, bitblock256_t arg2)
    26422646{
     
    26442648}
    26452649
    2646 //The total number of operations is 52
     2650//The total number of operations is 41.0
    26472651template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::zeroextendh(bitblock256_t arg1)
    26482652{
     
    26502654}
    26512655
    2652 //The total number of operations is 32
     2656//The total number of operations is 25.0
    26532657template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::zeroextendh(bitblock256_t arg1)
    26542658{
     
    26562660}
    26572661
    2658 //The total number of operations is 12
     2662//The total number of operations is 9.0
    26592663template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::zeroextendh(bitblock256_t arg1)
    26602664{
     
    26622666}
    26632667
    2664 //The total number of operations is 11
     2668//The total number of operations is 8.0
    26652669template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::zeroextendh(bitblock256_t arg1)
    26662670{
     
    26682672}
    26692673
    2670 //The total number of operations is 11
     2674//The total number of operations is 8.0
    26712675template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::zeroextendh(bitblock256_t arg1)
    26722676{
     
    26742678}
    26752679
    2676 //The total number of operations is 11
     2680//The total number of operations is 8.0
    26772681template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::zeroextendh(bitblock256_t arg1)
    26782682{
     
    26802684}
    26812685
    2682 //The total number of operations is 68
     2686//The total number of operations is 35.0
    26832687template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::zeroextendh(bitblock256_t arg1)
    26842688{
     
    26862690}
    26872691
    2688 //The total number of operations is 41
     2692//The total number of operations is 14.5
    26892693template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::zeroextendh(bitblock256_t arg1)
    26902694{
     
    26922696}
    26932697
    2694 //The total number of operations is 52
     2698//The total number of operations is 39.0
    26952699template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::zeroextendl(bitblock256_t arg1)
    26962700{
     
    26982702}
    26992703
    2700 //The total number of operations is 32
     2704//The total number of operations is 23.0
    27012705template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::zeroextendl(bitblock256_t arg1)
    27022706{
     
    27042708}
    27052709
    2706 //The total number of operations is 12
     2710//The total number of operations is 7.0
    27072711template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::zeroextendl(bitblock256_t arg1)
    27082712{
     
    27102714}
    27112715
    2712 //The total number of operations is 11
     2716//The total number of operations is 6.0
    27132717template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::zeroextendl(bitblock256_t arg1)
    27142718{
     
    27162720}
    27172721
    2718 //The total number of operations is 11
     2722//The total number of operations is 6.0
    27192723template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::zeroextendl(bitblock256_t arg1)
    27202724{
     
    27222726}
    27232727
    2724 //The total number of operations is 11
     2728//The total number of operations is 6.0
    27252729template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::zeroextendl(bitblock256_t arg1)
    27262730{
     
    27282732}
    27292733
    2730 //The total number of operations is 68
     2734//The total number of operations is 33.0
    27312735template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::zeroextendl(bitblock256_t arg1)
    27322736{
     
    27342738}
    27352739
    2736 //The total number of operations is 1
     2740//The total number of operations is 1.0
    27372741template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::zeroextendl(bitblock256_t arg1)
    27382742{
     
    27402744}
    27412745
    2742 //The total number of operations is 69
     2746//The total number of operations is 54.0
    27432747template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::signextendh(bitblock256_t arg1)
    27442748{
     
    27462750}
    27472751
    2748 //The total number of operations is 89
     2752//The total number of operations is 59.0
    27492753template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::signextendh(bitblock256_t arg1)
    27502754{
     
    27522756}
    27532757
    2754 //The total number of operations is 45
     2758//The total number of operations is 32.0
    27552759template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::signextendh(bitblock256_t arg1)
    27562760{
     
    27582762}
    27592763
    2760 //The total number of operations is 22
     2764//The total number of operations is 15.0
    27612765template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::signextendh(bitblock256_t arg1)
    27622766{
     
    27642768}
    27652769
    2766 //The total number of operations is 22
     2770//The total number of operations is 15.0
    27672771template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::signextendh(bitblock256_t arg1)
    27682772{
     
    27702774}
    27712775
    2772 //The total number of operations is 54
     2776//The total number of operations is 31.0
    27732777template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::signextendh(bitblock256_t arg1)
    27742778{
     
    27762780}
    27772781
    2778 //The total number of operations is 235
     2782//The total number of operations is 90.6666666667
    27792783template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::signextendh(bitblock256_t arg1)
    27802784{
     
    27822786}
    27832787
    2784 //The total number of operations is 220
     2788//The total number of operations is 59.0
    27852789template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::signextendh(bitblock256_t arg1)
    27862790{
     
    27882792}
    27892793
    2790 //The total number of operations is 69
     2794//The total number of operations is 52.0
    27912795template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<1>::signextendl(bitblock256_t arg1)
    27922796{
     
    27942798}
    27952799
    2796 //The total number of operations is 89
     2800//The total number of operations is 57.0
    27972801template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<2>::signextendl(bitblock256_t arg1)
    27982802{
     
    28002804}
    28012805
    2802 //The total number of operations is 45
     2806//The total number of operations is 30.0
    28032807template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<4>::signextendl(bitblock256_t arg1)
    28042808{
     
    28062810}
    28072811
    2808 //The total number of operations is 22
     2812//The total number of operations is 13.0
    28092813template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<8>::signextendl(bitblock256_t arg1)
    28102814{
     
    28122816}
    28132817
    2814 //The total number of operations is 22
     2818//The total number of operations is 13.0
    28152819template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<16>::signextendl(bitblock256_t arg1)
    28162820{
     
    28182822}
    28192823
    2820 //The total number of operations is 54
     2824//The total number of operations is 29.0
    28212825template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<32>::signextendl(bitblock256_t arg1)
    28222826{
     
    28242828}
    28252829
    2826 //The total number of operations is 235
     2830//The total number of operations is 88.6666666667
    28272831template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<64>::signextendl(bitblock256_t arg1)
    28282832{
     
    28302834}
    28312835
    2832 //The total number of operations is 260
     2836//The total number of operations is 73.0
    28332837template <> IDISA_ALWAYS_INLINE bitblock256_t esimd256<128>::signextendl(bitblock256_t arg1)
    28342838{
     
    28362840}
    28372841
    2838 //The total number of operations is 82
     2842//The total number of operations is 29.5
    28392843template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28402844{
     
    28422846}
    28432847
    2844 //The total number of operations is 82
     2848//The total number of operations is 29.5
    28452849template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28462850{
     
    28482852}
    28492853
    2850 //The total number of operations is 82
     2854//The total number of operations is 29.5
    28512855template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28522856{
     
    28542858}
    28552859
    2856 //The total number of operations is 82
     2860//The total number of operations is 29.5
    28572861template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28582862{
     
    28602864}
    28612865
    2862 //The total number of operations is 82
     2866//The total number of operations is 29.5
    28632867template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28642868{
     
    28662870}
    28672871
    2868 //The total number of operations is 82
     2872//The total number of operations is 29.5
    28692873template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<64>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28702874{
     
    28722876}
    28732877
    2874 //The total number of operations is 82
     2878//The total number of operations is 29.5
    28752879template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<128>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28762880{
     
    28782882}
    28792883
    2880 //The total number of operations is 82
     2884//The total number of operations is 29.5
    28812885template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<256>::dsrli(bitblock256_t arg1, bitblock256_t arg2)
    28822886{
     
    28842888}
    28852889
    2886 //The total number of operations is 1
     2890//The total number of operations is 1.0
    28872891template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<1>::fill(uint64_t val1)
    28882892{
     
    28902894}
    28912895
    2892 //The total number of operations is 1
     2896//The total number of operations is 1.0
    28932897template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::fill(uint64_t val1)
    28942898{
     
    28962900}
    28972901
    2898 //The total number of operations is 1
     2902//The total number of operations is 1.0
    28992903template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::fill(uint64_t val1)
    29002904{
     
    29022906}
    29032907
    2904 //The total number of operations is 1
     2908//The total number of operations is 1.0
    29052909template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::fill(uint64_t val1)
    29062910{
     
    29082912}
    29092913
    2910 //The total number of operations is 1
     2914//The total number of operations is 1.0
    29112915template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::fill(uint64_t val1)
    29122916{
     
    29142918}
    29152919
    2916 //The total number of operations is 1
     2920//The total number of operations is 1.0
    29172921template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::fill(uint64_t val1)
    29182922{
     
    29202924}
    29212925
    2922 //The total number of operations is 2
     2926//The total number of operations is 1.5
    29232927template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<1>::extract(bitblock256_t arg1)
    29242928{
     
    29262930}
    29272931
    2928 //The total number of operations is 2
     2932//The total number of operations is 1.5
    29292933template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<2>::extract(bitblock256_t arg1)
    29302934{
     
    29322936}
    29332937
    2934 //The total number of operations is 2
     2938//The total number of operations is 1.5
    29352939template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<4>::extract(bitblock256_t arg1)
    29362940{
     
    29382942}
    29392943
    2940 //The total number of operations is 2
     2944//The total number of operations is 1.5
    29412945template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<8>::extract(bitblock256_t arg1)
    29422946{
     
    29442948}
    29452949
    2946 //The total number of operations is 2
     2950//The total number of operations is 1.5
    29472951template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<16>::extract(bitblock256_t arg1)
    29482952{
     
    29502954}
    29512955
    2952 //The total number of operations is 2
     2956//The total number of operations is 1.5
    29532957template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<32>::extract(bitblock256_t arg1)
    29542958{
    2955         return ((pos < 4) ? (((uint64_t)((4294967296UL)-1))&_mm_extract_epi32(avx_select_lo128(arg1), (int32_t)(pos))) : (((uint64_t)((4294967296UL)-1))&_mm_extract_epi32(avx_select_hi128(arg1), (int32_t)((pos-4)))));
    2956 }
    2957 
    2958 //The total number of operations is 4
     2959        return ((pos < 4) ? (((uint64_t)((4294967296ULL)-1))&_mm_extract_epi32(avx_select_lo128(arg1), (int32_t)(pos))) : (((uint64_t)((4294967296ULL)-1))&_mm_extract_epi32(avx_select_hi128(arg1), (int32_t)((pos-4)))));
     2960}
     2961
     2962//The total number of operations is 3.0
    29592963template <> template <uint64_t pos> IDISA_ALWAYS_INLINE uint64_t mvmd256<64>::extract(bitblock256_t arg1)
    29602964{
     
    29622966}
    29632967
    2964 //The total number of operations is 30
     2968//The total number of operations is 23.5
    29652969template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<1>::splat(bitblock256_t arg1)
    29662970{
     
    29702974}
    29712975
    2972 //The total number of operations is 21
     2976//The total number of operations is 16.5
    29732977template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::splat(bitblock256_t arg1)
    29742978{
     
    29782982}
    29792983
    2980 //The total number of operations is 12
     2984//The total number of operations is 9.5
    29812985template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::splat(bitblock256_t arg1)
    29822986{
     
    29862990}
    29872991
    2988 //The total number of operations is 3
     2992//The total number of operations is 2.5
    29892993template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::splat(bitblock256_t arg1)
    29902994{
     
    29922996}
    29932997
    2994 //The total number of operations is 3
     2998//The total number of operations is 2.5
    29952999template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::splat(bitblock256_t arg1)
    29963000{
     
    29983002}
    29993003
    3000 //The total number of operations is 3
     3004//The total number of operations is 2.5
    30013005template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::splat(bitblock256_t arg1)
    30023006{
     
    30043008}
    30053009
    3006 //The total number of operations is 9
     3010//The total number of operations is 8.0
    30073011template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<64>::splat(bitblock256_t arg1)
    30083012{
     
    30103014}
    30113015
    3012 //The total number of operations is 21
     3016//The total number of operations is 19.0
    30133017template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<128>::splat(bitblock256_t arg1)
    30143018{
     
    30163020}
    30173021
    3018 //The total number of operations is 45
     3022//The total number of operations is 41.0
    30193023template <> template <uint64_t pos> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<256>::splat(bitblock256_t arg1)
    30203024{
     
    30223026}
    30233027
    3024 //The total number of operations is 15
     3028//The total number of operations is 15.0
    30253029template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    30263030{
     
    30283032}
    30293033
    3030 //The total number of operations is 7
     3034//The total number of operations is 7.0
    30313035template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    30323036{
     
    30343038}
    30353039
    3036 //The total number of operations is 3
     3040//The total number of operations is 3.0
    30373041template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    30383042{
     
    30403044}
    30413045
    3042 //The total number of operations is 1
     3046//The total number of operations is 1.0
    30433047template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    30443048{
     
    30463050}
    30473051
    3048 //The total number of operations is 5
     3052//The total number of operations is 5.0
    30493053template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::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)
    30503054{
     
    30523056}
    30533057
    3054 //The total number of operations is 5
     3058//The total number of operations is 5.0
    30553059template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<1>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30563060{
     
    30583062}
    30593063
    3060 //The total number of operations is 5
     3064//The total number of operations is 5.0
    30613065template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30623066{
     
    30643068}
    30653069
    3066 //The total number of operations is 5
     3070//The total number of operations is 5.0
    30673071template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30683072{
     
    30703074}
    30713075
    3072 //The total number of operations is 5
     3076//The total number of operations is 5.0
    30733077template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30743078{
     
    30763080}
    30773081
    3078 //The total number of operations is 3
     3082//The total number of operations is 3.0
    30793083template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30803084{
     
    30823086}
    30833087
    3084 //The total number of operations is 1
     3088//The total number of operations is 1.0
    30853089template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::fill4(uint64_t val1, uint64_t val2, uint64_t val3, uint64_t val4)
    30863090{
     
    30883092}
    30893093
    3090 //The total number of operations is 41
     3094//The total number of operations is 14.5
    30913095template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::srli(bitblock256_t arg1)
    30923096{
     
    30943098}
    30953099
    3096 //The total number of operations is 41
     3100//The total number of operations is 14.5
    30973101template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::srli(bitblock256_t arg1)
    30983102{
    3099         return mvmd256<(2)>::srli<(sh*2)>(arg1);
    3100 }
    3101 
    3102 //The total number of operations is 41
     3103        return simd256<256>::srli<(sh*4)>(arg1);
     3104}
     3105
     3106//The total number of operations is 14.5
    31033107template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::srli(bitblock256_t arg1)
    31043108{
     
    31063110}
    31073111
    3108 //The total number of operations is 41
     3112//The total number of operations is 14.5
    31093113template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::srli(bitblock256_t arg1)
    31103114{
    3111         return mvmd256<(8)>::srli<(sh*2)>(arg1);
    3112 }
    3113 
    3114 //The total number of operations is 41
     3115        return simd256<256>::srli<(sh*16)>(arg1);
     3116}
     3117
     3118//The total number of operations is 14.5
    31153119template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::srli(bitblock256_t arg1)
    31163120{
     
    31183122}
    31193123
    3120 //The total number of operations is 41
     3124//The total number of operations is 14.5
    31213125template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<64>::srli(bitblock256_t arg1)
    31223126{
     
    31243128}
    31253129
    3126 //The total number of operations is 41
     3130//The total number of operations is 14.5
    31273131template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<128>::srli(bitblock256_t arg1)
    31283132{
    3129         return mvmd256<(64)>::srli<(sh*2)>(arg1);
    3130 }
    3131 
    3132 //The total number of operations is 41
     3133        return simd256<256>::srli<(sh*128)>(arg1);
     3134}
     3135
     3136//The total number of operations is 14.5
    31333137template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<256>::srli(bitblock256_t arg1)
    31343138{
     
    31363140}
    31373141
    3138 //The total number of operations is 1
     3142//The total number of operations is 1.0
    31393143template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<1>::fill2(uint64_t val1, uint64_t val2)
    31403144{
     
    31423146}
    31433147
    3144 //The total number of operations is 1
     3148//The total number of operations is 1.0
    31453149template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::fill2(uint64_t val1, uint64_t val2)
    31463150{
     
    31483152}
    31493153
    3150 //The total number of operations is 1
     3154//The total number of operations is 1.0
    31513155template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::fill2(uint64_t val1, uint64_t val2)
    31523156{
     
    31543158}
    31553159
    3156 //The total number of operations is 1
     3160//The total number of operations is 1.0
    31573161template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::fill2(uint64_t val1, uint64_t val2)
    31583162{
     
    31603164}
    31613165
    3162 //The total number of operations is 1
     3166//The total number of operations is 1.0
    31633167template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::fill2(uint64_t val1, uint64_t val2)
    31643168{
     
    31663170}
    31673171
    3168 //The total number of operations is 5
     3172//The total number of operations is 5.0
    31693173template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::fill2(uint64_t val1, uint64_t val2)
    31703174{
     
    31723176}
    31733177
    3174 //The total number of operations is 82
     3178//The total number of operations is 29.5
    31753179template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    31763180{
     
    31783182}
    31793183
    3180 //The total number of operations is 82
     3184//The total number of operations is 29.5
    31813185template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    31823186{
     
    31843188}
    31853189
    3186 //The total number of operations is 82
     3190//The total number of operations is 29.5
    31873191template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    31883192{
     
    31903194}
    31913195
    3192 //The total number of operations is 82
     3196//The total number of operations is 29.5
    31933197template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    31943198{
     
    31963200}
    31973201
    3198 //The total number of operations is 82
     3202//The total number of operations is 29.5
    31993203template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    32003204{
     
    32023206}
    32033207
    3204 //The total number of operations is 82
     3208//The total number of operations is 29.5
    32053209template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<64>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    32063210{
     
    32083212}
    32093213
    3210 //The total number of operations is 82
     3214//The total number of operations is 29.5
    32113215template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<128>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    32123216{
     
    32143218}
    32153219
    3216 //The total number of operations is 82
     3220//The total number of operations is 29.5
    32173221template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<256>::dslli(bitblock256_t arg1, bitblock256_t arg2)
    32183222{
     
    32203224}
    32213225
    3222 //The total number of operations is 40
     3226//The total number of operations is 14.0
    32233227template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<2>::slli(bitblock256_t arg1)
    32243228{
     
    32263230}
    32273231
    3228 //The total number of operations is 40
     3232//The total number of operations is 14.0
    32293233template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<4>::slli(bitblock256_t arg1)
    32303234{
     
    32323236}
    32333237
    3234 //The total number of operations is 40
     3238//The total number of operations is 14.0
    32353239template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<8>::slli(bitblock256_t arg1)
    32363240{
     
    32383242}
    32393243
    3240 //The total number of operations is 40
     3244//The total number of operations is 14.0
    32413245template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<16>::slli(bitblock256_t arg1)
    32423246{
     
    32443248}
    32453249
    3246 //The total number of operations is 40
     3250//The total number of operations is 14.0
    32473251template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::slli(bitblock256_t arg1)
    32483252{
     
    32503254}
    32513255
    3252 //The total number of operations is 40
     3256//The total number of operations is 14.0
    32533257template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<64>::slli(bitblock256_t arg1)
    32543258{
     
    32563260}
    32573261
    3258 //The total number of operations is 40
     3262//The total number of operations is 14.0
    32593263template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<128>::slli(bitblock256_t arg1)
    32603264{
     
    32623266}
    32633267
    3264 //The total number of operations is 40
     3268//The total number of operations is 14.0
    32653269template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<256>::slli(bitblock256_t arg1)
    32663270{
     
    32683272}
    32693273
    3270 //The total number of operations is 13
     3274//The total number of operations is 13.0
    32713275template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    32723276{
     
    32743278}
    32753279
    3276 //The total number of operations is 13
     3280//The total number of operations is 13.0
    32773281template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    32783282{
     
    32803284}
    32813285
    3282 //The total number of operations is 7
     3286//The total number of operations is 7.0
    32833287template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    32843288{
     
    32863290}
    32873291
    3288 //The total number of operations is 3
     3292//The total number of operations is 3.0
    32893293template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    32903294{
     
    32923296}
    32933297
    3294 //The total number of operations is 1
     3298//The total number of operations is 1.0
    32953299template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<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)
    32963300{
     
    32983302}
    32993303
    3300 //The total number of operations is 5
     3304//The total number of operations is 5.0
    33013305template <> IDISA_ALWAYS_INLINE bitblock256_t mvmd256<32>::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)
    33023306{
     
    33043308}
    33053309
    3306 //The total number of operations is 1
     3310//The total number of operations is 1.0
    33073311IDISA_ALWAYS_INLINE bitblock256_t bitblock256::load_unaligned(float const* arg1)
    33083312{
     
    33103314}
    33113315
    3312 //The total number of operations is 41
     3316//The total number of operations is 14.5
    33133317template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t bitblock256::srli(bitblock256_t arg1)
    33143318{
     
    33163320}
    33173321
    3318 //The total number of operations is 1
     3322//The total number of operations is 1.0
    33193323IDISA_ALWAYS_INLINE void bitblock256::store_aligned(float* arg1, bitblock256_t arg2)
    33203324{
     
    33223326}
    33233327
    3324 //The total number of operations is 209
     3328//The total number of operations is 118.5
    33253329IDISA_ALWAYS_INLINE uint64_t bitblock256::popcount(bitblock256_t arg1)
    33263330{
     
    33283332}
    33293333
    3330 //The total number of operations is 2
     3334//The total number of operations is 2.0
    33313335IDISA_ALWAYS_INLINE bool bitblock256::all(bitblock256_t arg1)
    33323336{
     
    33343338}
    33353339
    3336 //The total number of operations is 40
     3340//The total number of operations is 14.0
    33373341template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock256_t bitblock256::slli(bitblock256_t arg1)
    33383342{
     
    33403344}
    33413345
    3342 //The total number of operations is 1
     3346//The total number of operations is 1.0
    33433347IDISA_ALWAYS_INLINE bool bitblock256::any(bitblock256_t arg1)
    33443348{
     
    33463350}
    33473351
    3348 //The total number of operations is 1
     3352//The total number of operations is 1.0
    33493353IDISA_ALWAYS_INLINE bitblock256_t bitblock256::load_aligned(float const* arg1)
    33503354{
     
    33523356}
    33533357
    3354 //The total number of operations is 1
     3358//The total number of operations is 1.0
    33553359IDISA_ALWAYS_INLINE void bitblock256::store_unaligned(float* arg1, bitblock256_t arg2)
    33563360{
  • trunk/lib/idisa_cpp/idisa_neon.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_NEON_CPP
    29#define IDISA_NEON_CPP
     
    468475#define neon_shift_left_64_bits(x) \
    469476        vextq_u64(vdupq_n_u64(0), (bitblock128_t)(x), 1)
    470 //The total number of operations is 2
     477//The total number of operations is 2.0
    471478IDISA_ALWAYS_INLINE bitblock128_t simd_nor(bitblock128_t arg1, bitblock128_t arg2)
    472479{
     
    474481}
    475482
    476 //The total number of operations is 1
     483//The total number of operations is 1.0
    477484IDISA_ALWAYS_INLINE bitblock128_t simd_not(bitblock128_t arg1)
    478485{
     
    480487}
    481488
    482 //The total number of operations is 1
     489//The total number of operations is 1.0
    483490IDISA_ALWAYS_INLINE bitblock128_t simd_andc(bitblock128_t arg1, bitblock128_t arg2)
    484491{
     
    486493}
    487494
    488 //The total number of operations is 1
     495//The total number of operations is 1.0
    489496IDISA_ALWAYS_INLINE bitblock128_t simd_or(bitblock128_t arg1, bitblock128_t arg2)
    490497{
     
    492499}
    493500
    494 //The total number of operations is 1
     501//The total number of operations is 1.0
    495502IDISA_ALWAYS_INLINE bitblock128_t simd_and(bitblock128_t arg1, bitblock128_t arg2)
    496503{
     
    498505}
    499506
    500 //The total number of operations is 1
     507//The total number of operations is 1.0
    501508IDISA_ALWAYS_INLINE bitblock128_t simd_xor(bitblock128_t arg1, bitblock128_t arg2)
    502509{
     
    504511}
    505512
    506 //The total number of operations is 1
     513//The total number of operations is 1.0
    507514template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::max(bitblock128_t arg1, bitblock128_t arg2)
    508515{
     
    510517}
    511518
    512 //The total number of operations is 13
     519//The total number of operations is 13.0
    513520template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::max(bitblock128_t arg1, bitblock128_t arg2)
    514521{
     
    520527}
    521528
    522 //The total number of operations is 7
     529//The total number of operations is 6.0
    523530template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::max(bitblock128_t arg1, bitblock128_t arg2)
    524531{
     
    526533}
    527534
    528 //The total number of operations is 1
     535//The total number of operations is 1.0
    529536template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::max(bitblock128_t arg1, bitblock128_t arg2)
    530537{
     
    532539}
    533540
    534 //The total number of operations is 1
     541//The total number of operations is 1.0
    535542template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::max(bitblock128_t arg1, bitblock128_t arg2)
    536543{
     
    538545}
    539546
    540 //The total number of operations is 1
     547//The total number of operations is 1.0
    541548template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::max(bitblock128_t arg1, bitblock128_t arg2)
    542549{
     
    544551}
    545552
    546 //The total number of operations is 12
     553//The total number of operations is 11.5
    547554template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2)
    548555{
    549         bitblock128_t hiAns = simd128<(32)>::max(arg1, arg2);
    550         bitblock128_t loAns = simd128<(32)>::umax(arg1, arg2);
    551         bitblock128_t eqMask1 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg1));
    552         bitblock128_t eqMask2 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg2));
    553         return simd128<1>::ifh(simd128<64>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2));
    554 }
    555 
    556 //The total number of operations is 46
     556        return simd128<1>::ifh(simd128<64>::gt(arg1, arg2), arg1, arg2);
     557}
     558
     559//The total number of operations is 40.6666666667
    557560template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2)
    558561{
    559         bitblock128_t hiAns = simd128<(64)>::max(arg1, arg2);
    560         bitblock128_t loAns = simd128<(64)>::umax(arg1, arg2);
    561         bitblock128_t eqMask1 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg1));
    562         bitblock128_t eqMask2 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg2));
    563         return simd128<1>::ifh(simd128<128>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2));
    564 }
    565 
    566 //The total number of operations is 1
     562        return simd128<1>::ifh(simd128<128>::gt(arg1, arg2), arg1, arg2);
     563}
     564
     565//The total number of operations is 1.0
    567566template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::mult(bitblock128_t arg1, bitblock128_t arg2)
    568567{
     
    570569}
    571570
    572 //The total number of operations is 23
     571//The total number of operations is 17.6666666667
    573572template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::mult(bitblock128_t arg1, bitblock128_t arg2)
    574573{
     
    578577}
    579578
    580 //The total number of operations is 8
     579//The total number of operations is 7.5
    581580template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::mult(bitblock128_t arg1, bitblock128_t arg2)
    582581{
     
    587586}
    588587
    589 //The total number of operations is 1
     588//The total number of operations is 1.0
    590589template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::mult(bitblock128_t arg1, bitblock128_t arg2)
    591590{
     
    593592}
    594593
    595 //The total number of operations is 1
     594//The total number of operations is 1.0
    596595template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::mult(bitblock128_t arg1, bitblock128_t arg2)
    597596{
     
    599598}
    600599
    601 //The total number of operations is 1
     600//The total number of operations is 1.0
    602601template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::mult(bitblock128_t arg1, bitblock128_t arg2)
    603602{
     
    605604}
    606605
    607 //The total number of operations is 1
     606//The total number of operations is 1.0
    608607template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::gt(bitblock128_t arg1, bitblock128_t arg2)
    609608{
     
    611610}
    612611
    613 //The total number of operations is 15
     612//The total number of operations is 13.5
    614613template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::gt(bitblock128_t arg1, bitblock128_t arg2)
    615614{
    616         bitblock128_t hiAns = simd128<(1)>::gt(arg1, arg2);
    617         bitblock128_t loAns = simd128<(1)>::ugt(arg1, arg2);
    618         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    619         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    620         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    621 }
    622 
    623 //The total number of operations is 6
     615        bitblock128_t tmp = simd_not(arg1);
     616        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)));
     617        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     618}
     619
     620//The total number of operations is 5.0
    624621template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::gt(bitblock128_t arg1, bitblock128_t arg2)
    625622{
     
    627624}
    628625
    629 //The total number of operations is 1
     626//The total number of operations is 1.0
    630627template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::gt(bitblock128_t arg1, bitblock128_t arg2)
    631628{
     
    633630}
    634631
    635 //The total number of operations is 1
     632//The total number of operations is 1.0
    636633template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::gt(bitblock128_t arg1, bitblock128_t arg2)
    637634{
     
    639636}
    640637
    641 //The total number of operations is 1
     638//The total number of operations is 1.0
    642639template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::gt(bitblock128_t arg1, bitblock128_t arg2)
    643640{
     
    645642}
    646643
    647 //The total number of operations is 11
     644//The total number of operations is 10.5
    648645template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2)
    649646{
     
    655652}
    656653
    657 //The total number of operations is 48
     654//The total number of operations is 39.6666666667
    658655template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2)
    659656{
     
    665662}
    666663
    667 //The total number of operations is 1
     664//The total number of operations is 1.0
    668665template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ult(bitblock128_t arg1, bitblock128_t arg2)
    669666{
     
    671668}
    672669
    673 //The total number of operations is 14
     670//The total number of operations is 12.5
    674671template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ult(bitblock128_t arg1, bitblock128_t arg2)
    675672{
    676         bitblock128_t tmpAns = simd128<(1)>::ult(arg1, arg2);
    677         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    678         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    679         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    680 }
    681 
    682 //The total number of operations is 8
     673        bitblock128_t tmp = simd_not(arg1);
     674        bitblock128_t tmpAns = simd_or(simd_and(tmp, arg2), simd_and(simd128<128>::slli<1>(simd_and(tmp, arg2)), simd_or(tmp, arg2)));
     675        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     676}
     677
     678//The total number of operations is 7.0
    683679template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ult(bitblock128_t arg1, bitblock128_t arg2)
    684680{
     
    687683}
    688684
    689 //The total number of operations is 3
     685//The total number of operations is 3.0
    690686template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ult(bitblock128_t arg1, bitblock128_t arg2)
    691687{
     
    694690}
    695691
    696 //The total number of operations is 3
     692//The total number of operations is 3.0
    697693template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ult(bitblock128_t arg1, bitblock128_t arg2)
    698694{
     
    701697}
    702698
    703 //The total number of operations is 3
     699//The total number of operations is 3.0
    704700template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ult(bitblock128_t arg1, bitblock128_t arg2)
    705701{
     
    708704}
    709705
    710 //The total number of operations is 10
     706//The total number of operations is 9.5
    711707template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2)
    712708{
     
    717713}
    718714
    719 //The total number of operations is 37
     715//The total number of operations is 29.1666666667
    720716template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2)
    721717{
     
    726722}
    727723
    728 //The total number of operations is 1
     724//The total number of operations is 1.0
    729725template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::lt(bitblock128_t arg1, bitblock128_t arg2)
    730726{
     
    732728}
    733729
    734 //The total number of operations is 15
     730//The total number of operations is 13.5
    735731template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::lt(bitblock128_t arg1, bitblock128_t arg2)
    736732{
    737         bitblock128_t hiAns = simd128<(1)>::lt(arg1, arg2);
    738         bitblock128_t loAns = simd128<(1)>::ult(arg1, arg2);
    739         bitblock128_t mask = simd_and(loAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    740         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    741         return simd_or(simd128<2>::srai<(1)>(hiAns), mask);
    742 }
    743 
    744 //The total number of operations is 6
     733        bitblock128_t tmp = simd_not(arg2);
     734        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)));
     735        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     736}
     737
     738//The total number of operations is 5.0
    745739template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::lt(bitblock128_t arg1, bitblock128_t arg2)
    746740{
     
    748742}
    749743
    750 //The total number of operations is 1
     744//The total number of operations is 1.0
    751745template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::lt(bitblock128_t arg1, bitblock128_t arg2)
    752746{
     
    754748}
    755749
    756 //The total number of operations is 1
     750//The total number of operations is 1.0
    757751template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::lt(bitblock128_t arg1, bitblock128_t arg2)
    758752{
     
    760754}
    761755
    762 //The total number of operations is 1
     756//The total number of operations is 1.0
    763757template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::lt(bitblock128_t arg1, bitblock128_t arg2)
    764758{
     
    766760}
    767761
    768 //The total number of operations is 11
     762//The total number of operations is 10.5
    769763template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2)
    770764{
     
    776770}
    777771
    778 //The total number of operations is 48
     772//The total number of operations is 39.6666666667
    779773template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2)
    780774{
     
    786780}
    787781
    788 //The total number of operations is 2
     782//The total number of operations is 2.0
    789783template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srli(bitblock128_t arg1)
    790784{
     
    792786}
    793787
    794 //The total number of operations is 2
     788//The total number of operations is 2.0
    795789template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srli(bitblock128_t arg1)
    796790{
     
    798792}
    799793
    800 //The total number of operations is 1
     794//The total number of operations is 1.0
    801795template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srli(bitblock128_t arg1)
    802796{
     
    804798}
    805799
    806 //The total number of operations is 1
     800//The total number of operations is 1.0
    807801template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srli(bitblock128_t arg1)
    808802{
     
    810804}
    811805
    812 //The total number of operations is 1
     806//The total number of operations is 1.0
    813807template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srli(bitblock128_t arg1)
    814808{
     
    816810}
    817811
    818 //The total number of operations is 1
     812//The total number of operations is 1.0
    819813template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srli(bitblock128_t arg1)
    820814{
     
    822816}
    823817
    824 //The total number of operations is 5
     818//The total number of operations is 3.16666666667
    825819template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srli(bitblock128_t arg1)
    826820{
     
    828822}
    829823
    830 //The total number of operations is 1
     824//The total number of operations is 1.0
    831825template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ctz(bitblock128_t arg1)
    832826{
     
    834828}
    835829
    836 //The total number of operations is 14
     830//The total number of operations is 9.5
    837831template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ctz(bitblock128_t arg1)
    838832{
     
    841835}
    842836
    843 //The total number of operations is 12
     837//The total number of operations is 12.0
    844838template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ctz(bitblock128_t arg1)
    845839{
     
    847841}
    848842
    849 //The total number of operations is 3
     843//The total number of operations is 3.0
    850844template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ctz(bitblock128_t arg1)
    851845{
     
    853847}
    854848
    855 //The total number of operations is 6
     849//The total number of operations is 6.0
    856850template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ctz(bitblock128_t arg1)
    857851{
     
    859853}
    860854
    861 //The total number of operations is 9
     855//The total number of operations is 9.0
    862856template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ctz(bitblock128_t arg1)
    863857{
     
    865859}
    866860
    867 //The total number of operations is 12
     861//The total number of operations is 12.0
    868862template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ctz(bitblock128_t arg1)
    869863{
     
    871865}
    872866
    873 //The total number of operations is 30
     867//The total number of operations is 25.5
    874868template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ctz(bitblock128_t arg1)
    875869{
     
    877871}
    878872
    879 //The total number of operations is 1
     873//The total number of operations is 1.0
    880874template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    881875{
     
    883877}
    884878
    885 //The total number of operations is 14
     879//The total number of operations is 12.5
    886880template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    887881{
    888         bitblock128_t tmpAns = simd128<(1)>::ugt(arg1, arg2);
    889         bitblock128_t mask = simd_and(tmpAns, simd128<2>::srli<(1)>(simd128<(1)>::eq(arg1, arg2)));
    890         mask = simd_or(mask, simd128<2>::slli<(1)>(mask));
    891         return simd_or(simd128<2>::srai<(1)>(tmpAns), mask);
    892 }
    893 
    894 //The total number of operations is 8
     882        bitblock128_t tmp = simd_not(arg2);
     883        bitblock128_t tmpAns = simd_or(simd_and(arg1, tmp), simd_and(simd128<128>::slli<1>(simd_and(arg1, tmp)), simd_or(arg1, tmp)));
     884        return simd128<1>::ifh(simd128<2>::himask(), tmpAns, simd128<128>::srli<1>(tmpAns));
     885}
     886
     887//The total number of operations is 7.0
    895888template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    896889{
     
    899892}
    900893
    901 //The total number of operations is 3
     894//The total number of operations is 3.0
    902895template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    903896{
     
    906899}
    907900
    908 //The total number of operations is 3
     901//The total number of operations is 3.0
    909902template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    910903{
     
    913906}
    914907
    915 //The total number of operations is 3
     908//The total number of operations is 3.0
    916909template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    917910{
     
    920913}
    921914
    922 //The total number of operations is 10
     915//The total number of operations is 9.5
    923916template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    924917{
     
    929922}
    930923
    931 //The total number of operations is 37
     924//The total number of operations is 29.1666666667
    932925template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ugt(bitblock128_t arg1, bitblock128_t arg2)
    933926{
     
    938931}
    939932
    940 //The total number of operations is 4
     933//The total number of operations is 4.0
    941934template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::xor_hl(bitblock128_t arg1)
    942935{
     
    944937}
    945938
    946 //The total number of operations is 4
     939//The total number of operations is 4.0
    947940template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::xor_hl(bitblock128_t arg1)
    948941{
     
    950943}
    951944
    952 //The total number of operations is 3
     945//The total number of operations is 3.0
    953946template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::xor_hl(bitblock128_t arg1)
    954947{
     
    956949}
    957950
    958 //The total number of operations is 3
     951//The total number of operations is 3.0
    959952template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::xor_hl(bitblock128_t arg1)
    960953{
     
    962955}
    963956
    964 //The total number of operations is 3
     957//The total number of operations is 3.0
    965958template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::xor_hl(bitblock128_t arg1)
    966959{
     
    968961}
    969962
    970 //The total number of operations is 3
     963//The total number of operations is 3.0
    971964template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::xor_hl(bitblock128_t arg1)
    972965{
     
    974967}
    975968
    976 //The total number of operations is 7
     969//The total number of operations is 5.16666666667
    977970template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::xor_hl(bitblock128_t arg1)
    978971{
     
    986979}
    987980
    988 //The total number of operations is 3
     981//The total number of operations is 3.0
    989982template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::popcount(bitblock128_t arg1)
    990983{
     
    992985}
    993986
    994 //The total number of operations is 7
     987//The total number of operations is 7.0
    995988template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::popcount(bitblock128_t arg1)
    996989{
     
    998991}
    999992
    1000 //The total number of operations is 1
     993//The total number of operations is 1.0
    1001994template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::popcount(bitblock128_t arg1)
    1002995{
     
    1004997}
    1005998
    1006 //The total number of operations is 4
     999//The total number of operations is 4.0
    10071000template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::popcount(bitblock128_t arg1)
    10081001{
     
    10101003}
    10111004
    1012 //The total number of operations is 7
     1005//The total number of operations is 7.0
    10131006template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::popcount(bitblock128_t arg1)
    10141007{
     
    10161009}
    10171010
    1018 //The total number of operations is 10
     1011//The total number of operations is 10.0
    10191012template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::popcount(bitblock128_t arg1)
    10201013{
     
    10221015}
    10231016
    1024 //The total number of operations is 17
     1017//The total number of operations is 15.1666666667
    10251018template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::popcount(bitblock128_t arg1)
    10261019{
     
    10291022}
    10301023
    1031 //The total number of operations is 7
     1024//The total number of operations is 4.33333333333
    10321025template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::neg(bitblock128_t arg1)
    10331026{
     
    10351028}
    10361029
    1037 //The total number of operations is 4
     1030//The total number of operations is 4.0
    10381031template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::neg(bitblock128_t arg1)
    10391032{
     
    10411034}
    10421035
    1043 //The total number of operations is 1
     1036//The total number of operations is 1.0
    10441037template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::neg(bitblock128_t arg1)
    10451038{
     
    10471040}
    10481041
    1049 //The total number of operations is 1
     1042//The total number of operations is 1.0
    10501043template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::neg(bitblock128_t arg1)
    10511044{
     
    10531046}
    10541047
    1055 //The total number of operations is 1
     1048//The total number of operations is 1.0
    10561049template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::neg(bitblock128_t arg1)
    10571050{
     
    10591052}
    10601053
    1061 //The total number of operations is 1
     1054//The total number of operations is 1.0
    10621055template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::neg(bitblock128_t arg1)
    10631056{
     
    10651058}
    10661059
    1067 //The total number of operations is 12
     1060//The total number of operations is 9.33333333333
    10681061template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::neg(bitblock128_t arg1)
    10691062{
     
    10711064}
    10721065
    1073 //The total number of operations is 2
     1066//The total number of operations is 1.5
    10741067template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::slli(bitblock128_t arg1)
    10751068{
     
    10771070}
    10781071
    1079 //The total number of operations is 2
     1072//The total number of operations is 1.5
    10801073template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::slli(bitblock128_t arg1)
    10811074{
     
    10831076}
    10841077
    1085 //The total number of operations is 1
     1078//The total number of operations is 0.5
    10861079template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::slli(bitblock128_t arg1)
    10871080{
     
    10891082}
    10901083
    1091 //The total number of operations is 1
     1084//The total number of operations is 0.5
    10921085template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::slli(bitblock128_t arg1)
    10931086{
     
    10951088}
    10961089
    1097 //The total number of operations is 1
     1090//The total number of operations is 0.5
    10981091template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::slli(bitblock128_t arg1)
    10991092{
     
    11011094}
    11021095
    1103 //The total number of operations is 1
     1096//The total number of operations is 0.5
    11041097template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::slli(bitblock128_t arg1)
    11051098{
     
    11071100}
    11081101
    1109 //The total number of operations is 5
     1102//The total number of operations is 2.33333333333
    11101103template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::slli(bitblock128_t arg1)
    11111104{
     
    11131106}
    11141107
    1115 //The total number of operations is 1
     1108//The total number of operations is 1.0
    11161109template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11171110{
     
    11191112}
    11201113
    1121 //The total number of operations is 4
     1114//The total number of operations is 4.0
    11221115template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11231116{
     
    11251118}
    11261119
    1127 //The total number of operations is 7
     1120//The total number of operations is 6.0
    11281121template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11291122{
     
    11311124}
    11321125
    1133 //The total number of operations is 2
     1126//The total number of operations is 2.0
    11341127template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11351128{
     
    11371130}
    11381131
    1139 //The total number of operations is 2
     1132//The total number of operations is 2.0
    11401133template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11411134{
     
    11431136}
    11441137
    1145 //The total number of operations is 2
     1138//The total number of operations is 2.0
    11461139template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11471140{
     
    11491142}
    11501143
    1151 //The total number of operations is 4
     1144//The total number of operations is 4.0
    11521145template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11531146{
     
    11551148}
    11561149
    1157 //The total number of operations is 10
     1150//The total number of operations is 8.16666666667
    11581151template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ifh(bitblock128_t arg1, bitblock128_t arg2, bitblock128_t arg3)
    11591152{
     
    11611154}
    11621155
    1163 //The total number of operations is 1
     1156//The total number of operations is 1.0
    11641157template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11651158{
     
    11671160}
    11681161
    1169 //The total number of operations is 10
     1162//The total number of operations is 7.33333333333
    11701163template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11711164{
    1172         return simd128<1>::ifh(simd128<(4)>::himask(), simd128<(4)>::sub(arg1, simd_and(simd128<(4)>::himask(), arg2)), simd128<(4)>::sub(arg1, arg2));
    1173 }
    1174 
    1175 //The total number of operations is 4
     1165        bitblock128_t tmp = simd_xor(arg1, arg2);
     1166        return simd128<1>::ifh(simd128<2>::himask(), simd_xor(tmp, simd128<128>::slli<1>(simd_and(simd_not(arg1), arg2))), tmp);
     1167}
     1168
     1169//The total number of operations is 4.0
    11761170template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11771171{
     
    11791173}
    11801174
    1181 //The total number of operations is 1
     1175//The total number of operations is 1.0
    11821176template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11831177{
     
    11851179}
    11861180
    1187 //The total number of operations is 1
     1181//The total number of operations is 1.0
    11881182template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11891183{
     
    11911185}
    11921186
    1193 //The total number of operations is 1
     1187//The total number of operations is 1.0
    11941188template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::sub(bitblock128_t arg1, bitblock128_t arg2)
    11951189{
     
    11971191}
    11981192
    1199 //The total number of operations is 1
     1193//The total number of operations is 1.0
    12001194template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::sub(bitblock128_t arg1, bitblock128_t arg2)
    12011195{
     
    12031197}
    12041198
    1205 //The total number of operations is 12
     1199//The total number of operations is 9.33333333333
    12061200template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::sub(bitblock128_t arg1, bitblock128_t arg2)
    12071201{
     
    12121206}
    12131207
    1214 //The total number of operations is 3
     1208//The total number of operations is 3.0
    12151209template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add_hl(bitblock128_t arg1)
    12161210{
     
    12181212}
    12191213
    1220 //The total number of operations is 4
     1214//The total number of operations is 4.0
    12211215template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add_hl(bitblock128_t arg1)
    12221216{
     
    12241218}
    12251219
    1226 //The total number of operations is 3
     1220//The total number of operations is 3.0
    12271221template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add_hl(bitblock128_t arg1)
    12281222{
     
    12301224}
    12311225
    1232 //The total number of operations is 3
     1226//The total number of operations is 3.0
    12331227template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add_hl(bitblock128_t arg1)
    12341228{
     
    12361230}
    12371231
    1238 //The total number of operations is 3
     1232//The total number of operations is 3.0
    12391233template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add_hl(bitblock128_t arg1)
    12401234{
     
    12421236}
    12431237
    1244 //The total number of operations is 3
     1238//The total number of operations is 3.0
    12451239template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add_hl(bitblock128_t arg1)
    12461240{
     
    12481242}
    12491243
    1250 //The total number of operations is 18
     1244//The total number of operations is 13.5
    12511245template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add_hl(bitblock128_t arg1)
    12521246{
     
    13021296}
    13031297
    1304 //The total number of operations is 1
     1298//The total number of operations is 1.0
    13051299template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::min(bitblock128_t arg1, bitblock128_t arg2)
    13061300{
     
    13081302}
    13091303
    1310 //The total number of operations is 13
     1304//The total number of operations is 13.0
    13111305template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::min(bitblock128_t arg1, bitblock128_t arg2)
    13121306{
     
    13181312}
    13191313
    1320 //The total number of operations is 7
     1314//The total number of operations is 6.0
    13211315template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::min(bitblock128_t arg1, bitblock128_t arg2)
    13221316{
     
    13241318}
    13251319
    1326 //The total number of operations is 1
     1320//The total number of operations is 1.0
    13271321template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::min(bitblock128_t arg1, bitblock128_t arg2)
    13281322{
     
    13301324}
    13311325
    1332 //The total number of operations is 1
     1326//The total number of operations is 1.0
    13331327template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::min(bitblock128_t arg1, bitblock128_t arg2)
    13341328{
     
    13361330}
    13371331
    1338 //The total number of operations is 1
     1332//The total number of operations is 1.0
    13391333template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::min(bitblock128_t arg1, bitblock128_t arg2)
    13401334{
     
    13421336}
    13431337
    1344 //The total number of operations is 12
     1338//The total number of operations is 11.5
    13451339template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::min(bitblock128_t arg1, bitblock128_t arg2)
    13461340{
    1347         bitblock128_t hiAns = simd128<(32)>::min(arg1, arg2);
    1348         bitblock128_t loAns = simd128<(32)>::umin(arg1, arg2);
    1349         bitblock128_t eqMask1 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg1));
    1350         bitblock128_t eqMask2 = simd128<64>::srli<(32)>(simd128<(32)>::eq(hiAns, arg2));
    1351         return simd128<1>::ifh(simd128<64>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2));
    1352 }
    1353 
    1354 //The total number of operations is 46
     1341        return simd128<1>::ifh(simd128<64>::gt(arg1, arg2), arg2, arg1);
     1342}
     1343
     1344//The total number of operations is 40.6666666667
    13551345template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2)
    13561346{
    1357         bitblock128_t hiAns = simd128<(64)>::min(arg1, arg2);
    1358         bitblock128_t loAns = simd128<(64)>::umin(arg1, arg2);
    1359         bitblock128_t eqMask1 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg1));
    1360         bitblock128_t eqMask2 = simd128<128>::srli<(64)>(simd128<(64)>::eq(hiAns, arg2));
    1361         return simd128<1>::ifh(simd128<128>::himask(), hiAns, simd128<1>::ifh(eqMask1, simd128<1>::ifh(eqMask2, loAns, arg1), arg2));
     1347        return simd128<1>::ifh(simd128<128>::gt(arg1, arg2), arg2, arg1);
    13621348}
    13631349
     
    14041390}
    14051391
    1406 //The total number of operations is 1
     1392//The total number of operations is 1.0
    14071393template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14081394{
     
    14101396}
    14111397
    1412 //The total number of operations is 12
     1398//The total number of operations is 12.0
    14131399template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14141400{
     
    14191405}
    14201406
    1421 //The total number of operations is 10
     1407//The total number of operations is 9.0
    14221408template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14231409{
     
    14261412}
    14271413
    1428 //The total number of operations is 4
     1414//The total number of operations is 4.0
    14291415template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14301416{
     
    14331419}
    14341420
    1435 //The total number of operations is 4
     1421//The total number of operations is 4.0
    14361422template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14371423{
     
    14401426}
    14411427
    1442 //The total number of operations is 4
     1428//The total number of operations is 4.0
    14431429template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14441430{
     
    14471433}
    14481434
    1449 //The total number of operations is 11
     1435//The total number of operations is 11.0
    14501436template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14511437{
     
    14561442}
    14571443
    1458 //The total number of operations is 34
     1444//The total number of operations is 29.3333333333
    14591445template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umin(bitblock128_t arg1, bitblock128_t arg2)
    14601446{
     
    14651451}
    14661452
    1467 //The total number of operations is 8
     1453//The total number of operations is 5.33333333333
    14681454template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::abs(bitblock128_t arg1)
    14691455{
     
    14711457}
    14721458
    1473 //The total number of operations is 11
     1459//The total number of operations is 10.0
    14741460template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::abs(bitblock128_t arg1)
    14751461{
     
    14781464}
    14791465
    1480 //The total number of operations is 1
     1466//The total number of operations is 1.0
    14811467template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::abs(bitblock128_t arg1)
    14821468{
     
    14841470}
    14851471
    1486 //The total number of operations is 1
     1472//The total number of operations is 1.0
    14871473template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::abs(bitblock128_t arg1)
    14881474{
     
    14901476}
    14911477
    1492 //The total number of operations is 1
     1478//The total number of operations is 1.0
    14931479template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::abs(bitblock128_t arg1)
    14941480{
     
    14961482}
    14971483
    1498 //The total number of operations is 9
     1484//The total number of operations is 8.5
    14991485template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::abs(bitblock128_t arg1)
    15001486{
     
    15031489}
    15041490
    1505 //The total number of operations is 40
     1491//The total number of operations is 31.8333333333
    15061492template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::abs(bitblock128_t arg1)
    15071493{
     
    15101496}
    15111497
    1512 //The total number of operations is 2
     1498//The total number of operations is 2.0
    15131499template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15141500{
     
    15161502}
    15171503
    1518 //The total number of operations is 8
     1504//The total number of operations is 7.5
    15191505template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15201506{
     
    15251511}
    15261512
    1527 //The total number of operations is 9
     1513//The total number of operations is 9.0
    15281514template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15291515{
     
    15311517}
    15321518
    1533 //The total number of operations is 1
     1519//The total number of operations is 1.0
    15341520template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15351521{
     
    15371523}
    15381524
    1539 //The total number of operations is 1
     1525//The total number of operations is 1.0
    15401526template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15411527{
     
    15431529}
    15441530
    1545 //The total number of operations is 1
     1531//The total number of operations is 1.0
    15461532template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15471533{
     
    15491535}
    15501536
    1551 //The total number of operations is 5
     1537//The total number of operations is 4.5
    15521538template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15531539{
     
    15581544}
    15591545
    1560 //The total number of operations is 17
     1546//The total number of operations is 12.0
    15611547template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::eq(bitblock128_t arg1, bitblock128_t arg2)
    15621548{
     
    15671553}
    15681554
    1569 //The total number of operations is 4
     1555//The total number of operations is 4.0
    15701556template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::srai(bitblock128_t arg1)
    15711557{
     
    15731559}
    15741560
    1575 //The total number of operations is 8
     1561//The total number of operations is 8.0
    15761562template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::srai(bitblock128_t arg1)
    15771563{
     
    15801566}
    15811567
    1582 //The total number of operations is 1
     1568//The total number of operations is 1.0
    15831569template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::srai(bitblock128_t arg1)
    15841570{
     
    15861572}
    15871573
    1588 //The total number of operations is 1
     1574//The total number of operations is 1.0
    15891575template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::srai(bitblock128_t arg1)
    15901576{
     
    15921578}
    15931579
    1594 //The total number of operations is 1
     1580//The total number of operations is 1.0
    15951581template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::srai(bitblock128_t arg1)
    15961582{
     
    15981584}
    15991585
    1600 //The total number of operations is 1
     1586//The total number of operations is 1.0
    16011587template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1)
    16021588{
     
    16041590}
    16051591
    1606 //The total number of operations is 9
     1592//The total number of operations is 6.66666666667
    16071593template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1)
    16081594{
     
    16521638}
    16531639
    1654 //The total number of operations is 1
     1640//The total number of operations is 1.0
    16551641template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::add(bitblock128_t arg1, bitblock128_t arg2)
    16561642{
     
    16581644}
    16591645
    1660 //The total number of operations is 9
     1646//The total number of operations is 6.33333333333
    16611647template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::add(bitblock128_t arg1, bitblock128_t arg2)
    16621648{
     
    16651651}
    16661652
    1667 //The total number of operations is 4
     1653//The total number of operations is 4.0
    16681654template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::add(bitblock128_t arg1, bitblock128_t arg2)
    16691655{
     
    16711657}
    16721658
    1673 //The total number of operations is 1
     1659//The total number of operations is 1.0
    16741660template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::add(bitblock128_t arg1, bitblock128_t arg2)
    16751661{
     
    16771663}
    16781664
    1679 //The total number of operations is 1
     1665//The total number of operations is 1.0
    16801666template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::add(bitblock128_t arg1, bitblock128_t arg2)
    16811667{
     
    16831669}
    16841670
    1685 //The total number of operations is 1
     1671//The total number of operations is 1.0
    16861672template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::add(bitblock128_t arg1, bitblock128_t arg2)
    16871673{
     
    16891675}
    16901676
    1691 //The total number of operations is 1
     1677//The total number of operations is 1.0
    16921678template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::add(bitblock128_t arg1, bitblock128_t arg2)
    16931679{
     
    16951681}
    16961682
    1697 //The total number of operations is 12
     1683//The total number of operations is 9.33333333333
    16981684template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::add(bitblock128_t arg1, bitblock128_t arg2)
    16991685{
     
    17041690}
    17051691
    1706 //The total number of operations is 1
     1692//The total number of operations is 1.0
    17071693template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<1>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17081694{
     
    17101696}
    17111697
    1712 //The total number of operations is 12
     1698//The total number of operations is 12.0
    17131699template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<2>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17141700{
     
    17191705}
    17201706
    1721 //The total number of operations is 10
     1707//The total number of operations is 9.0
    17221708template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<4>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17231709{
     
    17261712}
    17271713
    1728 //The total number of operations is 4
     1714//The total number of operations is 4.0
    17291715template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<8>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17301716{
     
    17331719}
    17341720
    1735 //The total number of operations is 4
     1721//The total number of operations is 4.0
    17361722template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<16>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17371723{
     
    17401726}
    17411727
    1742 //The total number of operations is 4
     1728//The total number of operations is 4.0
    17431729template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<32>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17441730{
     
    17471733}
    17481734
    1749 //The total number of operations is 11
     1735//The total number of operations is 11.0
    17501736template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17511737{
     
    17561742}
    17571743
    1758 //The total number of operations is 34
     1744//The total number of operations is 29.3333333333
    17591745template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::umax(bitblock128_t arg1, bitblock128_t arg2)
    17601746{
     
    17651751}
    17661752
    1767 //The total number of operations is 77
     1753//The total number of operations is 55.0
    17681754template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17691755{
     
    17711757}
    17721758
    1773 //The total number of operations is 64
     1759//The total number of operations is 49.3333333333
    17741760template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17751761{
     
    17771763}
    17781764
    1779 //The total number of operations is 38
     1765//The total number of operations is 29.6666666667
    17801766template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17811767{
     
    17831769}
    17841770
    1785 //The total number of operations is 6
     1771//The total number of operations is 6.0
    17861772template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17871773{
     
    17891775}
    17901776
    1791 //The total number of operations is 6
     1777//The total number of operations is 6.0
    17921778template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17931779{
     
    17951781}
    17961782
    1797 //The total number of operations is 6
     1783//The total number of operations is 6.0
    17981784template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    17991785{
     
    18011787}
    18021788
    1803 //The total number of operations is 23
     1789//The total number of operations is 18.5
    18041790template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::umin_hl(bitblock128_t arg1, bitblock128_t arg2)
    18051791{
     
    18071793}
    18081794
    1809 //The total number of operations is 77
     1795//The total number of operations is 55.0
    18101796template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18111797{
     
    18131799}
    18141800
    1815 //The total number of operations is 61
     1801//The total number of operations is 43.6666666667
    18161802template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18171803{
     
    18191805}
    18201806
    1821 //The total number of operations is 32
     1807//The total number of operations is 24.6666666667
    18221808template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18231809{
     
    18251811}
    18261812
    1827 //The total number of operations is 3
     1813//The total number of operations is 3.0
    18281814template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18291815{
     
    18311817}
    18321818
    1833 //The total number of operations is 3
     1819//The total number of operations is 3.0
    18341820template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18351821{
     
    18371823}
    18381824
    1839 //The total number of operations is 3
     1825//The total number of operations is 3.0
    18401826template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18411827{
     
    18431829}
    18441830
    1845 //The total number of operations is 13
     1831//The total number of operations is 8.5
    18461832template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::add_hl(bitblock128_t arg1, bitblock128_t arg2)
    18471833{
     
    18491835}
    18501836
    1851 //The total number of operations is 104
     1837//The total number of operations is 87.0
    18521838template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18531839{
     
    18571843}
    18581844
    1859 //The total number of operations is 56
     1845//The total number of operations is 44.6666666667
    18601846template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18611847{
     
    18651851}
    18661852
    1867 //The total number of operations is 23
     1853//The total number of operations is 19.3333333333
    18681854template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18691855{
     
    18731859}
    18741860
    1875 //The total number of operations is 11
     1861//The total number of operations is 11.0
    18761862template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18771863{
     
    18811867}
    18821868
    1883 //The total number of operations is 11
     1869//The total number of operations is 11.0
    18841870template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18851871{
     
    18891875}
    18901876
    1891 //The total number of operations is 51
     1877//The total number of operations is 49.0
    18921878template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2)
    18931879{
     
    18971883}
    18981884
    1899 //The total number of operations is 208
     1885//The total number of operations is 170.166666667
    19001886template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2)
    19011887{
     
    19051891}
    19061892
    1907 //The total number of operations is 46
     1893//The total number of operations is 45.0
    19081894template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<4>::signmask(bitblock128_t arg1)
    19091895{
     
    19131899}
    19141900
    1915 //The total number of operations is 18
     1901//The total number of operations is 18.0
    19161902template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<8>::signmask(bitblock128_t arg1)
    19171903{
     
    19211907}
    19221908
    1923 //The total number of operations is 8
     1909//The total number of operations is 8.0
    19241910template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<16>::signmask(bitblock128_t arg1)
    19251911{
     
    19271913}
    19281914
    1929 //The total number of operations is 4
     1915//The total number of operations is 4.0
    19301916template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<32>::signmask(bitblock128_t arg1)
    19311917{
     
    19331919}
    19341920
    1935 //The total number of operations is 2
     1921//The total number of operations is 2.0
    19361922template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<64>::signmask(bitblock128_t arg1)
    19371923{
     
    19391925}
    19401926
    1941 //The total number of operations is 8
     1927//The total number of operations is 6.16666666667
    19421928template <> IDISA_ALWAYS_INLINE uint64_t hsimd128<128>::signmask(bitblock128_t arg1)
    19431929{
     
    19451931}
    19461932
    1947 //The total number of operations is 37
     1933//The total number of operations is 26.0
    19481934template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19491935{
     
    19511937}
    19521938
    1953 //The total number of operations is 25
     1939//The total number of operations is 17.6666666667
    19541940template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19551941{
     
    19571943}
    19581944
    1959 //The total number of operations is 13
     1945//The total number of operations is 9.33333333333
    19601946template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19611947{
     
    19631949}
    19641950
    1965 //The total number of operations is 1
     1951//The total number of operations is 1.0
    19661952template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19671953{
     
    19691955}
    19701956
    1971 //The total number of operations is 1
     1957//The total number of operations is 1.0
    19721958template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19731959{
     
    19751961}
    19761962
    1977 //The total number of operations is 1
     1963//The total number of operations is 1.0
    19781964template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19791965{
     
    19811967}
    19821968
    1983 //The total number of operations is 6
     1969//The total number of operations is 3.33333333333
    19841970template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packl(bitblock128_t arg1, bitblock128_t arg2)
    19851971{
     
    19871973}
    19881974
    1989 //The total number of operations is 39
     1975//The total number of operations is 28.0
    19901976template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packh(bitblock128_t arg1, bitblock128_t arg2)
    19911977{
     
    19931979}
    19941980
    1995 //The total number of operations is 27
     1981//The total number of operations is 19.6666666667
    19961982template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packh(bitblock128_t arg1, bitblock128_t arg2)
    19971983{
     
    19991985}
    20001986
    2001 //The total number of operations is 15
     1987//The total number of operations is 11.3333333333
    20021988template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20031989{
     
    20051991}
    20061992
    2007 //The total number of operations is 1
     1993//The total number of operations is 1.0
    20081994template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20091995{
     
    20111997}
    20121998
    2013 //The total number of operations is 1
     1999//The total number of operations is 1.0
    20142000template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20152001{
     
    20172003}
    20182004
    2019 //The total number of operations is 1
     2005//The total number of operations is 1.0
    20202006template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20212007{
     
    20232009}
    20242010
    2025 //The total number of operations is 6
     2011//The total number of operations is 4.16666666667
    20262012template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packh(bitblock128_t arg1, bitblock128_t arg2)
    20272013{
     
    20292015}
    20302016
    2031 //The total number of operations is 77
     2017//The total number of operations is 55.0
    20322018template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20332019{
     
    20352021}
    20362022
    2037 //The total number of operations is 65
     2023//The total number of operations is 50.3333333333
    20382024template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20392025{
     
    20412027}
    20422028
    2043 //The total number of operations is 35
     2029//The total number of operations is 26.6666666667
    20442030template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20452031{
     
    20472033}
    20482034
    2049 //The total number of operations is 3
     2035//The total number of operations is 3.0
    20502036template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20512037{
     
    20532039}
    20542040
    2055 //The total number of operations is 3
     2041//The total number of operations is 3.0
    20562042template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20572043{
     
    20592045}
    20602046
    2061 //The total number of operations is 3
     2047//The total number of operations is 3.0
    20622048template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20632049{
     
    20652051}
    20662052
    2067 //The total number of operations is 24
     2053//The total number of operations is 19.0
    20682054template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2)
    20692055{
     
    20712057}
    20722058
    2073 //The total number of operations is 65
     2059//The total number of operations is 53.0
    20742060template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<2>::packus(bitblock128_t arg1, bitblock128_t arg2)
    20752061{
     
    20812067}
    20822068
    2083 //The total number of operations is 61
     2069//The total number of operations is 51.6666666667
    20842070template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<4>::packus(bitblock128_t arg1, bitblock128_t arg2)
    20852071{
     
    20912077}
    20922078
    2093 //The total number of operations is 23
     2079//The total number of operations is 19.3333333333
    20942080template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<8>::packus(bitblock128_t arg1, bitblock128_t arg2)
    20952081{
     
    21012087}
    21022088
    2103 //The total number of operations is 6
     2089//The total number of operations is 6.0
    21042090template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<16>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21052091{
     
    21082094}
    21092095
    2110 //The total number of operations is 6
     2096//The total number of operations is 6.0
    21112097template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<32>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21122098{
     
    21152101}
    21162102
    2117 //The total number of operations is 6
     2103//The total number of operations is 6.0
    21182104template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21192105{
     
    21222108}
    21232109
    2124 //The total number of operations is 28
     2110//The total number of operations is 23.0
    21252111template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2)
    21262112{
     
    21292115}
    21302116
    2131 //The total number of operations is 17
     2117//The total number of operations is 15.5
    21322118template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21332119{
     
    21352121}
    21362122
    2137 //The total number of operations is 11
     2123//The total number of operations is 10.0
    21382124template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21392125{
     
    21412127}
    21422128
    2143 //The total number of operations is 5
     2129//The total number of operations is 4.5
    21442130template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21452131{
     
    21472133}
    21482134
    2149 //The total number of operations is 1
     2135//The total number of operations is 1.0
    21502136template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21512137{
     
    21532139}
    21542140
    2155 //The total number of operations is 1
     2141//The total number of operations is 1.0
    21562142template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21572143{
     
    21592145}
    21602146
    2161 //The total number of operations is 1
     2147//The total number of operations is 1.0
    21622148template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21632149{
     
    21652151}
    21662152
    2167 //The total number of operations is 3
     2153//The total number of operations is 3.0
    21682154template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergel(bitblock128_t arg1, bitblock128_t arg2)
    21692155{
     
    21712157}
    21722158
    2173 //The total number of operations is 17
     2159//The total number of operations is 15.5
    21742160template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    21752161{
     
    21772163}
    21782164
    2179 //The total number of operations is 11
     2165//The total number of operations is 10.0
    21802166template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    21812167{
     
    21832169}
    21842170
    2185 //The total number of operations is 5
     2171//The total number of operations is 4.5
    21862172template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    21872173{
     
    21892175}
    21902176
    2191 //The total number of operations is 1
     2177//The total number of operations is 1.0
    21922178template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    21932179{
     
    21952181}
    21962182
    2197 //The total number of operations is 1
     2183//The total number of operations is 1.0
    21982184template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    21992185{
     
    22012187}
    22022188
    2203 //The total number of operations is 1
     2189//The total number of operations is 1.0
    22042190template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22052191{
     
    22072193}
    22082194
    2209 //The total number of operations is 3
     2195//The total number of operations is 3.0
    22102196template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::mergeh(bitblock128_t arg1, bitblock128_t arg2)
    22112197{
     
    22132199}
    22142200
    2215 //The total number of operations is 14
     2201//The total number of operations is 13.0
    22162202template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendh(bitblock128_t arg1)
    22172203{
     
    22192205}
    22202206
    2221 //The total number of operations is 8
     2207//The total number of operations is 7.5
    22222208template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendh(bitblock128_t arg1)
    22232209{
     
    22252211}
    22262212
    2227 //The total number of operations is 3
     2213//The total number of operations is 3.0
    22282214template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendh(bitblock128_t arg1)
    22292215{
     
    22312217}
    22322218
    2233 //The total number of operations is 3
     2219//The total number of operations is 3.0
    22342220template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendh(bitblock128_t arg1)
    22352221{
     
    22372223}
    22382224
    2239 //The total number of operations is 3
     2225//The total number of operations is 3.0
    22402226template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendh(bitblock128_t arg1)
    22412227{
     
    22432229}
    22442230
    2245 //The total number of operations is 5
     2231//The total number of operations is 5.0
    22462232template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendh(bitblock128_t arg1)
    22472233{
     
    22492235}
    22502236
    2251 //The total number of operations is 5
     2237//The total number of operations is 3.16666666667
    22522238template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendh(bitblock128_t arg1)
    22532239{
     
    22552241}
    22562242
    2257 //The total number of operations is 14
     2243//The total number of operations is 13.0
    22582244template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::zeroextendl(bitblock128_t arg1)
    22592245{
     
    22612247}
    22622248
    2263 //The total number of operations is 8
     2249//The total number of operations is 7.5
    22642250template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::zeroextendl(bitblock128_t arg1)
    22652251{
     
    22672253}
    22682254
    2269 //The total number of operations is 3
     2255//The total number of operations is 3.0
    22702256template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::zeroextendl(bitblock128_t arg1)
    22712257{
     
    22732259}
    22742260
    2275 //The total number of operations is 3
     2261//The total number of operations is 3.0
    22762262template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::zeroextendl(bitblock128_t arg1)
    22772263{
     
    22792265}
    22802266
    2281 //The total number of operations is 3
     2267//The total number of operations is 3.0
    22822268template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::zeroextendl(bitblock128_t arg1)
    22832269{
     
    22852271}
    22862272
    2287 //The total number of operations is 5
     2273//The total number of operations is 5.0
    22882274template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::zeroextendl(bitblock128_t arg1)
    22892275{
     
    22912277}
    22922278
    2293 //The total number of operations is 1
     2279//The total number of operations is 1.0
    22942280template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::zeroextendl(bitblock128_t arg1)
    22952281{
     
    22972283}
    22982284
    2299 //The total number of operations is 21
     2285//The total number of operations is 19.5
    23002286template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendh(bitblock128_t arg1)
    23012287{
     
    23032289}
    23042290
    2305 //The total number of operations is 23
     2291//The total number of operations is 22.0
    23062292template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendh(bitblock128_t arg1)
    23072293{
     
    23092295}
    23102296
    2311 //The total number of operations is 4
     2297//The total number of operations is 3.5
    23122298template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendh(bitblock128_t arg1)
    23132299{
     
    23152301}
    23162302
    2317 //The total number of operations is 4
     2303//The total number of operations is 3.5
    23182304template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendh(bitblock128_t arg1)
    23192305{
     
    23212307}
    23222308
    2323 //The total number of operations is 4
     2309//The total number of operations is 3.5
    23242310template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendh(bitblock128_t arg1)
    23252311{
     
    23272313}
    23282314
    2329 //The total number of operations is 6
     2315//The total number of operations is 5.5
    23302316template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1)
    23312317{
     
    23332319}
    23342320
    2335 //The total number of operations is 9
     2321//The total number of operations is 6.66666666667
    23362322template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1)
    23372323{
     
    23392325}
    23402326
    2341 //The total number of operations is 21
     2327//The total number of operations is 19.5
    23422328template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<1>::signextendl(bitblock128_t arg1)
    23432329{
     
    23452331}
    23462332
    2347 //The total number of operations is 23
     2333//The total number of operations is 22.0
    23482334template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<2>::signextendl(bitblock128_t arg1)
    23492335{
     
    23512337}
    23522338
    2353 //The total number of operations is 4
     2339//The total number of operations is 3.5
    23542340template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<4>::signextendl(bitblock128_t arg1)
    23552341{
     
    23572343}
    23582344
    2359 //The total number of operations is 4
     2345//The total number of operations is 3.5
    23602346template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<8>::signextendl(bitblock128_t arg1)
    23612347{
     
    23632349}
    23642350
    2365 //The total number of operations is 4
     2351//The total number of operations is 3.5
    23662352template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<16>::signextendl(bitblock128_t arg1)
    23672353{
     
    23692355}
    23702356
    2371 //The total number of operations is 6
     2357//The total number of operations is 5.5
    23722358template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1)
    23732359{
     
    23752361}
    23762362
    2377 //The total number of operations is 14
     2363//The total number of operations is 9.0
    23782364template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1)
    23792365{
     
    23812367}
    23822368
    2383 //The total number of operations is 11
     2369//The total number of operations is 6.5
    23842370template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<2>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    23852371{
     
    23872373}
    23882374
    2389 //The total number of operations is 11
     2375//The total number of operations is 6.5
    23902376template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<4>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    23912377{
     
    23932379}
    23942380
    2395 //The total number of operations is 11
     2381//The total number of operations is 6.5
    23962382template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<8>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    23972383{
     
    23992385}
    24002386
    2401 //The total number of operations is 11
     2387//The total number of operations is 6.5
    24022388template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<16>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    24032389{
     
    24052391}
    24062392
    2407 //The total number of operations is 11
     2393//The total number of operations is 6.5
    24082394template <> template <uint64_t sh> IDISA_ALWAYS_INLINE bitblock128_t mvmd128<32>::dsrli(bitblock128_t arg1, bitblock128_t arg2)
    24092395{