mirror of
https://github.com/JayDDee/cpuminer-opt.git
synced 2025-09-17 23:44:27 +00:00
79 lines
1.5 KiB
C
79 lines
1.5 KiB
C
#include "timetravel10-gate.h"
|
|
|
|
void tt10_set_target( struct work* work, double job_diff )
|
|
{
|
|
work_set_target( work, job_diff / (256.0 * opt_diff_factor) );
|
|
}
|
|
|
|
bool register_timetravel10_algo( algo_gate_t* gate )
|
|
{
|
|
#ifdef TIMETRAVEL10_4WAY
|
|
init_tt10_4way_ctx();
|
|
gate->scanhash = (void*)&scanhash_timetravel10_4way;
|
|
gate->hash = (void*)&timetravel10_4way_hash;
|
|
#else
|
|
init_tt10_ctx();
|
|
gate->scanhash = (void*)&scanhash_timetravel10;
|
|
gate->hash = (void*)&timetravel10_hash;
|
|
#endif
|
|
gate->set_target = (void*)&tt10_set_target;
|
|
gate->optimizations = SSE2_OPT | AES_OPT | AVX_OPT | AVX2_OPT | FOUR_WAY_OPT;
|
|
gate->get_max64 = (void*)&get_max64_0xffffLL;
|
|
return true;
|
|
};
|
|
|
|
inline void tt10_swap( int *a, int *b )
|
|
{
|
|
int c = *a;
|
|
*a = *b;
|
|
*b = c;
|
|
}
|
|
|
|
inline void reverse( int *pbegin, int *pend )
|
|
{
|
|
while ( (pbegin != pend) && (pbegin != --pend) )
|
|
{
|
|
tt10_swap( pbegin, pend );
|
|
pbegin++;
|
|
}
|
|
}
|
|
|
|
void tt10_next_permutation( int *pbegin, int *pend )
|
|
{
|
|
if ( pbegin == pend )
|
|
return;
|
|
|
|
int *i = pbegin;
|
|
++i;
|
|
if ( i == pend )
|
|
return;
|
|
|
|
i = pend;
|
|
--i;
|
|
|
|
while (1)
|
|
{
|
|
int *j = i;
|
|
--i;
|
|
|
|
if ( *i < *j )
|
|
{
|
|
int *k = pend;
|
|
|
|
while ( !(*i < *--k) ) /* do nothing */ ;
|
|
|
|
tt10_swap( i, k );
|
|
reverse(j, pend);
|
|
return; // true
|
|
}
|
|
|
|
if ( i == pbegin )
|
|
{
|
|
reverse(pbegin, pend);
|
|
return; // false
|
|
}
|
|
// else?
|
|
}
|
|
}
|
|
|