LCOV - code coverage report
Current view: top level - ballet/bigint - fd_uint384.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 35 0.0 %
Date: 2026-10-22 18:10:43 Functions: 0 4 0.0 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_ballet_bigint_fd_uint384_h
       2             : #define HEADER_fd_src_ballet_bigint_fd_uint384_h
       3             : 
       4             : /* Implementation of uint384. */
       5             : 
       6             : #include "../fd_ballet_base.h"
       7             : 
       8             : /* Kept at the natural alignment, as our usecases like P-384 require that
       9             :    the limbs have no padding in between them. */
      10             : union fd_uint384 {
      11             :   ulong limbs[6];
      12             :   uchar buf[48];
      13             : };
      14             : typedef union fd_uint384 fd_uint384_t;
      15             : 
      16             : static inline fd_uint384_t *
      17             : fd_uint384_bswap( fd_uint384_t *       r,
      18           0 :                   fd_uint384_t const * a ) {
      19           0 :   ulong r5 = fd_ulong_bswap( a->limbs[0] );
      20           0 :   ulong r4 = fd_ulong_bswap( a->limbs[1] );
      21           0 :   ulong r3 = fd_ulong_bswap( a->limbs[2] );
      22           0 :   ulong r2 = fd_ulong_bswap( a->limbs[3] );
      23           0 :   ulong r1 = fd_ulong_bswap( a->limbs[4] );
      24           0 :   ulong r0 = fd_ulong_bswap( a->limbs[5] );
      25           0 :   r->limbs[5] = r5;
      26           0 :   r->limbs[4] = r4;
      27           0 :   r->limbs[3] = r3;
      28           0 :   r->limbs[2] = r2;
      29           0 :   r->limbs[1] = r1;
      30           0 :   r->limbs[0] = r0;
      31           0 :   return r;
      32           0 : }
      33             : 
      34             : /* fd_uint384_eq returns 1 if a == b, 0 otherwise. */
      35             : static inline int
      36             : fd_uint384_eq( fd_uint384_t const * a,
      37           0 :                fd_uint384_t const * b ) {
      38           0 :   return ( a->limbs[0] == b->limbs[0] )
      39           0 :       && ( a->limbs[1] == b->limbs[1] )
      40           0 :       && ( a->limbs[2] == b->limbs[2] )
      41           0 :       && ( a->limbs[3] == b->limbs[3] )
      42           0 :       && ( a->limbs[4] == b->limbs[4] )
      43           0 :       && ( a->limbs[5] == b->limbs[5] );
      44           0 : }
      45             : 
      46             : /* fd_uint384_is_zero returns 1 if a == 0, 0 otherwise. */
      47             : static inline int
      48           0 : fd_uint384_is_zero( fd_uint384_t const * a ) {
      49           0 :   return !( a->limbs[0] | a->limbs[1] | a->limbs[2] |
      50           0 :             a->limbs[3] | a->limbs[4] | a->limbs[5] );
      51           0 : }
      52             : 
      53             : /* fd_uint384_cmp returns 0 if a == b, -1 if a < b, 1 if a > b. */
      54             : static inline int
      55             : fd_uint384_cmp( fd_uint384_t const * a,
      56           0 :                 fd_uint384_t const * b ) {
      57           0 :   for( int i=5; i>=0; i-- ) {
      58           0 :     if( a->limbs[i] != b->limbs[i] ) {
      59           0 :       return a->limbs[i] > b->limbs[i] ? 1 : -1;
      60           0 :     }
      61           0 :   }
      62           0 :   return 0;
      63           0 : }
      64             : 
      65             : #endif /* HEADER_fd_src_ballet_bigint_fd_uint384_h */

Generated by: LCOV version 1.14