LCOV - code coverage report
Current view: top level - ballet/reedsol - fd_reedsol_encode_32.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 117 170 68.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_32( ulong                 shred_sz,
       6             :                               uchar const * const * data_shred,
       7             :                               ulong                 data_shred_cnt,
       8             :                               uchar       * const * parity_shred,
       9      487706 :                               ulong                 parity_shred_cnt ) {
      10    15493354 :   for( ulong shred_pos=0UL; shred_pos<shred_sz; /* advanced manually at end of loop */ ) {
      11    15005648 :     gf_t in00 = gf_ldu( data_shred[  0 ] + shred_pos );  gf_t in01 = gf_ldu( data_shred[  1 ] + shred_pos );
      12    15005648 :     gf_t in02 = gf_ldu( data_shred[  2 ] + shred_pos );  gf_t in03 = gf_ldu( data_shred[  3 ] + shred_pos );
      13    15005648 :     gf_t in04 = gf_ldu( data_shred[  4 ] + shred_pos );  gf_t in05 = gf_ldu( data_shred[  5 ] + shred_pos );
      14    15005648 :     gf_t in06 = gf_ldu( data_shred[  6 ] + shred_pos );  gf_t in07 = gf_ldu( data_shred[  7 ] + shred_pos );
      15    15005648 :     gf_t in08 = gf_ldu( data_shred[  8 ] + shred_pos );  gf_t in09 = gf_ldu( data_shred[  9 ] + shred_pos );
      16    15005648 :     gf_t in10 = gf_ldu( data_shred[ 10 ] + shred_pos );  gf_t in11 = gf_ldu( data_shred[ 11 ] + shred_pos );
      17    15005648 :     gf_t in12 = gf_ldu( data_shred[ 12 ] + shred_pos );  gf_t in13 = gf_ldu( data_shred[ 13 ] + shred_pos );
      18    15005648 :     gf_t in14 = gf_ldu( data_shred[ 14 ] + shred_pos );  gf_t in15 = gf_ldu( data_shred[ 15 ] + shred_pos );
      19    15005648 :     gf_t in16 = gf_zero();  gf_t in17 = gf_zero();  gf_t in18 = gf_zero();  gf_t in19 = gf_zero();
      20    15005648 :     gf_t in20 = gf_zero();  gf_t in21 = gf_zero();  gf_t in22 = gf_zero();  gf_t in23 = gf_zero();
      21    15005648 :     gf_t in24 = gf_zero();  gf_t in25 = gf_zero();  gf_t in26 = gf_zero();  gf_t in27 = gf_zero();
      22    15005648 :     gf_t in28 = gf_zero();  gf_t in29 = gf_zero();  gf_t in30 = gf_zero();  gf_t in31 = gf_zero();
      23    15005648 :     switch( data_shred_cnt ) {
      24    11055980 :       case 32UL: in31 = gf_ldu( data_shred[ 31 ] + shred_pos ); FALLTHRU
      25    11319368 :       case 31UL: in30 = gf_ldu( data_shred[ 30 ] + shred_pos ); FALLTHRU
      26    11582660 :       case 30UL: in29 = gf_ldu( data_shred[ 29 ] + shred_pos ); FALLTHRU
      27    11845952 :       case 29UL: in28 = gf_ldu( data_shred[ 28 ] + shred_pos ); FALLTHRU
      28    12109244 :       case 28UL: in27 = gf_ldu( data_shred[ 27 ] + shred_pos ); FALLTHRU
      29    12372536 :       case 27UL: in26 = gf_ldu( data_shred[ 26 ] + shred_pos ); FALLTHRU
      30    12635828 :       case 26UL: in25 = gf_ldu( data_shred[ 25 ] + shred_pos ); FALLTHRU
      31    12899216 :       case 25UL: in24 = gf_ldu( data_shred[ 24 ] + shred_pos ); FALLTHRU
      32    13162508 :       case 24UL: in23 = gf_ldu( data_shred[ 23 ] + shred_pos ); FALLTHRU
      33    13425800 :       case 23UL: in22 = gf_ldu( data_shred[ 22 ] + shred_pos ); FALLTHRU
      34    13689092 :       case 22UL: in21 = gf_ldu( data_shred[ 21 ] + shred_pos ); FALLTHRU
      35    13952384 :       case 21UL: in20 = gf_ldu( data_shred[ 20 ] + shred_pos ); FALLTHRU
      36    14215676 :       case 20UL: in19 = gf_ldu( data_shred[ 19 ] + shred_pos ); FALLTHRU
      37    14478968 :       case 19UL: in18 = gf_ldu( data_shred[ 18 ] + shred_pos ); FALLTHRU
      38    14742356 :       case 18UL: in17 = gf_ldu( data_shred[ 17 ] + shred_pos ); FALLTHRU
      39    15005648 :       case 17UL: in16 = gf_ldu( data_shred[ 16 ] + shred_pos );
      40    15005648 :     }
      41    15005648 :     #define ALL_VARS in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, in16, in17, in18, in19, in20, in21, in22, in23, in24, in25, in26, in27, in28, in29, in30, in31
      42    15005648 :     switch( data_shred_cnt ) {
      43    11055980 :       case 32UL: FD_REEDSOL_GENERATE_IFFT( 32,  0, ALL_VARS ); break;
      44      263388 :       case 31UL: FD_REEDSOL_GENERATE_PPT(  32, 31, ALL_VARS ); break;
      45      263292 :       case 30UL: FD_REEDSOL_GENERATE_PPT(  32, 30, ALL_VARS ); break;
      46      263292 :       case 29UL: FD_REEDSOL_GENERATE_PPT(  32, 29, ALL_VARS ); break;
      47      263292 :       case 28UL: FD_REEDSOL_GENERATE_PPT(  32, 28, ALL_VARS ); break;
      48      263292 :       case 27UL: FD_REEDSOL_GENERATE_PPT(  32, 27, ALL_VARS ); break;
      49      263292 :       case 26UL: FD_REEDSOL_GENERATE_PPT(  32, 26, ALL_VARS ); break;
      50      263388 :       case 25UL: FD_REEDSOL_GENERATE_PPT(  32, 25, ALL_VARS ); break;
      51      263292 :       case 24UL: FD_REEDSOL_GENERATE_PPT(  32, 24, ALL_VARS ); break;
      52      263292 :       case 23UL: FD_REEDSOL_GENERATE_PPT(  32, 23, ALL_VARS ); break;
      53      263292 :       case 22UL: FD_REEDSOL_GENERATE_PPT(  32, 22, ALL_VARS ); break;
      54      263292 :       case 21UL: FD_REEDSOL_GENERATE_PPT(  32, 21, ALL_VARS ); break;
      55      263292 :       case 20UL: FD_REEDSOL_GENERATE_PPT(  32, 20, ALL_VARS ); break;
      56      263292 :       case 19UL: FD_REEDSOL_GENERATE_PPT(  32, 19, ALL_VARS ); break;
      57      263388 :       case 18UL: FD_REEDSOL_GENERATE_PPT(  32, 18, ALL_VARS ); break;
      58      263292 :       case 17UL: FD_REEDSOL_GENERATE_PPT(  32, 17, ALL_VARS ); break;
      59    15005648 :     }
      60             :     /* That generated the first 32-data_shred_cnt parity shreds in the
      61             :        last 32-data_shred_cnt variables. We might only need
      62             :        parity_shred_cnt of them though. */
      63    15005648 :     ulong total_shreds = data_shred_cnt+parity_shred_cnt;
      64    15005648 :     switch( data_shred_cnt ) {
      65      263292 :       case 17UL: if( total_shreds <= 17UL ) break; gf_stu( parity_shred[ 17UL-data_shred_cnt ] + shred_pos, in17 ); in17 = gf_zero(); FALLTHRU
      66      526680 :       case 18UL: if( total_shreds <= 18UL ) break; gf_stu( parity_shred[ 18UL-data_shred_cnt ] + shred_pos, in18 ); in18 = gf_zero(); FALLTHRU
      67      789972 :       case 19UL: if( total_shreds <= 19UL ) break; gf_stu( parity_shred[ 19UL-data_shred_cnt ] + shred_pos, in19 ); in19 = gf_zero(); FALLTHRU
      68     1053264 :       case 20UL: if( total_shreds <= 20UL ) break; gf_stu( parity_shred[ 20UL-data_shred_cnt ] + shred_pos, in20 ); in20 = gf_zero(); FALLTHRU
      69     1316556 :       case 21UL: if( total_shreds <= 21UL ) break; gf_stu( parity_shred[ 21UL-data_shred_cnt ] + shred_pos, in21 ); in21 = gf_zero(); FALLTHRU
      70     1579848 :       case 22UL: if( total_shreds <= 22UL ) break; gf_stu( parity_shred[ 22UL-data_shred_cnt ] + shred_pos, in22 ); in22 = gf_zero(); FALLTHRU
      71     1843140 :       case 23UL: if( total_shreds <= 23UL ) break; gf_stu( parity_shred[ 23UL-data_shred_cnt ] + shred_pos, in23 ); in23 = gf_zero(); FALLTHRU
      72     2106432 :       case 24UL: if( total_shreds <= 24UL ) break; gf_stu( parity_shred[ 24UL-data_shred_cnt ] + shred_pos, in24 ); in24 = gf_zero(); FALLTHRU
      73     2369820 :       case 25UL: if( total_shreds <= 25UL ) break; gf_stu( parity_shred[ 25UL-data_shred_cnt ] + shred_pos, in25 ); in25 = gf_zero(); FALLTHRU
      74     2633112 :       case 26UL: if( total_shreds <= 26UL ) break; gf_stu( parity_shred[ 26UL-data_shred_cnt ] + shred_pos, in26 ); in26 = gf_zero(); FALLTHRU
      75     2896404 :       case 27UL: if( total_shreds <= 27UL ) break; gf_stu( parity_shred[ 27UL-data_shred_cnt ] + shred_pos, in27 ); in27 = gf_zero(); FALLTHRU
      76     3159696 :       case 28UL: if( total_shreds <= 28UL ) break; gf_stu( parity_shred[ 28UL-data_shred_cnt ] + shred_pos, in28 ); in28 = gf_zero(); FALLTHRU
      77     3422988 :       case 29UL: if( total_shreds <= 29UL ) break; gf_stu( parity_shred[ 29UL-data_shred_cnt ] + shred_pos, in29 ); in29 = gf_zero(); FALLTHRU
      78     3686280 :       case 30UL: if( total_shreds <= 30UL ) break; gf_stu( parity_shred[ 30UL-data_shred_cnt ] + shred_pos, in30 ); in30 = gf_zero(); FALLTHRU
      79     3949668 :       case 31UL: if( total_shreds <= 31UL ) break; gf_stu( parity_shred[ 31UL-data_shred_cnt ] + shred_pos, in31 ); in31 = gf_zero();
      80    15005648 :     }
      81    15005648 :     ulong parity_produced  = fd_ulong_min( 32UL - data_shred_cnt, parity_shred_cnt );
      82    15005648 :     ulong parity_remaining = parity_shred_cnt - parity_produced;
      83    15005648 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
      84             :       /* Produce another 32 parity shreds */
      85    15005648 :       FD_REEDSOL_GENERATE_FFT(  32, 32, ALL_VARS );
      86    15005648 :       switch( parity_remaining ) {
      87           0 :         default:
      88    11055980 :         case 32UL: gf_stu( parity_shred[ 31UL+parity_produced ] + shred_pos, in31 ); FALLTHRU
      89    11319368 :         case 31UL: gf_stu( parity_shred[ 30UL+parity_produced ] + shred_pos, in30 ); FALLTHRU
      90    11582660 :         case 30UL: gf_stu( parity_shred[ 29UL+parity_produced ] + shred_pos, in29 ); FALLTHRU
      91    11582660 :         case 29UL: gf_stu( parity_shred[ 28UL+parity_produced ] + shred_pos, in28 ); FALLTHRU
      92    11845952 :         case 28UL: gf_stu( parity_shred[ 27UL+parity_produced ] + shred_pos, in27 ); FALLTHRU
      93    12109244 :         case 27UL: gf_stu( parity_shred[ 26UL+parity_produced ] + shred_pos, in26 ); FALLTHRU
      94    12372536 :         case 26UL: gf_stu( parity_shred[ 25UL+parity_produced ] + shred_pos, in25 ); FALLTHRU
      95    12372536 :         case 25UL: gf_stu( parity_shred[ 24UL+parity_produced ] + shred_pos, in24 ); FALLTHRU
      96    12635828 :         case 24UL: gf_stu( parity_shred[ 23UL+parity_produced ] + shred_pos, in23 ); FALLTHRU
      97    12899216 :         case 23UL: gf_stu( parity_shred[ 22UL+parity_produced ] + shred_pos, in22 ); FALLTHRU
      98    12899216 :         case 22UL: gf_stu( parity_shred[ 21UL+parity_produced ] + shred_pos, in21 ); FALLTHRU
      99    13162508 :         case 21UL: gf_stu( parity_shred[ 20UL+parity_produced ] + shred_pos, in20 ); FALLTHRU
     100    13425800 :         case 20UL: gf_stu( parity_shred[ 19UL+parity_produced ] + shred_pos, in19 ); FALLTHRU
     101    13689092 :         case 19UL: gf_stu( parity_shred[ 18UL+parity_produced ] + shred_pos, in18 ); FALLTHRU
     102    13689092 :         case 18UL: gf_stu( parity_shred[ 17UL+parity_produced ] + shred_pos, in17 ); FALLTHRU
     103    13952384 :         case 17UL: gf_stu( parity_shred[ 16UL+parity_produced ] + shred_pos, in16 ); FALLTHRU
     104    14215676 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
     105    14215676 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
     106    14478968 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
     107    14742356 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
     108    14742356 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
     109    15005648 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
     110    15005648 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
     111    15005648 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
     112    15005648 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
     113    15005648 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
     114    15005648 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
     115    15005648 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
     116    15005648 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     117    15005648 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     118    15005648 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     119    15005648 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     120    15005648 :       }
     121    15005648 :       parity_produced += fd_ulong_min( 32UL, parity_remaining );
     122    15005648 :       parity_remaining = parity_shred_cnt - parity_produced;
     123    15005648 :     }
     124    15005648 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     125             :       /* Produce another 32 parity shreds */
     126           0 :       FD_REEDSOL_GENERATE_IFFT( 32, 32, ALL_VARS );
     127           0 :       FD_REEDSOL_GENERATE_FFT(  32, 64, ALL_VARS );
     128           0 :       switch( parity_remaining ) {
     129           0 :         default:
     130           0 :         case 32UL: gf_stu( parity_shred[ 31UL+parity_produced ] + shred_pos, in31 ); FALLTHRU
     131           0 :         case 31UL: gf_stu( parity_shred[ 30UL+parity_produced ] + shred_pos, in30 ); FALLTHRU
     132           0 :         case 30UL: gf_stu( parity_shred[ 29UL+parity_produced ] + shred_pos, in29 ); FALLTHRU
     133           0 :         case 29UL: gf_stu( parity_shred[ 28UL+parity_produced ] + shred_pos, in28 ); FALLTHRU
     134           0 :         case 28UL: gf_stu( parity_shred[ 27UL+parity_produced ] + shred_pos, in27 ); FALLTHRU
     135           0 :         case 27UL: gf_stu( parity_shred[ 26UL+parity_produced ] + shred_pos, in26 ); FALLTHRU
     136           0 :         case 26UL: gf_stu( parity_shred[ 25UL+parity_produced ] + shred_pos, in25 ); FALLTHRU
     137           0 :         case 25UL: gf_stu( parity_shred[ 24UL+parity_produced ] + shred_pos, in24 ); FALLTHRU
     138           0 :         case 24UL: gf_stu( parity_shred[ 23UL+parity_produced ] + shred_pos, in23 ); FALLTHRU
     139           0 :         case 23UL: gf_stu( parity_shred[ 22UL+parity_produced ] + shred_pos, in22 ); FALLTHRU
     140           0 :         case 22UL: gf_stu( parity_shred[ 21UL+parity_produced ] + shred_pos, in21 ); FALLTHRU
     141           0 :         case 21UL: gf_stu( parity_shred[ 20UL+parity_produced ] + shred_pos, in20 ); FALLTHRU
     142           0 :         case 20UL: gf_stu( parity_shred[ 19UL+parity_produced ] + shred_pos, in19 ); FALLTHRU
     143           0 :         case 19UL: gf_stu( parity_shred[ 18UL+parity_produced ] + shred_pos, in18 ); FALLTHRU
     144           0 :         case 18UL: gf_stu( parity_shred[ 17UL+parity_produced ] + shred_pos, in17 ); FALLTHRU
     145           0 :         case 17UL: gf_stu( parity_shred[ 16UL+parity_produced ] + shred_pos, in16 ); FALLTHRU
     146           0 :         case 16UL: gf_stu( parity_shred[ 15UL+parity_produced ] + shred_pos, in15 ); FALLTHRU
     147           0 :         case 15UL: gf_stu( parity_shred[ 14UL+parity_produced ] + shred_pos, in14 ); FALLTHRU
     148           0 :         case 14UL: gf_stu( parity_shred[ 13UL+parity_produced ] + shred_pos, in13 ); FALLTHRU
     149           0 :         case 13UL: gf_stu( parity_shred[ 12UL+parity_produced ] + shred_pos, in12 ); FALLTHRU
     150           0 :         case 12UL: gf_stu( parity_shred[ 11UL+parity_produced ] + shred_pos, in11 ); FALLTHRU
     151           0 :         case 11UL: gf_stu( parity_shred[ 10UL+parity_produced ] + shred_pos, in10 ); FALLTHRU
     152           0 :         case 10UL: gf_stu( parity_shred[  9UL+parity_produced ] + shred_pos, in09 ); FALLTHRU
     153           0 :         case  9UL: gf_stu( parity_shred[  8UL+parity_produced ] + shred_pos, in08 ); FALLTHRU
     154           0 :         case  8UL: gf_stu( parity_shred[  7UL+parity_produced ] + shred_pos, in07 ); FALLTHRU
     155           0 :         case  7UL: gf_stu( parity_shred[  6UL+parity_produced ] + shred_pos, in06 ); FALLTHRU
     156           0 :         case  6UL: gf_stu( parity_shred[  5UL+parity_produced ] + shred_pos, in05 ); FALLTHRU
     157           0 :         case  5UL: gf_stu( parity_shred[  4UL+parity_produced ] + shred_pos, in04 ); FALLTHRU
     158           0 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     159           0 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     160           0 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     161           0 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     162           0 :       }
     163           0 :       parity_produced += fd_ulong_min( 32UL, parity_remaining );
     164           0 :       parity_remaining = parity_shred_cnt - parity_produced;
     165           0 :     }
     166    15005648 :     if( FD_UNLIKELY( parity_remaining>0UL ) ) {
     167             :       /* Produce another 32 parity shreds */
     168           0 :       FD_REEDSOL_GENERATE_IFFT( 32, 64, ALL_VARS );
     169           0 :       FD_REEDSOL_GENERATE_FFT(  32, 96, ALL_VARS );
     170           0 :       switch( parity_remaining ) {
     171           0 :         default:
     172           0 :         case  4UL: gf_stu( parity_shred[  3UL+parity_produced ] + shred_pos, in03 ); FALLTHRU
     173           0 :         case  3UL: gf_stu( parity_shred[  2UL+parity_produced ] + shred_pos, in02 ); FALLTHRU
     174           0 :         case  2UL: gf_stu( parity_shred[  1UL+parity_produced ] + shred_pos, in01 ); FALLTHRU
     175           0 :         case  1UL: gf_stu( parity_shred[  0UL+parity_produced ] + shred_pos, in00 );
     176           0 :       }
     177           0 :       parity_produced += fd_ulong_min( 4UL, parity_remaining );
     178           0 :       parity_remaining = parity_shred_cnt - parity_produced;
     179           0 :     }
     180    15005648 :     #undef ALL_VARS
     181             :     /* In order to handle shred sizes that are not divisible by 32, we clamp
     182             :        shred_pos to shred_sz-32 when shred_sz-32<shred_pos<shred_sz
     183             :        (after the increment). */
     184    15005648 :     shred_pos += GF_WIDTH;
     185    15005648 :     shred_pos = fd_ulong_if( ((shred_sz-GF_WIDTH)<shred_pos) & (shred_pos<shred_sz), shred_sz-GF_WIDTH, shred_pos );
     186    15005648 :   }
     187      487706 : }

Generated by: LCOV version 1.14