sw/tests/fgmp/fgmp_sort.c
// local sort of 8 elements with odd-even merge sorting
local sort of 8 elements with odd-even merge sorting
local sort of 8 elements with odd - even merge sorting
void chunk_sort_oddeven(uint64_t *buf)
{
    assert (CHUNK_SIZE == 8);
    uint64_t a0 = buf[0];
    uint64_t a1 = buf[1];
    uint64_t a2 = buf[2];
    uint64_t a3 = buf[3];
    uint64_t a4 = buf[4];
    uint64_t a5 = buf[5];
    uint64_t a6 = buf[6];
    uint64_t a7 = buf[7];
#define COMP(a, b) if (a>b) {uint64_t z=a; a=b; b=z; }
        COMP(a0, a1)        
        COMP(a2, a3)
        COMP(a4, a5)
        COMP(a6, a7)
        COMP(a0, a2)        
        COMP(a1, a3)
        COMP(a4, a6)
        COMP(a5, a7)
        COMP(a1, a2)        
        COMP(a5, a6)
        COMP(a0, a4)        
        COMP(a1, a5)
        COMP(a2, a6)
        COMP(a3, a7)
        COMP(a2, a4)        
        COMP(a3, a5)
        COMP(a1, a2)        
        COMP(a3, a4)
        COMP(a5, a6)
#undef COMP
    buf[0] = a0;
    buf[1] = a1;
    buf[2] = a2;
    buf[3] = a3;
    buf[4] = a4;
    buf[5] = a5;
    buf[6] = a6;
    buf[7] = a7;
}
void chunk_sort_oddeven ( uint64_t * buf ) { assert ( CHUNK_SIZE == 8 ) ; uint64_t a0 = buf [ 0 ] ; uint64_t a1 = buf [ 1 ] ; uint64_t a2 = buf [ 2 ] ; uint64_t a3 = buf [ 3 ] ; uint64_t a4 = buf [ 4 ] ; uint64_t a5 = buf [ 5 ] ; uint64_t a6 = buf [ 6 ] ; uint64_t a7 = buf [ 7 ] ; #define COMP ( a , b )  if (a>b) {uint64_t z=a; a=b; b=z; } COMP ( a0 , a1 ) COMP ( a2 , a3 ) COMP ( a4 , a5 ) COMP ( a6 , a7 ) COMP ( a0 , a2 ) COMP ( a1 , a3 ) COMP ( a4 , a6 ) COMP ( a5 , a7 ) COMP ( a1 , a2 ) COMP ( a5 , a6 ) COMP ( a0 , a4 ) COMP ( a1 , a5 ) COMP ( a2 , a6 ) COMP ( a3 , a7 ) COMP ( a2 , a4 ) COMP ( a3 , a5 ) COMP ( a1 , a2 ) COMP ( a3 , a4 ) COMP ( a5 , a6 ) #undef  COMP buf [ 0 ] = a0 ; buf [ 1 ] = a1 ; buf [ 2 ] = a2 ; buf [ 3 ] = a3 ; buf [ 4 ] = a4 ; buf [ 5 ] = a5 ; buf [ 6 ] = a6 ; buf [ 7 ] = a7 ; }
local sort of 8 elements with odd-even merge sorting
local sort of 8 elements with odd - even merge sorting
// sort 0 // sort 1 // merge 1 0 // sort 2 // merge 2 0 // merge 2 1