LCOV - code coverage report
Current view: top level - ballet/reedsol - fd_reedsol_encode_16.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 113 180 62.8 %
Date: 2025-07-01 05:00:49 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Note: This file is auto generated. */
       2             : #include "fd_reedsol_ppt.h"
       3             : 
       4             : FD_FN_UNSANITIZED void
       5             : fd_reedsol_private_encode_16( ulong                 shred_sz,
       6             :                               uchar const * const * data_shred,
       7             :                               ulong                 data_shred_cnt,
       8             :                               uchar       * const * parity_shred,
       9      137136 :                               ulong                 parity_shred_cnt ) {
      10     4428567 :   for( ulong shred_pos=0UL; shred_pos<shred_sz; /* advanced manually at end of loop */ ) {
      11     4291431 :     gf_t in00 = gf_zero();  gf_t in01 = gf_zero();  gf_t in02 = gf_zero();  gf_t in03 = gf_zero();
      12     4291431 :     gf_t in04 = gf_zero();  gf_t in05 = gf_zero();  gf_t in06 = gf_zero();  gf_t in07 = gf_zero();
      13     4291431 :     gf_t in08 = gf_zero();  gf_t in09 = gf_zero();  gf_t in10 = gf_zero();  gf_t in11 = gf_zero();
      14     4291431 :     gf_t in12 = gf_zero();  gf_t in13 = gf_zero();  gf_t in14 = gf_zero();  gf_t in15 = gf_zero();
      15     4291431 :     switch( data_shred_cnt ) {
      16      263292 :       case 16UL: in15 = gf_ldu( data_shred[ 15 ] + shred_pos ); FALLTHRU
      17      526584 :       case 15UL: in14 = gf_ldu( data_shred[ 14 ] + shred_pos ); FALLTHRU
      18      789876 :       case 14UL: in13 = gf_ldu( data_shred[ 13 ] + shred_pos ); FALLTHRU
      19     1053168 :       case 13UL: in12 = gf_ldu( data_shred[ 12 ] + shred_pos ); FALLTHRU
      20     1316460 :       case 12UL: in11 = gf_ldu( data_shred[ 11 ] + shred_pos ); FALLTHRU
      21     1579752 :       case 11UL: in10 = gf_ldu( data_shred[ 10 ] + shred_pos ); FALLTHRU
      22     1793364 :       case 10UL: in09 = gf_ldu( data_shred[  9 ] + shred_pos ); FALLTHRU
      23     2070927 :       case  9UL: in08 = gf_ldu( data_shred[  8 ] + shred_pos ); FALLTHRU
      24     2348490 :       case  8UL: in07 = gf_ldu( data_shred[  7 ] + shred_pos ); FALLTHRU
      25     2626053 :       case  7UL: in06 = gf_ldu( data_shred[  6 ] + shred_pos ); FALLTHRU
      26     2903616 :       case  6UL: in05 = gf_ldu( data_shred[  5 ] + shred_pos ); FALLTHRU
      27     3181179 :       case  5UL: in04 = gf_ldu( data_shred[  4 ] + shred_pos ); FALLTHRU
      28     3458742 :       case  4UL: in03 = gf_ldu( data_shred[  3 ] + shred_pos ); FALLTHRU
      29     3736305 :       case  3UL: in02 = gf_ldu( data_shred[  2 ] + shred_pos ); FALLTHRU
      30     4013868 :       case  2UL: in01 = gf_ldu( data_shred[  1 ] + shred_pos ); FALLTHRU
      31     4291431 :       case  1UL: in00 = gf_ldu( data_shred[  0 ] + shred_pos );
      32     4291431 :     }
      33     4291431 :     #define ALL_VARS in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15
      34     4291431 :     switch( data_shred_cnt ) {
      35      263292 :       case 16UL: FD_REEDSOL_GENERATE_IFFT( 16,  0, ALL_VARS ); break;
      36      263292 :       case 15UL: FD_REEDSOL_GENERATE_PPT(  16, 15, ALL_VARS ); break;
      37      263292 :       case 14UL: FD_REEDSOL_GENERATE_PPT(  16, 14, ALL_VARS ); break;
      38      263292 :       case 13UL: FD_REEDSOL_GENERATE_PPT(  16, 13, ALL_VARS ); break;
      39      263292 :       case 12UL: FD_REEDSOL_GENERATE_PPT(  16, 12, ALL_VARS ); break;
      40      263292 :       case 11UL: FD_REEDSOL_GENERATE_PPT(  16, 11, ALL_VARS ); break;
      41      213612 :       case 10UL: FD_REEDSOL_GENERATE_PPT(  16, 10, ALL_VARS ); break;
      42      277563 :       case  9UL: FD_REEDSOL_GENERATE_PPT(  16,  9, ALL_VARS ); break;
      43      277563 :       case  8UL: FD_REEDSOL_GENERATE_PPT(  16,  8, ALL_VARS ); break;
      44      277563 :       case  7UL: FD_REEDSOL_GENERATE_PPT(  16,  7, ALL_VARS ); break;
      45      277563 :       case  6UL: FD_REEDSOL_GENERATE_PPT(  16,  6, ALL_VARS ); break;
      46      277563 :       case  5UL: FD_REEDSOL_GENERATE_PPT(  16,  5, ALL_VARS ); break;
      47      277563 :       case  4UL: FD_REEDSOL_GENERATE_PPT(  16,  4, ALL_VARS ); break;
      48      277563 :       case  3UL: FD_REEDSOL_GENERATE_PPT(  16,  3, ALL_VARS ); break;
      49      277563 :       case  2UL: FD_REEDSOL_GENERATE_PPT(  16,  2, ALL_VARS ); break;
      50      277563 :       case  1UL: FD_REEDSOL_GENERATE_PPT(  16,  1, ALL_VARS ); break;
      51     4291431 :     }
      52             :     /* That generated the first 16-data_shred_cnt parity shreds in the
      53             :        last 16-data_shred_cnt variables. We might only need
      54             :        parity_shred_cnt of them though. */
      55     4291431 :     ulong total_shreds = data_shred_cnt+parity_shred_cnt;
      56     4291431 :     switch( data_shred_cnt ) {
      57      277563 :       case  1UL: if( total_shreds <=  1UL ) break; gf_stu( parity_shred[  1UL-data_shred_cnt ] + shred_pos, in01 ); in01 = gf_zero(); FALLTHRU
      58      555126 :       case  2UL: if( total_shreds <=  2UL ) break; gf_stu( parity_shred[  2UL-data_shred_cnt ] + shred_pos, in02 ); in02 = gf_zero(); FALLTHRU
      59      832689 :       case  3UL: if( total_shreds <=  3UL ) break; gf_stu( parity_shred[  3UL-data_shred_cnt ] + shred_pos, in03 ); in03 = gf_zero(); FALLTHRU
      60     1110252 :       case  4UL: if( total_shreds <=  4UL ) break; gf_stu( parity_shred[  4UL-data_shred_cnt ] + shred_pos, in04 ); in04 = gf_zero(); FALLTHRU
      61     1387815 :       case  5UL: if( total_shreds <=  5UL ) break; gf_stu( parity_shred[  5UL-data_shred_cnt ] + shred_pos, in05 ); in05 = gf_zero(); FALLTHRU
      62     1665378 :       case  6UL: if( total_shreds <=  6UL ) break; gf_stu( parity_shred[  6UL-data_shred_cnt ] + shred_pos, in06 ); in06 = gf_zero(); FALLTHRU
      63     1942941 :       case  7UL: if( total_shreds <=  7UL ) break; gf_stu( parity_shred[  7UL-data_shred_cnt ] + shred_pos, in07 ); in07 = gf_zero(); FALLTHRU
      64     2220504 :       case  8UL: if( total_shreds <=  8UL ) break; gf_stu( parity_shred[  8UL-data_shred_cnt ] + shred_pos, in08 ); in08 = gf_zero(); FALLTHRU
      65     2498067 :       case  9UL: if( total_shreds <=  9UL ) break; gf_stu( parity_shred[  9UL-data_shred_cnt ] + shred_pos, in09 ); in09 = gf_zero(); FALLTHRU
      66     2711679 :       case 10UL: if( total_shreds <= 10UL ) break; gf_stu( parity_shred[ 10UL-data_shred_cnt ] + shred_pos, in10 ); in10 = gf_zero(); FALLTHRU
      67     2974971 :       case 11UL: if( total_shreds <= 11UL ) break; gf_stu( parity_shred[ 11UL-data_shred_cnt ] + shred_pos, in11 ); in11 = gf_zero(); FALLTHRU
      68     3238263 :       case 12UL: if( total_shreds <= 12UL ) break; gf_stu( parity_shred[ 12UL-data_shred_cnt ] + shred_pos, in12 ); in12 = gf_zero(); FALLTHRU
      69     3501555 :       case 13UL: if( total_shreds <= 13UL ) break; gf_stu( parity_shred[ 13UL-data_shred_cnt ] + shred_pos, in13 ); in13 = gf_zero(); FALLTHRU
      70     3764847 :       case 14UL: if( total_shreds <= 14UL ) break; gf_stu( parity_shred[ 14UL-data_shred_cnt ] + shred_pos, in14 ); in14 = gf_zero(); FALLTHRU
      71     4028139 :       case 15UL: if( total_shreds <= 15UL ) break; gf_stu( parity_shred[ 15UL-data_shred_cnt ] + shred_pos, in15 ); in15 = gf_zero();
      72     4291431 :     }
      73     4291431 :     ulong parity_produced  = fd_ulong_min( 16UL - data_shred_cnt, parity_shred_cnt );
      74     4291431 :     ulong parity_remaining = parity_shred_cnt - parity_produced;
      75     4291431 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
      76             :       /* Produce another 16 parity shreds */
      77     4291431 :       FD_REEDSOL_GENERATE_FFT(  16, 16, ALL_VARS );
      78     4291431 :       switch( parity_remaining ) {
      79     1793364 :         default:
      80     2070927 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
      81     2070927 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
      82     2348490 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
      83     2348490 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
      84     2626053 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
      85     2903616 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
      86     2903616 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
      87     3181179 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
      88     3181179 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
      89     3458742 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
      90     3736305 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
      91     3736305 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
      92     4013868 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
      93     4013868 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
      94     4291431 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
      95     4291431 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
      96     4291431 :       }
      97     4291431 :       parity_produced += fd_ulong_min( 16UL, parity_remaining );
      98     4291431 :       parity_remaining = parity_shred_cnt - parity_produced;
      99     4291431 :     }
     100     4291431 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     101             :       /* Produce another 16 parity shreds */
     102     1793364 :       FD_REEDSOL_GENERATE_IFFT( 16, 16, ALL_VARS );
     103     1793364 :       FD_REEDSOL_GENERATE_FFT(  16, 32, ALL_VARS );
     104     1793364 :       switch( parity_remaining ) {
     105           0 :         default:
     106           0 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
     107           0 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
     108           0 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
     109           0 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
     110           0 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
     111           0 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
     112      263292 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
     113      526584 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
     114      526584 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
     115      789876 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
     116     1053168 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
     117     1053168 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
     118     1316460 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     119     1579752 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     120     1579752 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     121     1793364 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     122     1793364 :       }
     123     1793364 :       parity_produced += fd_ulong_min( 16UL, parity_remaining );
     124     1793364 :       parity_remaining = parity_shred_cnt - parity_produced;
     125     1793364 :     }
     126     4291431 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     127             :       /* Produce another 16 parity shreds */
     128           0 :       FD_REEDSOL_GENERATE_IFFT( 16, 32, ALL_VARS );
     129           0 :       FD_REEDSOL_GENERATE_FFT(  16, 48, ALL_VARS );
     130           0 :       switch( parity_remaining ) {
     131           0 :         default:
     132           0 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
     133           0 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
     134           0 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
     135           0 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
     136           0 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
     137           0 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
     138           0 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
     139           0 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
     140           0 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
     141           0 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
     142           0 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
     143           0 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
     144           0 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     145           0 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     146           0 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     147           0 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     148           0 :       }
     149           0 :       parity_produced += fd_ulong_min( 16UL, parity_remaining );
     150           0 :       parity_remaining = parity_shred_cnt - parity_produced;
     151           0 :     }
     152     4291431 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     153             :       /* Produce another 16 parity shreds */
     154           0 :       FD_REEDSOL_GENERATE_IFFT( 16, 48, ALL_VARS );
     155           0 :       FD_REEDSOL_GENERATE_FFT(  16, 64, ALL_VARS );
     156           0 :       switch( parity_remaining ) {
     157           0 :         default:
     158           0 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
     159           0 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
     160           0 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
     161           0 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
     162           0 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
     163           0 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
     164           0 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
     165           0 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
     166           0 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
     167           0 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
     168           0 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
     169           0 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
     170           0 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     171           0 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     172           0 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     173           0 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     174           0 :       }
     175           0 :       parity_produced += fd_ulong_min( 16UL, parity_remaining );
     176           0 :       parity_remaining = parity_shred_cnt - parity_produced;
     177           0 :     }
     178     4291431 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     179             :       /* Produce another 16 parity shreds */
     180           0 :       FD_REEDSOL_GENERATE_IFFT( 16, 64, ALL_VARS );
     181           0 :       FD_REEDSOL_GENERATE_FFT(  16, 80, ALL_VARS );
     182           0 :       switch( parity_remaining ) {
     183           0 :         default:
     184           0 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     185           0 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     186           0 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     187           0 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     188           0 :       }
     189           0 :       parity_produced += fd_ulong_min( 4UL, parity_remaining );
     190           0 :       parity_remaining = parity_shred_cnt - parity_produced;
     191           0 :     }
     192     4291431 :     #undef ALL_VARS
     193             :     /* In order to handle shred sizes that are not divisible by 32, we clamp
     194             :        shred_pos to shred_sz-32 when shred_sz-32<shred_pos<shred_sz
     195             :        (after the increment). */
     196     4291431 :     shred_pos += GF_WIDTH;
     197     4291431 :     shred_pos = fd_ulong_if( ((shred_sz-GF_WIDTH)<shred_pos) & (shred_pos<shred_sz), shred_sz-GF_WIDTH, shred_pos );
     198     4291431 :   }
     199      137136 : }

Generated by: LCOV version 1.14