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

The final version of IDISA+ toolkit...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/idisa_cpp/idisa_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{
Note: See TracChangeset for help on using the changeset viewer.