LCOV - code coverage report
Current view: top level - ballet/murmur3 - fd_murmur3.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 43 43 100.0 %
Date: 2025-03-20 12:08:36 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #include "fd_murmur3.h"
       2             : 
       3             : static uint
       4             : fd_murmur3_32_( void const * _data,
       5             :                 ulong        sz,
       6   307262445 :                 uint         seed ) {
       7             : 
       8   307262445 :   uchar const * data   = _data;
       9   307262445 :   uint          sz_tag = (uint)sz;
      10             : 
      11   307262445 :   uint c1 = 0xcc9e2d51U;
      12   307262445 :   uint c2 = 0x1b873593U;
      13   307262445 :   int  r1 = 15;
      14   307262445 :   int  r2 = 13;
      15   307262445 :   uint m  = 5;
      16   307262445 :   uint n  = 0xe6546b64U;
      17             : 
      18   307262445 :   uint hash = seed;
      19             : 
      20  1691407815 :   while( sz>=4 ) {
      21  1384145370 :     uint k  = FD_LOAD( uint, data );
      22  1384145370 :          k *= c1;
      23  1384145370 :          k  = fd_uint_rotate_left( k, r1 );
      24  1384145370 :          k *= c2;
      25             : 
      26  1384145370 :     hash ^= k;
      27  1384145370 :     hash  = fd_uint_rotate_left( hash, r2 );
      28  1384145370 :     hash  = hash*m + n;
      29             : 
      30  1384145370 :     data+=4UL;
      31  1384145370 :     sz  -=4UL;
      32  1384145370 :   }
      33             : 
      34   307262445 :   uint rem = 0;
      35   307262445 :   switch( sz ) {
      36         117 :   case 3: rem ^= (uint)data[2]<<16U;  __attribute__((fallthrough));
      37         189 :   case 2: rem ^= (uint)data[1]<<8U;   __attribute__((fallthrough));
      38         231 :   case 1: rem ^= (uint)data[0];
      39         231 :           rem *= c1;
      40         231 :           rem  = fd_uint_rotate_left( rem, r1 );
      41         231 :           rem *= c2;
      42         231 :           hash ^= rem;                __attribute__((fallthrough));
      43   307262445 :   case 0: break;
      44   307262445 :   }
      45             : 
      46   307262445 :   hash ^= sz_tag;
      47   307262445 :   hash ^= hash>>16U;
      48   307262445 :   hash *= 0x85ebca6bU;
      49   307262445 :   hash ^= hash>>13U;
      50   307262445 :   hash *= 0xc2b2ae35U;
      51   307262445 :   hash ^= hash>>16U;
      52             : 
      53   307262445 :   return hash;
      54   307262445 : }
      55             : 
      56             : uint
      57             : fd_murmur3_32( void const * _data,
      58             :                ulong        sz,
      59   307262445 :                uint         seed ) {
      60   307262445 :   return fd_murmur3_32_( _data, sz, seed );
      61   307262445 : }

Generated by: LCOV version 1.14