This commit is contained in:
Jay D Dee
2019-10-24 14:11:26 -04:00
parent 72330eb5a7
commit 86b889e1b0
65 changed files with 547 additions and 638 deletions

View File

@@ -122,10 +122,10 @@ Supported Algorithms
x13sm3 hsr (Hshare) x13sm3 hsr (Hshare)
x14 X14 x14 X14
x15 X15 x15 X15
x16r Ravencoin (RVN) (original algo) x16r
x16rv2 Ravencoin (RVN) (new algo) x16rv2 Ravencoin (RVN)
x16rt Gincoin (GIN) x16rt Gincoin (GIN)
x16rt_veil Veil (VEIL) x16rt-veil Veil (VEIL)
x16s Pigeoncoin (PGN) x16s Pigeoncoin (PGN)
x17 x17
x21s x21s
@@ -136,7 +136,7 @@ Supported Algorithms
yescryptr32 WAVI yescryptr32 WAVI
yespower Cryply yespower Cryply
yespowerr16 Yenten (YTN) yespowerr16 Yenten (YTN)
yespoer-b2b generic yespower + blake2b yespower-b2b generic yespower + blake2b
zr5 Ziftr zr5 Ziftr
Errata Errata
@@ -160,10 +160,12 @@ Bugs
---- ----
Users are encouraged to post their bug reports using git issues or on the Users are encouraged to post their bug reports using git issues or on the
Bitcoin Talk forum at: Bitcoin Talk forum or opening an issue in git:
https://bitcointalk.org/index.php?topic=1326803.0 https://bitcointalk.org/index.php?topic=1326803.0
https://github.com/JayDDee/cpuminer-opt/issues
All problem reports must be accompanied by a proper problem definition. All problem reports must be accompanied by a proper problem definition.
This should include how the problem occurred, the command line and This should include how the problem occurred, the command line and
output from the miner showing the startup messages and any errors. output from the miner showing the startup messages and any errors.
@@ -175,10 +177,6 @@ Donations
cpuminer-opt has no fees of any kind but donations are accepted. cpuminer-opt has no fees of any kind but donations are accepted.
BTC: 12tdvfF7KmAsihBXQXynT6E6th2c2pByTT BTC: 12tdvfF7KmAsihBXQXynT6E6th2c2pByTT
ETH: 0x72122edabcae9d3f57eab0729305a425f6fef6d0
LTC: LdUwoHJnux9r9EKqFWNvAi45kQompHk6e8
BCH: 1QKYkB6atn4P7RFozyziAXLEnurwnUM1cQ
BTG: GVUyECtRHeC5D58z9F3nGGfVQndwnsPnHQ
Happy mining! Happy mining!

View File

@@ -1,11 +1,6 @@
cpuminer-opt is a console program run from the command line using the cpuminer-opt is a console program run from the command line using the
keyboard, not the mouse. keyboard, not the mouse.
cpuminer-opt now supports HW SHA acceleration available on AMD Ryzen CPUs.
This feature requires recent SW including GCC version 5 or higher and
openssl version 1.1 or higher. It may also require using "-march=znver1"
compile flag.
Security warning Security warning
---------------- ----------------
@@ -36,17 +31,26 @@ FreeBSD YMMV.
Change Log Change Log
---------- ----------
v3.9.9.1
Fixed a day1 bug that could cause the miner to idle for up to 2 minutes
under certain circumstances.
Redesigned summary stats report now includes session statistics.
More robust handling of statistics to reduce corruption.
Removed --hide-diff option.
Better handling of cpu-affinity with more than 64 CPUs.
v3.9.9 v3.9.9
Added power2b algo for MicroBitcoin. Added power2b algo for MicroBitcoin.
Added generic yespower-b2b (yespower + blake2b) algo to be used with Added generic yespower-b2b (yespower + blake2b) algo to be used with
the parameters introduced in v3.9.7 for yespower & yescrypt. the parameters introduced in v3.9.7 for yespower & yescrypt.
Display additional info when a share is rejected. Display additional info when a share is rejected.
Some low level enhancements and minor tweaking of log output. Some low level enhancements and minor tweaking of log output.
RELEASE_NOTES (this file) and README.md added to Windows release package. RELEASE_NOTES (this file) and README.md added to Windows release package.
v3.9.8.1 v3.9.8.1

View File

@@ -116,8 +116,6 @@ void init_algo_gate( algo_gate_t* gate )
gate->get_nonceptr = (void*)&std_get_nonceptr; gate->get_nonceptr = (void*)&std_get_nonceptr;
gate->work_decode = (void*)&std_le_work_decode; gate->work_decode = (void*)&std_le_work_decode;
gate->decode_extra_data = (void*)&do_nothing; gate->decode_extra_data = (void*)&do_nothing;
gate->wait_for_diff = (void*)&std_wait_for_diff;
gate->get_max64 = (void*)&get_max64_0x1fffffLL;
gate->gen_merkle_root = (void*)&sha256d_gen_merkle_root; gate->gen_merkle_root = (void*)&sha256d_gen_merkle_root;
gate->stratum_gen_work = (void*)&std_stratum_gen_work; gate->stratum_gen_work = (void*)&std_stratum_gen_work;
gate->build_stratum_request = (void*)&std_le_build_stratum_request; gate->build_stratum_request = (void*)&std_le_build_stratum_request;
@@ -278,7 +276,7 @@ bool register_json_rpc2( algo_gate_t *gate )
applog(LOG_WARNING,"supported by cpuminer-opt. Shares submitted will"); applog(LOG_WARNING,"supported by cpuminer-opt. Shares submitted will");
applog(LOG_WARNING,"likely be rejected. Proceed at your own risk.\n"); applog(LOG_WARNING,"likely be rejected. Proceed at your own risk.\n");
gate->wait_for_diff = (void*)&do_nothing; // gate->wait_for_diff = (void*)&do_nothing;
gate->get_new_work = (void*)&jr2_get_new_work; gate->get_new_work = (void*)&jr2_get_new_work;
gate->get_nonceptr = (void*)&jr2_get_nonceptr; gate->get_nonceptr = (void*)&jr2_get_nonceptr;
gate->stratum_gen_work = (void*)&jr2_stratum_gen_work; gate->stratum_gen_work = (void*)&jr2_stratum_gen_work;

View File

@@ -35,7 +35,7 @@
// 6. Determine if other non existant functions are required. // 6. Determine if other non existant functions are required.
// That is determined by the need to add code in cpu-miner.c // That is determined by the need to add code in cpu-miner.c
// that applies only to the new algo. That is forbidden. All // that applies only to the new algo. That is forbidden. All
// algo specific code must be in theh algo's file. // algo specific code must be in the algo's file.
// //
// 7. If new functions need to be added to the gate add the type // 7. If new functions need to be added to the gate add the type
// to the structure, declare a null instance in this file and define // to the structure, declare a null instance in this file and define
@@ -48,10 +48,10 @@
// instances as they are defined by default, or unsafe functions that // instances as they are defined by default, or unsafe functions that
// are not needed by the algo. // are not needed by the algo.
// //
// 9. Add an case entry to the switch/case in function register_gate // 9. Add a case entry to the switch/case in function register_gate
// in file algo-gate-api.c for the new algo. // in file algo-gate-api.c for the new algo.
// //
// 10 If a new function type was defined add an entry to ini talgo_gate // 10 If a new function type was defined add an entry to init algo_gate
// to initialize the new function to its null instance described in step 7. // to initialize the new function to its null instance described in step 7.
// //
// 11. If the new algo has aliases add them to the alias array in // 11. If the new algo has aliases add them to the alias array in
@@ -110,14 +110,7 @@ inline bool set_excl ( set_t a, set_t b ) { return (a & b) == 0; }
typedef struct typedef struct
{ {
// special case, only one target, provides a callback for scanhash to
// submit work with less overhead.
// bool (*submit_work ) ( struct thr_info*, const struct work* );
// mandatory functions, must be overwritten // mandatory functions, must be overwritten
// Added a 5th arg for the thread_info structure to replace the int thr id
// in the first arg. Both will co-exist during the trasition.
//int ( *scanhash ) ( int, struct work*, uint32_t, uint64_t* );
int ( *scanhash ) ( struct work*, uint32_t, uint64_t*, struct thr_info* ); int ( *scanhash ) ( struct work*, uint32_t, uint64_t*, struct thr_info* );
// optional unsafe, must be overwritten if algo uses function // optional unsafe, must be overwritten if algo uses function
@@ -131,14 +124,12 @@ void ( *get_new_work ) ( struct work*, struct work*, int, uint32_t*,
bool ); bool );
uint32_t *( *get_nonceptr ) ( uint32_t* ); uint32_t *( *get_nonceptr ) ( uint32_t* );
void ( *decode_extra_data ) ( struct work*, uint64_t* ); void ( *decode_extra_data ) ( struct work*, uint64_t* );
void ( *wait_for_diff ) ( struct stratum_ctx* );
int64_t ( *get_max64 ) ();
bool ( *work_decode ) ( const json_t*, struct work* ); bool ( *work_decode ) ( const json_t*, struct work* );
bool ( *submit_getwork_result ) ( CURL*, struct work* ); bool ( *submit_getwork_result ) ( CURL*, struct work* );
void ( *gen_merkle_root ) ( char*, struct stratum_ctx* ); void ( *gen_merkle_root ) ( char*, struct stratum_ctx* );
void ( *build_extraheader ) ( struct work*, struct stratum_ctx* ); void ( *build_extraheader ) ( struct work*, struct stratum_ctx* );
void ( *build_block_header ) ( struct work*, uint32_t, uint32_t*, void ( *build_block_header ) ( struct work*, uint32_t, uint32_t*,
uint32_t*, uint32_t, uint32_t ); uint32_t*, uint32_t, uint32_t );
void ( *build_stratum_request ) ( char*, struct work*, struct stratum_ctx* ); void ( *build_stratum_request ) ( char*, struct work*, struct stratum_ctx* );
char* ( *malloc_txs_request ) ( struct work* ); char* ( *malloc_txs_request ) ( struct work* );
void ( *set_work_data_endian ) ( struct work* ); void ( *set_work_data_endian ) ( struct work* );
@@ -200,8 +191,6 @@ void null_hash_suw();
// optional safe targets, default listed first unless noted. // optional safe targets, default listed first unless noted.
void std_wait_for_diff();
uint32_t *std_get_nonceptr( uint32_t *work_data ); uint32_t *std_get_nonceptr( uint32_t *work_data );
uint32_t *jr2_get_nonceptr( uint32_t *work_data ); uint32_t *jr2_get_nonceptr( uint32_t *work_data );
@@ -216,21 +205,13 @@ void jr2_stratum_gen_work( struct stratum_ctx *sctx, struct work *work );
void sha256d_gen_merkle_root( char *merkle_root, struct stratum_ctx *sctx ); void sha256d_gen_merkle_root( char *merkle_root, struct stratum_ctx *sctx );
void SHA256_gen_merkle_root ( char *merkle_root, struct stratum_ctx *sctx ); void SHA256_gen_merkle_root ( char *merkle_root, struct stratum_ctx *sctx );
// pick your favorite or define your own
int64_t get_max64_0x1fffffLL(); // default
int64_t get_max64_0x40LL();
int64_t get_max64_0x3ffff();
int64_t get_max64_0x3fffffLL();
int64_t get_max64_0x1ffff();
int64_t get_max64_0xffffLL();
bool std_le_work_decode( const json_t *val, struct work *work ); bool std_le_work_decode( const json_t *val, struct work *work );
bool std_be_work_decode( const json_t *val, struct work *work ); bool std_be_work_decode( const json_t *val, struct work *work );
bool jr2_work_decode( const json_t *val, struct work *work ); bool jr2_work_decode( const json_t *val, struct work *work );
bool std_le_submit_getwork_result( CURL *curl, struct work *work ); bool std_le_submit_getwork_result( CURL *curl, struct work *work );
bool std_be_submit_getwork_result( CURL *curl, struct work *work ); bool std_be_submit_getwork_result( CURL *curl, struct work *work );
bool jr2_submit_getwork_result( CURL *curl, struct work *work ); bool jr2_submit_getwork_result( CURL *curl, struct work *work );
void std_le_build_stratum_request( char *req, struct work *work ); void std_le_build_stratum_request( char *req, struct work *work );
void std_be_build_stratum_request( char *req, struct work *work ); void std_be_build_stratum_request( char *req, struct work *work );
@@ -244,8 +225,8 @@ void set_work_data_big_endian( struct work *work );
double std_calc_network_diff( struct work *work ); double std_calc_network_diff( struct work *work );
void std_build_block_header( struct work* g_work, uint32_t version, void std_build_block_header( struct work* g_work, uint32_t version,
uint32_t *prevhash, uint32_t *merkle_root, uint32_t *prevhash, uint32_t *merkle_root,
uint32_t ntime, uint32_t nbits ); uint32_t ntime, uint32_t nbits );
void std_build_extraheader( struct work *work, struct stratum_ctx *sctx ); void std_build_extraheader( struct work *work, struct stratum_ctx *sctx );
@@ -266,8 +247,8 @@ int std_get_work_data_size();
// by calling the algo's register function. // by calling the algo's register function.
bool register_algo_gate( int algo, algo_gate_t *gate ); bool register_algo_gate( int algo, algo_gate_t *gate );
// Override any default gate functions that are applicable and do any other // Called by algos toverride any default gate functions that are applicable
// algo-specific initialization. // and do any other algo-specific initialization.
// The register functions for all the algos can be declared here to reduce // The register functions for all the algos can be declared here to reduce
// compiler warnings but that's just more work for devs adding new algos. // compiler warnings but that's just more work for devs adding new algos.
bool register_algo( algo_gate_t *gate ); bool register_algo( algo_gate_t *gate );
@@ -280,5 +261,7 @@ bool register_json_rpc2( algo_gate_t *gate );
// use this to call the hash function of an algo directly, ie util.c test. // use this to call the hash function of an algo directly, ie util.c test.
void exec_hash_function( int algo, void *output, const void *pdata ); void exec_hash_function( int algo, void *output, const void *pdata );
void get_algo_alias( char** algo_or_alias ); // Validate a string as a known algo and alias, updates arg to proper
// algo name if valid alias, NULL if invalid alias or algo.
void get_algo_alias( char **algo_or_alias );

View File

@@ -74,18 +74,12 @@ int scanhash_argon2( struct work* work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t argon2_get_max64 ()
{
return 0x1ffLL;
}
bool register_argon2_algo( algo_gate_t* gate ) bool register_argon2_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | AVX_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AVX_OPT | AVX2_OPT;
gate->scanhash = (void*)&scanhash_argon2; gate->scanhash = (void*)&scanhash_argon2;
gate->hash = (void*)&argon2hash; gate->hash = (void*)&argon2hash;
gate->gen_merkle_root = (void*)&SHA256_gen_merkle_root; gate->gen_merkle_root = (void*)&SHA256_gen_merkle_root;
gate->get_max64 = (void*)&argon2_get_max64;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
return true; return true;

View File

@@ -179,12 +179,9 @@ int scanhash_argon2d4096( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t get_max64_0x1ff() { return 0x1ff; }
bool register_argon2d4096_algo( algo_gate_t* gate ) bool register_argon2d4096_algo( algo_gate_t* gate )
{ {
gate->scanhash = (void*)&scanhash_argon2d4096; gate->scanhash = (void*)&scanhash_argon2d4096;
gate->get_max64 = (void*)&get_max64_0x1ff;
gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT; gate->optimizations = SSE2_OPT | AVX2_OPT | AVX512_OPT;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
return true; return true;

View File

@@ -1,18 +1,8 @@
#include "blake-gate.h" #include "blake-gate.h"
int64_t blake_get_max64 ()
{
return 0x7ffffLL;
}
bool register_blake_algo( algo_gate_t* gate ) bool register_blake_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->get_max64 = (void*)&blake_get_max64;
//#if defined (__AVX2__) && defined (FOUR_WAY)
// gate->optimizations = SSE2_OPT | AVX2_OPT;
// gate->scanhash = (void*)&scanhash_blake_8way;
// gate->hash = (void*)&blakehash_8way;
#if defined(BLAKE_4WAY) #if defined(BLAKE_4WAY)
four_way_not_tested(); four_way_not_tested();
gate->scanhash = (void*)&scanhash_blake_4way; gate->scanhash = (void*)&scanhash_blake_4way;

View File

@@ -1,13 +1,5 @@
#include "blake2b-gate.h" #include "blake2b-gate.h"
/*
// changed to get_max64_0x3fffffLL in cpuminer-multi-decred
int64_t blake2s_get_max64 ()
{
return 0x7ffffLL;
}
*/
bool register_blake2b_algo( algo_gate_t* gate ) bool register_blake2b_algo( algo_gate_t* gate )
{ {
#if defined(BLAKE2B_4WAY) #if defined(BLAKE2B_4WAY)
@@ -17,7 +9,6 @@ bool register_blake2b_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_blake2b; gate->scanhash = (void*)&scanhash_blake2b;
gate->hash = (void*)&blake2b_hash; gate->hash = (void*)&blake2b_hash;
#endif #endif
// gate->get_max64 = (void*)&blake2s_get_max64;
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
return true; return true;
}; };

View File

@@ -1,12 +1,5 @@
#include "blake2s-gate.h" #include "blake2s-gate.h"
// changed to get_max64_0x3fffffLL in cpuminer-multi-decred
int64_t blake2s_get_max64 ()
{
return 0x7ffffLL;
}
bool register_blake2s_algo( algo_gate_t* gate ) bool register_blake2s_algo( algo_gate_t* gate )
{ {
#if defined(BLAKE2S_8WAY) #if defined(BLAKE2S_8WAY)
@@ -19,7 +12,6 @@ bool register_blake2s_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_blake2s; gate->scanhash = (void*)&scanhash_blake2s;
gate->hash = (void*)&blake2s_hash; gate->hash = (void*)&blake2s_hash;
#endif #endif
gate->get_max64 = (void*)&blake2s_get_max64;
gate->optimizations = SSE2_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AVX2_OPT;
return true; return true;
}; };

View File

@@ -70,18 +70,3 @@ int scanhash_blake2s( struct work *work,
return 0; return 0;
} }
/*
// changed to get_max64_0x3fffffLL in cpuminer-multi-decred
int64_t blake2s_get_max64 ()
{
return 0x7ffffLL;
}
bool register_blake2s_algo( algo_gate_t* gate )
{
gate->scanhash = (void*)&scanhash_blake2s;
gate->hash = (void*)&blake2s_hash;
gate->get_max64 = (void*)&blake2s_get_max64;
return true;
};
*/

View File

@@ -1,13 +1,6 @@
#include "blakecoin-gate.h" #include "blakecoin-gate.h"
#include <memory.h> #include <memory.h>
// changed to get_max64_0x3fffffLL in cpuminer-multi-decred
int64_t blakecoin_get_max64 ()
{
return 0x7ffffLL;
// return 0x3fffffLL;
}
// vanilla uses default gen merkle root, otherwise identical to blakecoin // vanilla uses default gen merkle root, otherwise identical to blakecoin
bool register_vanilla_algo( algo_gate_t* gate ) bool register_vanilla_algo( algo_gate_t* gate )
{ {
@@ -23,7 +16,6 @@ bool register_vanilla_algo( algo_gate_t* gate )
gate->hash = (void*)&blakecoinhash; gate->hash = (void*)&blakecoinhash;
#endif #endif
gate->optimizations = SSE42_OPT | AVX2_OPT; gate->optimizations = SSE42_OPT | AVX2_OPT;
gate->get_max64 = (void*)&blakecoin_get_max64;
return true; return true;
} }

View File

@@ -93,33 +93,3 @@ int scanhash_blakecoin( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
/*
void blakecoin_gen_merkle_root ( char* merkle_root, struct stratum_ctx* sctx )
{
SHA256( sctx->job.coinbase, (int)sctx->job.coinbase_size, merkle_root );
}
*/
/*
// changed to get_max64_0x3fffffLL in cpuminer-multi-decred
int64_t blakecoin_get_max64 ()
{
return 0x7ffffLL;
}
// vanilla uses default gen merkle root, otherwise identical to blakecoin
bool register_vanilla_algo( algo_gate_t* gate )
{
gate->scanhash = (void*)&scanhash_blakecoin;
gate->hash = (void*)&blakecoinhash;
gate->get_max64 = (void*)&blakecoin_get_max64;
blakecoin_init( &blake_init_ctx );
return true;
}
bool register_blakecoin_algo( algo_gate_t* gate )
{
register_vanilla_algo( gate );
gate->gen_merkle_root = (void*)&SHA256_gen_merkle_root;
return true;
}
*/

View File

@@ -38,7 +38,7 @@ void decred_decode_extradata( struct work* work, uint64_t* net_blocks )
if (!have_longpoll && work->height > *net_blocks + 1) if (!have_longpoll && work->height > *net_blocks + 1)
{ {
char netinfo[64] = { 0 }; char netinfo[64] = { 0 };
if (opt_showdiff && net_diff > 0.) if ( net_diff > 0. )
{ {
if (net_diff != work->targetdiff) if (net_diff != work->targetdiff)
sprintf(netinfo, ", diff %.3f, target %.1f", net_diff, sprintf(netinfo, ", diff %.3f, target %.1f", net_diff,
@@ -154,7 +154,6 @@ bool register_decred_algo( algo_gate_t* gate )
#endif #endif
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->get_nonceptr = (void*)&decred_get_nonceptr; gate->get_nonceptr = (void*)&decred_get_nonceptr;
gate->get_max64 = (void*)&get_max64_0x3fffffLL;
gate->decode_extra_data = (void*)&decred_decode_extradata; gate->decode_extra_data = (void*)&decred_decode_extradata;
gate->build_stratum_request = (void*)&decred_be_build_stratum_request; gate->build_stratum_request = (void*)&decred_be_build_stratum_request;
gate->work_decode = (void*)&std_be_work_decode; gate->work_decode = (void*)&std_be_work_decode;

View File

@@ -143,7 +143,7 @@ void decred_decode_extradata( struct work* work, uint64_t* net_blocks )
if (!have_longpoll && work->height > *net_blocks + 1) if (!have_longpoll && work->height > *net_blocks + 1)
{ {
char netinfo[64] = { 0 }; char netinfo[64] = { 0 };
if (opt_showdiff && net_diff > 0.) if (net_diff > 0.)
{ {
if (net_diff != work->targetdiff) if (net_diff != work->targetdiff)
sprintf(netinfo, ", diff %.3f, target %.1f", net_diff, sprintf(netinfo, ", diff %.3f, target %.1f", net_diff,
@@ -269,7 +269,6 @@ bool register_decred_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_decred; gate->scanhash = (void*)&scanhash_decred;
gate->hash = (void*)&decred_hash; gate->hash = (void*)&decred_hash;
gate->get_nonceptr = (void*)&decred_get_nonceptr; gate->get_nonceptr = (void*)&decred_get_nonceptr;
gate->get_max64 = (void*)&get_max64_0x3fffffLL;
gate->decode_extra_data = (void*)&decred_decode_extradata; gate->decode_extra_data = (void*)&decred_decode_extradata;
gate->build_stratum_request = (void*)&decred_be_build_stratum_request; gate->build_stratum_request = (void*)&decred_be_build_stratum_request;
gate->work_decode = (void*)&std_be_work_decode; gate->work_decode = (void*)&std_be_work_decode;

View File

@@ -10,7 +10,6 @@ bool register_pentablake_algo( algo_gate_t* gate )
gate->hash = (void*)&pentablakehash; gate->hash = (void*)&pentablakehash;
#endif #endif
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -1,11 +1,8 @@
#include "bmw512-gate.h" #include "bmw512-gate.h"
int64_t bmw512_get_max64() { return 0x7ffffLL; }
bool register_bmw512_algo( algo_gate_t* gate ) bool register_bmw512_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->get_max64 = (void*)&bmw512_get_max64;
opt_target_factor = 256.0; opt_target_factor = 256.0;
#if defined (BMW512_4WAY) #if defined (BMW512_4WAY)
gate->scanhash = (void*)&scanhash_bmw512_4way; gate->scanhash = (void*)&scanhash_bmw512_4way;

View File

@@ -363,7 +363,6 @@ bool register_cryptolight_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_cryptolight; gate->scanhash = (void*)&scanhash_cryptolight;
gate->hash = (void*)&cryptolight_hash; gate->hash = (void*)&cryptolight_hash;
gate->hash_suw = (void*)&cryptolight_hash; gate->hash_suw = (void*)&cryptolight_hash;
gate->get_max64 = (void*)&get_max64_0x40LL;
return true; return true;
}; };

View File

@@ -111,7 +111,6 @@ bool register_cryptonight_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_cryptonight; gate->scanhash = (void*)&scanhash_cryptonight;
gate->hash = (void*)&cryptonight_hash; gate->hash = (void*)&cryptonight_hash;
gate->hash_suw = (void*)&cryptonight_hash_suw; gate->hash_suw = (void*)&cryptonight_hash_suw;
gate->get_max64 = (void*)&get_max64_0x40LL;
return true; return true;
}; };
@@ -123,7 +122,6 @@ bool register_cryptonightv7_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_cryptonight; gate->scanhash = (void*)&scanhash_cryptonight;
gate->hash = (void*)&cryptonight_hash; gate->hash = (void*)&cryptonight_hash;
gate->hash_suw = (void*)&cryptonight_hash_suw; gate->hash_suw = (void*)&cryptonight_hash_suw;
gate->get_max64 = (void*)&get_max64_0x40LL;
return true; return true;
}; };

View File

@@ -100,7 +100,6 @@ bool register_dmd_gr_algo( algo_gate_t* gate )
gate->optimizations = SSE2_OPT | AES_OPT; gate->optimizations = SSE2_OPT | AES_OPT;
gate->scanhash = (void*)&scanhash_groestl; gate->scanhash = (void*)&scanhash_groestl;
gate->hash = (void*)&groestlhash; gate->hash = (void*)&groestlhash;
gate->get_max64 = (void*)&get_max64_0x3ffff;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -88,15 +88,3 @@ int scanhash_myriad( struct work *work, uint32_t max_nonce,
*hashes_done = pdata[19] - first_nonce + 1; *hashes_done = pdata[19] - first_nonce + 1;
return 0; return 0;
} }
/*
bool register_myriad_algo( algo_gate_t* gate )
{
gate->optimizations = SSE2_OPT | AES_OPT;
init_myrgr_ctx();
gate->scanhash = (void*)&scanhash_myriad;
gate->hash = (void*)&myriadhash;
// gate->hash_alt = (void*)&myriadhash;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true;
};
*/

View File

@@ -12,7 +12,6 @@ bool register_myriad_algo( algo_gate_t* gate )
gate->hash = (void*)&myriad_hash; gate->hash = (void*)&myriad_hash;
#endif #endif
gate->optimizations = AES_OPT | AVX2_OPT; gate->optimizations = AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -1,12 +1,10 @@
#include "keccak-gate.h" #include "keccak-gate.h"
int64_t keccak_get_max64() { return 0x7ffffLL; }
bool register_keccak_algo( algo_gate_t* gate ) bool register_keccak_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->gen_merkle_root = (void*)&SHA256_gen_merkle_root; gate->gen_merkle_root = (void*)&SHA256_gen_merkle_root;
gate->get_max64 = (void*)&keccak_get_max64;
opt_target_factor = 128.0; opt_target_factor = 128.0;
#if defined (KECCAK_4WAY) #if defined (KECCAK_4WAY)
gate->scanhash = (void*)&scanhash_keccak_4way; gate->scanhash = (void*)&scanhash_keccak_4way;
@@ -22,7 +20,6 @@ bool register_keccakc_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
gate->gen_merkle_root = (void*)&sha256d_gen_merkle_root; gate->gen_merkle_root = (void*)&sha256d_gen_merkle_root;
gate->get_max64 = (void*)&keccak_get_max64;
opt_target_factor = 256.0; opt_target_factor = 256.0;
#if defined (KECCAK_4WAY) #if defined (KECCAK_4WAY)
gate->scanhash = (void*)&scanhash_keccak_4way; gate->scanhash = (void*)&scanhash_keccak_4way;

View File

@@ -127,7 +127,6 @@ bool register_lyra2z_algo( algo_gate_t* gate )
gate->hash = (void*)&lyra2z_hash; gate->hash = (void*)&lyra2z_hash;
#endif #endif
gate->optimizations = SSE42_OPT | AVX2_OPT; gate->optimizations = SSE42_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };
@@ -147,15 +146,12 @@ bool register_lyra2h_algo( algo_gate_t* gate )
gate->hash = (void*)&lyra2h_hash; gate->hash = (void*)&lyra2h_hash;
#endif #endif
gate->optimizations = SSE42_OPT | AVX2_OPT; gate->optimizations = SSE42_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };
///////////////////////////////// /////////////////////////////////
int64_t allium_get_max64_0xFFFFLL() { return 0xFFFFLL; }
bool register_allium_algo( algo_gate_t* gate ) bool register_allium_algo( algo_gate_t* gate )
{ {
#if defined (ALLIUM_4WAY) #if defined (ALLIUM_4WAY)
@@ -168,7 +164,6 @@ bool register_allium_algo( algo_gate_t* gate )
gate->hash = (void*)&allium_hash; gate->hash = (void*)&allium_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | SSE42_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | SSE42_OPT | AVX2_OPT;
gate->get_max64 = (void*)&allium_get_max64_0xFFFFLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };
@@ -214,7 +209,6 @@ bool register_phi2_algo( algo_gate_t* gate )
gate->get_work_data_size = (void*)&phi2_get_work_data_size; gate->get_work_data_size = (void*)&phi2_get_work_data_size;
gate->decode_extra_data = (void*)&phi2_decode_extra_data; gate->decode_extra_data = (void*)&phi2_decode_extra_data;
gate->build_extraheader = (void*)&phi2_build_extraheader; gate->build_extraheader = (void*)&phi2_build_extraheader;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
#if defined(PHI2_4WAY) #if defined(PHI2_4WAY)
gate->scanhash = (void*)&scanhash_phi2_4way; gate->scanhash = (void*)&scanhash_phi2_4way;

View File

@@ -113,18 +113,12 @@ int scanhash_lyra2re( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t lyra2re_get_max64 ()
{
return 0xffffLL;
}
bool register_lyra2re_algo( algo_gate_t* gate ) bool register_lyra2re_algo( algo_gate_t* gate )
{ {
init_lyra2re_ctx(); init_lyra2re_ctx();
gate->optimizations = SSE2_OPT | AES_OPT | SSE42_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | SSE42_OPT | AVX2_OPT;
gate->scanhash = (void*)&scanhash_lyra2re; gate->scanhash = (void*)&scanhash_lyra2re;
gate->hash = (void*)&lyra2re_hash; gate->hash = (void*)&lyra2re_hash;
gate->get_max64 = (void*)&lyra2re_get_max64;
opt_target_factor = 128.0; opt_target_factor = 128.0;
return true; return true;
}; };

View File

@@ -70,7 +70,6 @@ bool register_lyra2z330_algo( algo_gate_t* gate )
gate->miner_thread_init = (void*)&lyra2z330_thread_init; gate->miner_thread_init = (void*)&lyra2z330_thread_init;
gate->scanhash = (void*)&scanhash_lyra2z330; gate->scanhash = (void*)&scanhash_lyra2z330;
gate->hash = (void*)&lyra2z330_hash; gate->hash = (void*)&lyra2z330_hash;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -296,8 +296,6 @@ int scanhash_m7m_hash( struct work* work, uint64_t max_nonce,
pdata[19] = n; pdata[19] = n;
// can this be skipped after finding a share? Seems to work ok.
//out:
mpf_set_prec_raw(magifpi, prec0); mpf_set_prec_raw(magifpi, prec0);
mpf_set_prec_raw(magifpi0, prec0); mpf_set_prec_raw(magifpi0, prec0);
mpf_set_prec_raw(mptmp, prec0); mpf_set_prec_raw(mptmp, prec0);
@@ -323,7 +321,6 @@ bool register_m7m_algo( algo_gate_t *gate )
gate->build_stratum_request = (void*)&std_be_build_stratum_request; gate->build_stratum_request = (void*)&std_be_build_stratum_request;
gate->work_decode = (void*)&std_be_work_decode; gate->work_decode = (void*)&std_be_work_decode;
gate->submit_getwork_result = (void*)&std_be_submit_getwork_result; gate->submit_getwork_result = (void*)&std_be_submit_getwork_result;
gate->get_max64 = (void*)&get_max64_0x1ffff;
gate->set_work_data_endian = (void*)&set_work_data_big_endian; gate->set_work_data_endian = (void*)&set_work_data_big_endian;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
return true; return true;

View File

@@ -208,12 +208,6 @@ void zr5_get_new_work( struct work* work, struct work* g_work, int thr_id,
++(*nonceptr); ++(*nonceptr);
} }
int64_t zr5_get_max64 ()
{
// return 0x1ffffLL;
return 0x1fffffLL;
}
void zr5_display_pok( struct work* work ) void zr5_display_pok( struct work* work )
{ {
if ( work->data[0] & 0x00008000 ) if ( work->data[0] & 0x00008000 )
@@ -229,7 +223,6 @@ bool register_zr5_algo( algo_gate_t* gate )
gate->get_new_work = (void*)&zr5_get_new_work; gate->get_new_work = (void*)&zr5_get_new_work;
gate->scanhash = (void*)&scanhash_zr5; gate->scanhash = (void*)&scanhash_zr5;
gate->hash = (void*)&zr5hash; gate->hash = (void*)&zr5hash;
gate->get_max64 = (void*)&zr5_get_max64;
gate->decode_extra_data = (void*)&zr5_display_pok; gate->decode_extra_data = (void*)&zr5_display_pok;
gate->build_stratum_request = (void*)&std_be_build_stratum_request; gate->build_stratum_request = (void*)&std_be_build_stratum_request;
gate->work_decode = (void*)&std_be_work_decode; gate->work_decode = (void*)&std_be_work_decode;

View File

@@ -94,8 +94,6 @@ void lbry_build_extraheader( struct work* g_work, struct stratum_ctx* sctx )
g_work->data[28] = 0x80000000; g_work->data[28] = 0x80000000;
} }
int64_t lbry_get_max64() { return 0x1ffffLL; }
int lbry_get_work_data_size() { return LBRY_WORK_DATA_SIZE; } int lbry_get_work_data_size() { return LBRY_WORK_DATA_SIZE; }
bool register_lbry_algo( algo_gate_t* gate ) bool register_lbry_algo( algo_gate_t* gate )
@@ -112,7 +110,6 @@ bool register_lbry_algo( algo_gate_t* gate )
gate->hash = (void*)&lbry_hash; gate->hash = (void*)&lbry_hash;
#endif #endif
gate->calc_network_diff = (void*)&lbry_calc_network_diff; gate->calc_network_diff = (void*)&lbry_calc_network_diff;
gate->get_max64 = (void*)&lbry_get_max64;
gate->build_stratum_request = (void*)&lbry_le_build_stratum_request; gate->build_stratum_request = (void*)&lbry_le_build_stratum_request;
// gate->build_block_header = (void*)&build_block_header; // gate->build_block_header = (void*)&build_block_header;
gate->build_extraheader = (void*)&lbry_build_extraheader; gate->build_extraheader = (void*)&lbry_build_extraheader;

View File

@@ -1070,17 +1070,6 @@ int scanhash_neoscrypt( struct work *work,
return 0; return 0;
} }
int64_t get_neoscrypt_max64() { return 0x3ffff; }
void neoscrypt_wait_for_diff( struct stratum_ctx *stratum )
{
while ( !stratum->job.diff )
{
// applog(LOG_DEBUG, "Waiting for Stratum to set the job difficulty");
sleep(1);
}
}
int neoscrypt_get_work_data_size () { return 80; } int neoscrypt_get_work_data_size () { return 80; }
bool register_neoscrypt_algo( algo_gate_t* gate ) bool register_neoscrypt_algo( algo_gate_t* gate )
@@ -1088,8 +1077,6 @@ bool register_neoscrypt_algo( algo_gate_t* gate )
gate->optimizations = SSE2_OPT; gate->optimizations = SSE2_OPT;
gate->scanhash = (void*)&scanhash_neoscrypt; gate->scanhash = (void*)&scanhash_neoscrypt;
gate->hash = (void*)&neoscrypt; gate->hash = (void*)&neoscrypt;
gate->get_max64 = (void*)&get_neoscrypt_max64;
gate->wait_for_diff = (void*)&neoscrypt_wait_for_diff;
gate->build_stratum_request = (void*)&std_be_build_stratum_request; gate->build_stratum_request = (void*)&std_be_build_stratum_request;
gate->work_decode = (void*)&std_be_work_decode; gate->work_decode = (void*)&std_be_work_decode;
gate->submit_getwork_result = (void*)&std_be_submit_getwork_result; gate->submit_getwork_result = (void*)&std_be_submit_getwork_result;

View File

@@ -483,11 +483,6 @@ int scanhash_pluck( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t pluck_get_max64 ()
{
return 0x1ffLL;
}
bool pluck_miner_thread_init( int thr_id ) bool pluck_miner_thread_init( int thr_id )
{ {
scratchbuf = malloc( 128 * 1024 ); scratchbuf = malloc( 128 * 1024 );
@@ -503,7 +498,6 @@ bool register_pluck_algo( algo_gate_t* gate )
gate->miner_thread_init = (void*)&pluck_miner_thread_init; gate->miner_thread_init = (void*)&pluck_miner_thread_init;
gate->scanhash = (void*)&scanhash_pluck; gate->scanhash = (void*)&scanhash_pluck;
gate->hash = (void*)&pluck_hash; gate->hash = (void*)&pluck_hash;
gate->get_max64 = (void*)&pluck_get_max64;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
return true; return true;
}; };

View File

@@ -766,8 +766,6 @@ extern int scanhash_scrypt( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t scrypt_get_max64() { return 0xfff; }
bool scrypt_miner_thread_init( int thr_id ) bool scrypt_miner_thread_init( int thr_id )
{ {
scratchbuf = scrypt_buffer_alloc( scratchbuf_size ); scratchbuf = scrypt_buffer_alloc( scratchbuf_size );
@@ -783,10 +781,8 @@ bool register_scrypt_algo( algo_gate_t* gate )
gate->miner_thread_init =(void*)&scrypt_miner_thread_init; gate->miner_thread_init =(void*)&scrypt_miner_thread_init;
gate->scanhash = (void*)&scanhash_scrypt; gate->scanhash = (void*)&scanhash_scrypt;
// gate->hash = (void*)&scrypt_1024_1_1_256_24way; // gate->hash = (void*)&scrypt_1024_1_1_256_24way;
gate->get_max64 = (void*)&scrypt_get_max64;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
if ( !opt_param_n ) if ( !opt_param_n )
{ {
opt_param_n = 1024; opt_param_n = 1024;

View File

@@ -240,7 +240,6 @@ bool register_scryptjane_algo( algo_gate_t* gate )
{ {
gate->scanhash = (void*)&scanhash_scryptjane; gate->scanhash = (void*)&scanhash_scryptjane;
gate->hash = (void*)&scryptjanehash; gate->hash = (void*)&scryptjanehash;
gate->get_max64 = (void*)&get_max64_0x40LL;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
// figure out if arg in N or Nfactor // figure out if arg in N or Nfactor

View File

@@ -15,7 +15,6 @@ bool register_sha256t_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_sha256t; gate->scanhash = (void*)&scanhash_sha256t;
gate->hash = (void*)&sha256t_hash; gate->hash = (void*)&sha256t_hash;
#endif #endif
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
} }
@@ -34,7 +33,6 @@ bool register_sha256q_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_sha256q; gate->scanhash = (void*)&scanhash_sha256q;
gate->hash = (void*)&sha256q_hash; gate->hash = (void*)&sha256q_hash;
#endif #endif
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
} }

View File

@@ -2,8 +2,6 @@
#include "sph_skein.h" #include "sph_skein.h"
#include "skein-hash-4way.h" #include "skein-hash-4way.h"
int64_t skein_get_max64() { return 0x7ffffLL; }
bool register_skein_algo( algo_gate_t* gate ) bool register_skein_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT | SHA_OPT; gate->optimizations = AVX2_OPT | SHA_OPT;
@@ -14,7 +12,6 @@ bool register_skein_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_skein; gate->scanhash = (void*)&scanhash_skein;
gate->hash = (void*)&skeinhash; gate->hash = (void*)&skeinhash;
#endif #endif
gate->get_max64 = (void*)&skein_get_max64;
return true; return true;
}; };

View File

@@ -2,11 +2,6 @@
#include <stdint.h> #include <stdint.h>
#include "sph_skein.h" #include "sph_skein.h"
int64_t skein2_get_max64 ()
{
return 0x7ffffLL;
}
bool register_skein2_algo( algo_gate_t* gate ) bool register_skein2_algo( algo_gate_t* gate )
{ {
gate->optimizations = AVX2_OPT; gate->optimizations = AVX2_OPT;
@@ -17,7 +12,6 @@ bool register_skein2_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_skein2; gate->scanhash = (void*)&scanhash_skein2;
gate->hash = (void*)&skein2hash; gate->hash = (void*)&skein2hash;
#endif #endif
gate->get_max64 = (void*)&skein2_get_max64;
return true; return true;
}; };

View File

@@ -181,7 +181,7 @@ void sm3_4way_compress( __m128i *digest, __m128i *block )
for( j =0; j < 16; j++ ) for( j =0; j < 16; j++ )
{ {
SS1 = mm128_rol_32( _mm_add_epi32( _mm_add_epi32( mm128_rol_32(A,12), E ), SS1 = mm128_rol_32( _mm_add_epi32( _mm_add_epi32( mm128_rol_32(A,12), E ),
mm128_rol_32( T, j ) ), 7 ); mm128_rol_var_32( T, j ) ), 7 );
SS2 = _mm_xor_si128( SS1, mm128_rol_32( A, 12 ) ); SS2 = _mm_xor_si128( SS1, mm128_rol_32( A, 12 ) );
TT1 = _mm_add_epi32( _mm_add_epi32( _mm_add_epi32( FF0( A, B, C ), D ), TT1 = _mm_add_epi32( _mm_add_epi32( _mm_add_epi32( FF0( A, B, C ), D ),
SS2 ), W1[j] ); SS2 ), W1[j] );
@@ -200,9 +200,8 @@ void sm3_4way_compress( __m128i *digest, __m128i *block )
T = _mm_set1_epi32( 0x7A879D8AUL ); T = _mm_set1_epi32( 0x7A879D8AUL );
for( j =16; j < 64; j++ ) for( j =16; j < 64; j++ )
{ {
// AVX512 _mm_rol_epi32 doesn't like using a variable for the second arg.
SS1 = mm128_rol_32( _mm_add_epi32( _mm_add_epi32( mm128_rol_32(A,12), E ), SS1 = mm128_rol_32( _mm_add_epi32( _mm_add_epi32( mm128_rol_32(A,12), E ),
mm128_rol_32( T, j&31 ) ), 7 ); mm128_rol_var_32( T, j&31 ) ), 7 );
SS2 = _mm_xor_si128( SS1, mm128_rol_32( A, 12 ) ); SS2 = _mm_xor_si128( SS1, mm128_rol_32( A, 12 ) );
TT1 = _mm_add_epi32( _mm_add_epi32( _mm_add_epi32( FF1( A, B, C ), D ), TT1 = _mm_add_epi32( _mm_add_epi32( _mm_add_epi32( FF1( A, B, C ), D ),
SS2 ), W1[j] ); SS2 ), W1[j] );

View File

@@ -12,7 +12,6 @@ bool register_c11_algo( algo_gate_t* gate )
gate->hash = (void*)&c11_hash; gate->hash = (void*)&c11_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -125,7 +125,6 @@ bool register_fresh_algo( algo_gate_t* gate )
algo_not_tested(); algo_not_tested();
gate->scanhash = (void*)&scanhash_fresh; gate->scanhash = (void*)&scanhash_fresh;
gate->hash = (void*)&freshhash; gate->hash = (void*)&freshhash;
gate->get_max64 = (void*)&get_max64_0x3ffff;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_timetravel_algo( algo_gate_t* gate )
gate->hash = (void*)&timetravel_hash; gate->hash = (void*)&timetravel_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_timetravel10_algo( algo_gate_t* gate )
gate->hash = (void*)&timetravel10_hash; gate->hash = (void*)&timetravel10_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -3,7 +3,6 @@
bool register_tribus_algo( algo_gate_t* gate ) bool register_tribus_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x1ffff;
#if defined (TRIBUS_4WAY) #if defined (TRIBUS_4WAY)
// init_tribus_4way_ctx(); // init_tribus_4way_ctx();
gate->scanhash = (void*)&scanhash_tribus_4way; gate->scanhash = (void*)&scanhash_tribus_4way;

View File

@@ -12,7 +12,6 @@ bool register_x11_algo( algo_gate_t* gate )
gate->hash = (void*)&x11_hash; gate->hash = (void*)&x11_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_x11gost_algo( algo_gate_t* gate )
gate->hash = (void*)&x11gost_hash; gate->hash = (void*)&x11gost_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_x12_algo( algo_gate_t* gate )
gate->hash = (void*)&x12hash; gate->hash = (void*)&x12hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_phi1612_algo( algo_gate_t* gate )
gate->hash = (void*)&phi1612_hash; gate->hash = (void*)&phi1612_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_x13_algo( algo_gate_t* gate )
gate->hash = (void*)&x13hash; gate->hash = (void*)&x13hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_x13sm3_algo( algo_gate_t* gate )
gate->hash = (void*)&x13sm3_hash; gate->hash = (void*)&x13sm3_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };
@@ -28,7 +27,6 @@ bool register_x13bcd_algo( algo_gate_t* gate )
gate->hash = (void*)&x13bcd_hash; gate->hash = (void*)&x13bcd_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -83,6 +83,5 @@ bool register_axiom_algo( algo_gate_t* gate )
{ {
gate->scanhash = (void*)&scanhash_axiom; gate->scanhash = (void*)&scanhash_axiom;
gate->hash = (void*)&axiomhash; gate->hash = (void*)&axiomhash;
gate->get_max64 = (void*)&get_max64_0x40LL;
return true; return true;
} }

View File

@@ -11,7 +11,6 @@ bool register_polytimos_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_polytimos; gate->scanhash = (void*)&scanhash_polytimos;
gate->hash = (void*)&polytimos_hash; gate->hash = (void*)&polytimos_hash;
#endif #endif
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_veltor_algo( algo_gate_t* gate )
gate->hash = (void*)&veltor_hash; gate->hash = (void*)&veltor_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_x14_algo( algo_gate_t* gate )
gate->hash = (void*)&x14hash; gate->hash = (void*)&x14hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0x3ffff;
return true; return true;
}; };

View File

@@ -11,7 +11,6 @@ bool register_sonoa_algo( algo_gate_t* gate )
gate->scanhash = (void*)&scanhash_sonoa; gate->scanhash = (void*)&scanhash_sonoa;
gate->hash = (void*)&sonoa_hash; gate->hash = (void*)&sonoa_hash;
#endif #endif
gate->get_max64 = (void*)&get_max64_0x1ffff;
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
return true; return true;
}; };

View File

@@ -12,7 +12,6 @@ bool register_xevan_algo( algo_gate_t* gate )
gate->hash = (void*)&xevan_hash; gate->hash = (void*)&xevan_hash;
#endif #endif
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT; gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT;
gate->get_max64 = (void*)&get_max64_0xffffLL;
opt_target_factor = 256.0; opt_target_factor = 256.0;
return true; return true;
}; };

View File

@@ -416,16 +416,6 @@ int scanhash_yescrypt( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t yescrypt_get_max64()
{
return 0x1ffLL;
}
int64_t yescryptr16_get_max64()
{
return 0xfffLL;
}
void yescrypt_gate_base(algo_gate_t *gate ) void yescrypt_gate_base(algo_gate_t *gate )
{ {
gate->optimizations = SSE2_OPT | SHA_OPT; gate->optimizations = SSE2_OPT | SHA_OPT;
@@ -437,7 +427,6 @@ void yescrypt_gate_base(algo_gate_t *gate )
bool register_yescrypt_algo( algo_gate_t* gate ) bool register_yescrypt_algo( algo_gate_t* gate )
{ {
yescrypt_gate_base( gate ); yescrypt_gate_base( gate );
gate->get_max64 = (void*)&yescrypt_get_max64;
if ( opt_param_n ) YESCRYPT_N = opt_param_n; if ( opt_param_n ) YESCRYPT_N = opt_param_n;
else YESCRYPT_N = 2048; else YESCRYPT_N = 2048;
@@ -469,7 +458,6 @@ bool register_yescrypt_algo( algo_gate_t* gate )
bool register_yescryptr8_algo( algo_gate_t* gate ) bool register_yescryptr8_algo( algo_gate_t* gate )
{ {
yescrypt_gate_base( gate ); yescrypt_gate_base( gate );
gate->get_max64 = (void*)&yescrypt_get_max64;
yescrypt_client_key = "Client Key"; yescrypt_client_key = "Client Key";
yescrypt_client_key_len = 10; yescrypt_client_key_len = 10;
YESCRYPT_N = 2048; YESCRYPT_N = 2048;
@@ -481,7 +469,6 @@ bool register_yescryptr8_algo( algo_gate_t* gate )
bool register_yescryptr16_algo( algo_gate_t* gate ) bool register_yescryptr16_algo( algo_gate_t* gate )
{ {
yescrypt_gate_base( gate ); yescrypt_gate_base( gate );
gate->get_max64 = (void*)&yescryptr16_get_max64;
yescrypt_client_key = "Client Key"; yescrypt_client_key = "Client Key";
yescrypt_client_key_len = 10; yescrypt_client_key_len = 10;
YESCRYPT_N = 4096; YESCRYPT_N = 4096;
@@ -493,7 +480,6 @@ bool register_yescryptr16_algo( algo_gate_t* gate )
bool register_yescryptr32_algo( algo_gate_t* gate ) bool register_yescryptr32_algo( algo_gate_t* gate )
{ {
yescrypt_gate_base( gate ); yescrypt_gate_base( gate );
gate->get_max64 = (void*)&yescryptr16_get_max64;
yescrypt_client_key = "WaviBanana"; yescrypt_client_key = "WaviBanana";
yescrypt_client_key_len = 10; yescrypt_client_key_len = 10;
YESCRYPT_N = 4096; YESCRYPT_N = 4096;

View File

@@ -109,11 +109,6 @@ int scanhash_yespower_b2b( struct work *work, uint32_t max_nonce,
return 0; return 0;
} }
int64_t yespower_get_max64()
{
return 0xfffLL;
}
bool register_yespower_algo( algo_gate_t* gate ) bool register_yespower_algo( algo_gate_t* gate )
{ {
yespower_params.version = YESPOWER_1_0; yespower_params.version = YESPOWER_1_0;
@@ -141,7 +136,6 @@ bool register_yespower_algo( algo_gate_t* gate )
applog( LOG_NOTICE,"Key= \"%s\"\n", yespower_params.pers ); applog( LOG_NOTICE,"Key= \"%s\"\n", yespower_params.pers );
gate->optimizations = SSE2_OPT; gate->optimizations = SSE2_OPT;
gate->get_max64 = (void*)&yespower_get_max64;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->hash = (void*)&yespower_hash; gate->hash = (void*)&yespower_hash;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
@@ -156,7 +150,6 @@ bool register_yespowerr16_algo( algo_gate_t* gate )
yespower_params.pers = NULL; yespower_params.pers = NULL;
yespower_params.perslen = 0; yespower_params.perslen = 0;
gate->optimizations = SSE2_OPT; gate->optimizations = SSE2_OPT;
gate->get_max64 = (void*)&yespower_get_max64;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->hash = (void*)&yespower_hash; gate->hash = (void*)&yespower_hash;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
@@ -164,21 +157,10 @@ bool register_yespowerr16_algo( algo_gate_t* gate )
}; };
int64_t yescrypt_05_get_max64()
{
return 0x1ffLL;
}
int64_t yescryptr16_05_get_max64()
{
return 0xfffLL;
}
bool register_yescrypt_05_algo( algo_gate_t* gate ) bool register_yescrypt_05_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | SHA_OPT; gate->optimizations = SSE2_OPT | SHA_OPT;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->get_max64 = (void*)&yescrypt_05_get_max64;
yespower_params.version = YESPOWER_0_5; yespower_params.version = YESPOWER_0_5;
yespower_params.N = 2048; yespower_params.N = 2048;
yespower_params.r = 8; yespower_params.r = 8;
@@ -192,7 +174,6 @@ bool register_yescryptr8_05_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | SHA_OPT; gate->optimizations = SSE2_OPT | SHA_OPT;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->get_max64 = (void*)&yescrypt_05_get_max64;
yespower_params.version = YESPOWER_0_5; yespower_params.version = YESPOWER_0_5;
yespower_params.N = 2048; yespower_params.N = 2048;
yespower_params.r = 8; yespower_params.r = 8;
@@ -206,7 +187,6 @@ bool register_yescryptr16_05_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | SHA_OPT; gate->optimizations = SSE2_OPT | SHA_OPT;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->get_max64 = (void*)&yescryptr16_05_get_max64;
yespower_params.version = YESPOWER_0_5; yespower_params.version = YESPOWER_0_5;
yespower_params.N = 4096; yespower_params.N = 4096;
yespower_params.r = 16; yespower_params.r = 16;
@@ -220,7 +200,6 @@ bool register_yescryptr32_05_algo( algo_gate_t* gate )
{ {
gate->optimizations = SSE2_OPT | SHA_OPT; gate->optimizations = SSE2_OPT | SHA_OPT;
gate->scanhash = (void*)&scanhash_yespower; gate->scanhash = (void*)&scanhash_yespower;
gate->get_max64 = (void*)&yescryptr16_05_get_max64;
yespower_params.version = YESPOWER_0_5; yespower_params.version = YESPOWER_0_5;
yespower_params.N = 4096; yespower_params.N = 4096;
yespower_params.r = 32; yespower_params.r = 32;
@@ -245,7 +224,6 @@ bool register_power2b_algo( algo_gate_t* gate )
applog( LOG_NOTICE,"Key length= %d\n", yespower_params.perslen ); applog( LOG_NOTICE,"Key length= %d\n", yespower_params.perslen );
gate->optimizations = SSE2_OPT; gate->optimizations = SSE2_OPT;
gate->get_max64 = (void*)&yespower_get_max64;
gate->scanhash = (void*)&scanhash_yespower_b2b; gate->scanhash = (void*)&scanhash_yespower_b2b;
gate->hash = (void*)&yespower_b2b_hash; gate->hash = (void*)&yespower_b2b_hash;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;
@@ -286,7 +264,6 @@ bool register_yespower_b2b_algo( algo_gate_t* gate )
} }
gate->optimizations = SSE2_OPT; gate->optimizations = SSE2_OPT;
gate->get_max64 = (void*)&yespower_get_max64;
gate->scanhash = (void*)&scanhash_yespower_b2b; gate->scanhash = (void*)&scanhash_yespower_b2b;
gate->hash = (void*)&yespower_b2b_hash; gate->hash = (void*)&yespower_b2b_hash;
opt_target_factor = 65536.0; opt_target_factor = 65536.0;

4
api.c
View File

@@ -32,7 +32,7 @@
#include <sys/types.h> #include <sys/types.h>
#include "miner.h" #include "miner.h"
#include "sysinfos.c"
#ifndef WIN32 #ifndef WIN32
# include <errno.h> # include <errno.h>
# include <sys/socket.h> # include <sys/socket.h>
@@ -105,7 +105,7 @@ extern double global_hashrate;
#define USE_MONITORING #define USE_MONITORING
extern float cpu_temp(int); extern float cpu_temp(int);
extern uint32_t cpu_clock(int); extern uint32_t cpu_clock(int);
extern int cpu_fanpercent(void); //extern int cpu_fanpercent(void);
/***************************************************************/ /***************************************************************/

20
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for cpuminer-opt 3.9.9. # Generated by GNU Autoconf 2.69 for cpuminer-opt 3.9.9.1.
# #
# #
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='cpuminer-opt' PACKAGE_NAME='cpuminer-opt'
PACKAGE_TARNAME='cpuminer-opt' PACKAGE_TARNAME='cpuminer-opt'
PACKAGE_VERSION='3.9.9' PACKAGE_VERSION='3.9.9.1'
PACKAGE_STRING='cpuminer-opt 3.9.9' PACKAGE_STRING='cpuminer-opt 3.9.9.1'
PACKAGE_BUGREPORT='' PACKAGE_BUGREPORT=''
PACKAGE_URL='' PACKAGE_URL=''
@@ -1332,7 +1332,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures cpuminer-opt 3.9.9 to adapt to many kinds of systems. \`configure' configures cpuminer-opt 3.9.9.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1404,7 +1404,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of cpuminer-opt 3.9.9:";; short | recursive ) echo "Configuration of cpuminer-opt 3.9.9.1:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1509,7 +1509,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
cpuminer-opt configure 3.9.9 cpuminer-opt configure 3.9.9.1
generated by GNU Autoconf 2.69 generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc. Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2012,7 +2012,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by cpuminer-opt $as_me 3.9.9, which was It was created by cpuminer-opt $as_me 3.9.9.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@ $ $0 $@
@@ -2993,7 +2993,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='cpuminer-opt' PACKAGE='cpuminer-opt'
VERSION='3.9.9' VERSION='3.9.9.1'
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
@@ -6690,7 +6690,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by cpuminer-opt $as_me 3.9.9, which was This file was extended by cpuminer-opt $as_me 3.9.9.1, which was
generated by GNU Autoconf 2.69. Invocation command line was generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -6756,7 +6756,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\ ac_cs_version="\\
cpuminer-opt config.status 3.9.9 cpuminer-opt config.status 3.9.9.1
configured by $0, generated by GNU Autoconf 2.69, configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT([cpuminer-opt], [3.9.9]) AC_INIT([cpuminer-opt], [3.9.9.1])
AC_PREREQ([2.59c]) AC_PREREQ([2.59c])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM

File diff suppressed because it is too large Load Diff

View File

@@ -352,6 +352,7 @@ bool submit_lane_solution( struct work *work, void *hash,
void get_currentalgo( char* buf, int sz ); void get_currentalgo( char* buf, int sz );
/*
bool has_sha(); bool has_sha();
bool has_aes_ni(); bool has_aes_ni();
bool has_avx1(); bool has_avx1();
@@ -368,6 +369,7 @@ void cpu_getmodelid(char *outbuf, size_t maxsz);
void cpu_brand_string( char* s ); void cpu_brand_string( char* s );
float cpu_temp( int core ); float cpu_temp( int core );
*/
struct work { struct work {
uint32_t data[48] __attribute__ ((aligned (64))); uint32_t data[48] __attribute__ ((aligned (64)));
@@ -724,7 +726,6 @@ extern bool opt_debug;
extern bool opt_debug_diff; extern bool opt_debug_diff;
extern bool opt_benchmark; extern bool opt_benchmark;
extern bool opt_protocol; extern bool opt_protocol;
extern bool opt_showdiff;
extern bool opt_extranonce; extern bool opt_extranonce;
extern bool opt_quiet; extern bool opt_quiet;
extern bool opt_redirect; extern bool opt_redirect;
@@ -867,7 +868,7 @@ Options:\n\
x16rv2 Ravencoin (RVN)\n\ x16rv2 Ravencoin (RVN)\n\
x16rt Gincoin (GIN)\n\ x16rt Gincoin (GIN)\n\
x16rt-veil Veil (VEIL)\n\ x16rt-veil Veil (VEIL)\n\
x16s Pigeoncoin (PGN)\n\ x16s\n\
x17\n\ x17\n\
x21s\n\ x21s\n\
xevan Bitsend (BSD)\n\ xevan Bitsend (BSD)\n\
@@ -901,7 +902,6 @@ Options:\n\
-f, --diff-factor Divide req. difficulty by this factor (std is 1.0)\n\ -f, --diff-factor Divide req. difficulty by this factor (std is 1.0)\n\
-m, --diff-multiplier Multiply difficulty by this factor (std is 1.0)\n\ -m, --diff-multiplier Multiply difficulty by this factor (std is 1.0)\n\
--hash-meter Display thread hash rates\n\ --hash-meter Display thread hash rates\n\
--hide-diff Do not display changes in difficulty\n\
--coinbase-addr=ADDR payout address for solo mining\n\ --coinbase-addr=ADDR payout address for solo mining\n\
--coinbase-sig=TEXT data to insert in the coinbase when possible\n\ --coinbase-sig=TEXT data to insert in the coinbase when possible\n\
--no-longpoll disable long polling support\n\ --no-longpoll disable long polling support\n\
@@ -965,7 +965,6 @@ static struct option const options[] = {
{ "diff", 1, NULL, 'f' }, // deprecated (alias) { "diff", 1, NULL, 'f' }, // deprecated (alias)
{ "diff-multiplier", 1, NULL, 'm' }, { "diff-multiplier", 1, NULL, 'm' },
{ "hash-meter", 0, NULL, 1014 }, { "hash-meter", 0, NULL, 1014 },
{ "hide-diff", 0, NULL, 1013 },
{ "help", 0, NULL, 'h' }, { "help", 0, NULL, 'h' },
{ "key", 1, NULL, 'K' }, { "key", 1, NULL, 'K' },
{ "no-gbt", 0, NULL, 1011 }, { "no-gbt", 0, NULL, 1011 },

View File

@@ -298,30 +298,38 @@ static inline void memcpy_128( __m128i *dst, const __m128i *src, const int n )
// 64 and 32 bit elements. // 64 and 32 bit elements.
// compiler doesn't like when a variable is used for the last arg of // compiler doesn't like when a variable is used for the last arg of
// _mm_rol_epi32, must be "8 bit immediate". // _mm_rol_epi32, must be "8 bit immediate". Therefore use rol_var where
// necessary.
// sm3-hash-4way.c fails to compile. // sm3-hash-4way.c fails to compile.
#define mm128_ror_var_64( v, c ) \
_mm_or_si128( _mm_srli_epi64( v, c ), _mm_slli_epi64( v, 64-(c) ) )
#define mm128_rol_var_64( v, c ) \
_mm_or_si128( _mm_slli_epi64( v, c ), _mm_srli_epi64( v, 64-(c) ) )
#define mm128_ror_var_32( v, c ) \
_mm_or_si128( _mm_srli_epi32( v, c ), _mm_slli_epi32( v, 32-(c) ) )
#define mm128_rol_var_32( v, c ) \
_mm_or_si128( _mm_slli_epi32( v, c ), _mm_srli_epi32( v, 32-(c) ) )
/* /*
#if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && defined(__AVX512BW__) #if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && defined(__AVX512BW__)
#define mm128_ror_64( v, c ) _mm_ror_epi64( v, c ) #define mm128_ror_64 _mm_ror_epi64
#define mm128_rol_64( v, c ) _mm_rol_epi64( v, c ) #define mm128_rol_64 _mm_rol_epi64
#define mm128_ror_32( v, c ) _mm_ror_epi32( v, c ) #define mm128_ror_32 _mm_ror_epi32
#define mm128_rol_32( v, c ) _mm_rol_epi32( v, c ) #define mm128_rol_32 _mm_rol_epi32
#else #else
*/ */
#define mm128_ror_64( v, c ) \ #define mm128_ror_64 mm128_ror_var_64
_mm_or_si128( _mm_srli_epi64( v, c ), _mm_slli_epi64( v, 64-(c) ) ) #define mm128_rol_64 mm128_rol_var_64
#define mm128_ror_32 mm128_ror_var_32
#define mm128_rol_64( v, c ) \ #define mm128_rol_32 mm128_rol_var_32
_mm_or_si128( _mm_slli_epi64( v, c ), _mm_srli_epi64( v, 64-(c) ) )
#define mm128_ror_32( v, c ) \
_mm_or_si128( _mm_srli_epi32( v, c ), _mm_slli_epi32( v, 32-(c) ) )
#define mm128_rol_32( v, c ) \
_mm_or_si128( _mm_slli_epi32( v, c ), _mm_srli_epi32( v, 32-(c) ) )
//#endif // AVX512 else //#endif // AVX512 else

View File

@@ -367,38 +367,49 @@ static inline void memcpy_256( __m256i *dst, const __m256i *src, const int n )
// //
// AVX512 has bit rotate for 256 bit vectors with 64 or 32 bit elements // AVX512 has bit rotate for 256 bit vectors with 64 or 32 bit elements
// compiler doesn't like when a variable is used for the last arg of // compiler doesn't like when a variable is used for the last arg of
// _mm_rol_epi32, must be "8 bit immediate". // _mm_rol_epi32, must be "8 bit immediate". Therefore use rol_var where
// necessary.
#define mm256_ror_var_64( v, c ) \
_mm256_or_si256( _mm256_srli_epi64( v, c ), \
_mm256_slli_epi64( v, 64-(c) ) )
#define mm256_rol_var_64( v, c ) \
_mm256_or_si256( _mm256_slli_epi64( v, c ), \
_mm256_srli_epi64( v, 64-(c) ) )
#define mm256_ror_var_32( v, c ) \
_mm256_or_si256( _mm256_srli_epi32( v, c ), \
_mm256_slli_epi32( v, 32-(c) ) )
#define mm256_rol_var_32( v, c ) \
_mm256_or_si256( _mm256_slli_epi32( v, c ), \
_mm256_srli_epi32( v, 32-(c) ) )
/* /*
#if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && defined(__AVX512BW__) #if defined(__AVX512F__) && defined(__AVX512VL__) && defined(__AVX512DQ__) && defined(__AVX512BW__)
#define mm256_ror_64( v, c ) _mm256_ror_epi64( v, c ) // AVX512, control must be 8 bit immediate.
#define mm256_rol_64( v, c ) _mm256_rol_epi64( v, c )
#define mm256_ror_32( v, c ) _mm256_ror_epi32( v, c ) #define mm256_ror_64 _mm256_ror_epi64
#define mm256_rol_32( v, c ) _mm256_rol_epi32( v, c ) #define mm256_rol_64 _mm256_rol_epi64
#define mm256_ror_32 _mm256_ror_epi32
#define mm256_rol_32 _mm256_rol_epi32
#else #else
*/ */
#define mm256_ror_64( v, c ) \ // No AVX512, use fallback.
_mm256_or_si256( _mm256_srli_epi64( v, c ), \
_mm256_slli_epi64( v, 64-(c) ) )
#define mm256_rol_64( v, c ) \ #define mm256_ror_64 mm256_ror_var_64
_mm256_or_si256( _mm256_slli_epi64( v, c ), \ #define mm256_rol_64 mm256_rol_var_64
_mm256_srli_epi64( v, 64-(c) ) ) #define mm256_ror_32 mm256_ror_var_32
#define mm256_rol_32 mm256_rol_var_32
#define mm256_ror_32( v, c ) \
_mm256_or_si256( _mm256_srli_epi32( v, c ), \
_mm256_slli_epi32( v, 32-(c) ) )
#define mm256_rol_32( v, c ) \
_mm256_or_si256( _mm256_slli_epi32( v, c ), \
_mm256_srli_epi32( v, 32-(c) ) )
// #endif // AVX512 else // #endif // AVX512 else
#define mm256_ror_16( v, c ) \ #define mm256_ror_16( v, c ) \
_mm256_or_si256( _mm256_srli_epi16( v, c ), \ _mm256_or_si256( _mm256_srli_epi16( v, c ), \
_mm256_slli_epi16( v, 16-(c) ) ) _mm256_slli_epi16( v, 16-(c) ) )

View File

@@ -278,7 +278,7 @@ static inline __m512i mm512_neg1_fn()
// Horizontal vector testing // Horizontal vector testing
#define mm512_allbits0( a ) _mm512_cmpeq_epi64_mask( a, m512_zero ) #define mm512_allbits0( a ) _mm512_cmpeq_epi64_mask( a, m512_zero )
#define mm256_allbits1( a ) _mm512_cmpeq_epi64_mask( a, m512_neg1 ) #define mm512_allbits1( a ) _mm512_cmpeq_epi64_mask( a, m512_neg1 )
#define mm512_anybits0( a ) _mm512_cmpneq_epi64_mask( a, m512_neg1 ) #define mm512_anybits0( a ) _mm512_cmpneq_epi64_mask( a, m512_neg1 )
#define mm512_anybits1( a ) _mm512_cmpneq_epi64_mask( a, m512_zero ) #define mm512_anybits1( a ) _mm512_cmpneq_epi64_mask( a, m512_zero )
@@ -287,11 +287,30 @@ static inline __m512i mm512_neg1_fn()
// Bit rotations. // Bit rotations.
// AVX512F has built-in fixed and variable bit rotation for 64 & 32 bit // AVX512F has built-in fixed and variable bit rotation for 64 & 32 bit
// elements and can be called directly. // elements and can be called directly. But they only accept immediate 8
// for control arg.
// //
// _mm512_rol_epi64, _mm512_ror_epi64, _mm512_rol_epi32, _mm512_ror_epi32 // _mm512_rol_epi64, _mm512_ror_epi64, _mm512_rol_epi32, _mm512_ror_epi32
// _mm512_rolv_epi64, _mm512_rorv_epi64, _mm512_rolv_epi32, _mm512_rorv_epi32 // _mm512_rolv_epi64, _mm512_rorv_epi64, _mm512_rolv_epi32, _mm512_rorv_epi32
// //
#define mm512_ror_var_64( v, c ) \
_mm512_or_si512( _mm512_srli_epi64( v, c ), \
_mm512_slli_epi64( v, 64-(c) ) )
#define mm512_rol_var_64( v, c ) \
_mm512_or_si512( _mm512_slli_epi64( v, c ), \
_mm512_srli_epi64( v, 64-(c) ) )
#define mm512_ror_var_32( v, c ) \
_mm512_or_si512( _mm512_srli_epi32( v, c ), \
_mm512_slli_epi32( v, 32-(c) ) )
#define mm512_rol_var_32( v, c ) \
_mm512_or_si512( _mm512_slli_epi32( v, c ), \
_mm512_srli_epi32( v, 32-(c) ) )
// Here is a fixed bit rotate for 16 bit elements: // Here is a fixed bit rotate for 16 bit elements:
#define mm512_ror_16( v, c ) \ #define mm512_ror_16( v, c ) \
_mm512_or_si512( _mm512_srli_epi16( v, c ), \ _mm512_or_si512( _mm512_srli_epi16( v, c ), \
@@ -300,6 +319,8 @@ static inline __m512i mm512_neg1_fn()
_mm512_or_si512( _mm512_slli_epi16( v, c ), \ _mm512_or_si512( _mm512_slli_epi16( v, c ), \
_mm512_srli_epi16( v, 16-(c) ) _mm512_srli_epi16( v, 16-(c) )
// Rotations using a vector control index are very slow due to overhead // Rotations using a vector control index are very slow due to overhead
// to generate the index vector. Repeated rotations using the same index // to generate the index vector. Repeated rotations using the same index
// are better handled by the calling function where the index only needs // are better handled by the calling function where the index only needs

View File

@@ -1,8 +1,13 @@
#if !defined(SYSINJFOS_C___)
#define SYSINFOS_C__
/** /**
* Unit to read cpu informations * Unit to read cpu informations
* *
* tpruvot 2014 * tpruvot 2014
*/ * JayDDee 2019
*
*/
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
@@ -28,7 +33,7 @@
#define HWMON_ALT5 \ #define HWMON_ALT5 \
"/sys/class/hwmon/hwmon0/device/temp1_input" "/sys/class/hwmon/hwmon0/device/temp1_input"
static float linux_cputemp(int core) static inline float linux_cputemp(int core)
{ {
float tc = 0.0; float tc = 0.0;
FILE *fd = fopen(HWMON_PATH, "r"); FILE *fd = fopen(HWMON_PATH, "r");
@@ -60,7 +65,7 @@ static float linux_cputemp(int core)
#define CPUFREQ_PATH \ #define CPUFREQ_PATH \
"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq" "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq"
static uint32_t linux_cpufreq(int core) static inline uint32_t linux_cpufreq(int core)
{ {
FILE *fd = fopen(CPUFREQ_PATH, "r"); FILE *fd = fopen(CPUFREQ_PATH, "r");
uint32_t freq = 0; uint32_t freq = 0;
@@ -76,7 +81,7 @@ static uint32_t linux_cpufreq(int core)
#else /* WIN32 */ #else /* WIN32 */
static float win32_cputemp(int core) static inline float win32_cputemp(int core)
{ {
// todo // todo
return 0.0; return 0.0;
@@ -88,7 +93,7 @@ static float win32_cputemp(int core)
/* exports */ /* exports */
float cpu_temp(int core) static inline float cpu_temp(int core)
{ {
#ifdef WIN32 #ifdef WIN32
return win32_cputemp(core); return win32_cputemp(core);
@@ -97,7 +102,7 @@ float cpu_temp(int core)
#endif #endif
} }
uint32_t cpu_clock(int core) static inline uint32_t cpu_clock(int core)
{ {
#ifdef WIN32 #ifdef WIN32
return 0; return 0;
@@ -106,7 +111,7 @@ uint32_t cpu_clock(int core)
#endif #endif
} }
int cpu_fanpercent() static inline int cpu_fanpercent()
{ {
return 0; return 0;
} }
@@ -142,7 +147,7 @@ static inline void cpuid(int functionnumber, int output[4]) {
#define cpuid(fn, out) out[0] = 0; #define cpuid(fn, out) out[0] = 0;
#endif #endif
void cpu_getname(char *outbuf, size_t maxsz) static inline void cpu_getname(char *outbuf, size_t maxsz)
{ {
memset(outbuf, 0, maxsz); memset(outbuf, 0, maxsz);
#ifdef WIN32 #ifdef WIN32
@@ -190,7 +195,7 @@ void cpu_getname(char *outbuf, size_t maxsz)
#endif #endif
} }
void cpu_getmodelid(char *outbuf, size_t maxsz) static inline void cpu_getmodelid(char *outbuf, size_t maxsz)
{ {
memset(outbuf, 0, maxsz); memset(outbuf, 0, maxsz);
#ifdef WIN32 #ifdef WIN32
@@ -259,32 +264,47 @@ void cpu_getmodelid(char *outbuf, size_t maxsz)
#define CPU_BRAND_2 (0x80000003) #define CPU_BRAND_2 (0x80000003)
#define CPU_BRAND_3 (0x80000004) #define CPU_BRAND_3 (0x80000004)
// Registers
#define EAX_Reg (0) #define EAX_Reg (0)
#define EBX_Reg (1) #define EBX_Reg (1)
#define ECX_Reg (2) #define ECX_Reg (2)
#define EDX_Reg (3) #define EDX_Reg (3)
#define XSAVE_Flag (1<<26) // ECX // Feature flags
// CPU_INFO ECX
#define XSAVE_Flag (1<<26)
#define OSXSAVE_Flag (1<<27) #define OSXSAVE_Flag (1<<27)
#define AVX1_Flag (1<<28) #define AVX_Flag (1<<28)
#define XOP_Flag (1<<11) #define XOP_Flag (1<<11)
#define FMA3_Flag (1<<12) #define FMA3_Flag (1<<12)
#define AES_Flag (1<<25) #define AES_Flag (1<<25)
#define SSE42_Flag (1<<20) #define SSE42_Flag (1<<20)
// CPU_INFO EDX
#define SSE_Flag (1<<25) // EDX #define SSE_Flag (1<<25) // EDX
#define SSE2_Flag (1<<26) #define SSE2_Flag (1<<26)
#define AVX2_Flag (1<< 5) // ADV EBX // EXTENDED_FEATURES EBX
#define AVX2_Flag (1<< 5)
#define AVX512F_Flag (1<<16) #define AVX512F_Flag (1<<16)
#define AVX512DQ_Flag (1<<17)
#define SHA_Flag (1<<29) #define SHA_Flag (1<<29)
#define AVX512BW_Flag (1<<30)
#define AVX512VL_Flag (1<<31)
// EXTENDED_FEATURES ECX
#define AVX512VBMI_Flag (1<<1)
#define AVX512VBMI2_Flag (1<<6)
#define AVX512VAES_Flag (1<<9)
// Use this to detect presence of feature // Use this to detect presence of feature
#define AVX1_mask (AVX1_Flag|XSAVE_Flag|OSXSAVE_Flag) #define AVX_mask (AVX_Flag|XSAVE_Flag|OSXSAVE_Flag)
#define FMA3_mask (FMA3_Flag|AVX1_mask) #define FMA3_mask (FMA3_Flag|AVX_mask)
#define AVX512_mask (AVX512VL_Flag|AVX512BW_Flag|AVX512DQ_Flag|AVX512F_Flag)
static inline bool has_sha()
static inline bool has_sha_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -295,10 +315,7 @@ static inline bool has_sha_()
#endif #endif
} }
bool has_sha() { return has_sha_(); } static inline bool has_sse2()
static inline bool has_sse2_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -309,10 +326,8 @@ static inline bool has_sse2_()
#endif #endif
} }
bool has_sse2() { return has_sse2_(); } // nehalem and above, no AVX on nehalem
static inline bool has_aes_ni()
// nehalem and above, no AVX1 on nehalem
static inline bool has_aes_ni_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -323,24 +338,20 @@ static inline bool has_aes_ni_()
#endif #endif
} }
bool has_aes_ni() { return has_aes_ni_(); }
// westmere and above // westmere and above
static inline bool has_avx1_() static inline bool has_avx()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
#else #else
int cpu_info[4] = { 0 }; int cpu_info[4] = { 0 };
cpuid( CPU_INFO, cpu_info ); cpuid( CPU_INFO, cpu_info );
return ( ( cpu_info[ ECX_Reg ] & AVX1_mask ) == AVX1_mask ); return ( ( cpu_info[ ECX_Reg ] & AVX_mask ) == AVX_mask );
#endif #endif
} }
bool has_avx1() { return has_avx1_(); }
// haswell and above // haswell and above
static inline bool has_avx2_() static inline bool has_avx2()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -351,9 +362,7 @@ static inline bool has_avx2_()
#endif #endif
} }
bool has_avx2() { return has_avx2_(); } static inline bool has_avx512f()
static inline bool has_avx512f_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -364,24 +373,75 @@ static inline bool has_avx512f_()
#endif #endif
} }
bool has_avx512f() { return has_avx512f_(); } static inline bool has_avx512dq()
{
#ifdef __arm__
return false;
#else
int cpu_info[4] = { 0 };
cpuid( EXTENDED_FEATURES, cpu_info );
return cpu_info[ EBX_Reg ] & AVX512DQ_Flag;
#endif
}
static inline bool has_avx512bw()
{
#ifdef __arm__
return false;
#else
int cpu_info[4] = { 0 };
cpuid( EXTENDED_FEATURES, cpu_info );
return cpu_info[ EBX_Reg ] & AVX512BW_Flag;
#endif
}
static inline bool has_avx512vl()
{
#ifdef __arm__
return false;
#else
int cpu_info[4] = { 0 };
cpuid( EXTENDED_FEATURES, cpu_info );
return cpu_info[ EBX_Reg ] & AVX512VL_Flag;
#endif
}
// Minimum to be useful
static inline bool has_avx512()
{
#ifdef __arm__
return false;
#else
int cpu_info[4] = { 0 };
cpuid( EXTENDED_FEATURES, cpu_info );
return ( ( cpu_info[ EBX_Reg ] & AVX512_mask ) == AVX512_mask );
#endif
}
static inline bool has_avx512vaes()
{
#ifdef __arm__
return false;
#else
int cpu_info[4] = { 0 };
cpuid( EXTENDED_FEATURES, cpu_info );
return cpu_info[ ECX_Reg ] & AVX512VAES_Flag;
#endif
}
// AMD only // AMD only
static inline bool has_xop_() static inline bool has_xop()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
#else #else
int cpu_info[4] = { 0 }; int cpu_info[4] = { 0 };
cpuid( CPU_INFO, cpu_info ); cpuid( EXTENDED_CPU_INFO, cpu_info );
return cpu_info[ ECX_Reg ] & XOP_Flag; return cpu_info[ ECX_Reg ] & XOP_Flag;
#endif #endif
} }
bool has_xop() { return has_xop_(); } static inline bool has_fma3()
static inline bool has_fma3_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -392,9 +452,7 @@ static inline bool has_fma3_()
#endif #endif
} }
bool has_fma3() { return has_fma3_(); } static inline bool has_sse42()
static inline bool has_sse42_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -405,9 +463,7 @@ static inline bool has_sse42_()
#endif #endif
} }
bool has_sse42() { return has_sse42_(); } static inline bool has_sse()
static inline bool has_sse_()
{ {
#ifdef __arm__ #ifdef __arm__
return false; return false;
@@ -418,16 +474,14 @@ static inline bool has_sse_()
#endif #endif
} }
bool has_sse() { return has_sse_(); } static inline uint32_t cpuid_get_highest_function_number()
uint32_t cpuid_get_highest_function_number()
{ {
uint32_t cpu_info[4] = {0}; uint32_t cpu_info[4] = {0};
cpuid( VENDOR_ID, cpu_info); cpuid( VENDOR_ID, cpu_info);
return cpu_info[ EAX_Reg ]; return cpu_info[ EAX_Reg ];
} }
void cpuid_get_highest_function( char* s ) static inline void cpuid_get_highest_function( char* s )
{ {
uint32_t fn = cpuid_get_highest_function_number(); uint32_t fn = cpuid_get_highest_function_number();
switch (fn) switch (fn)
@@ -449,7 +503,7 @@ void cpuid_get_highest_function( char* s )
} }
} }
void cpu_bestfeature(char *outbuf, size_t maxsz) static inline void cpu_bestfeature(char *outbuf, size_t maxsz)
{ {
#ifdef __arm__ #ifdef __arm__
sprintf(outbuf, "ARM"); sprintf(outbuf, "ARM");
@@ -459,19 +513,19 @@ void cpu_bestfeature(char *outbuf, size_t maxsz)
cpuid( CPU_INFO, cpu_info ); cpuid( CPU_INFO, cpu_info );
cpuid( EXTENDED_FEATURES, cpu_info_adv ); cpuid( EXTENDED_FEATURES, cpu_info_adv );
if ( has_avx1_() && has_avx2_() ) if ( has_avx() && has_avx2() )
sprintf(outbuf, "AVX2"); sprintf(outbuf, "AVX2");
else if ( has_avx1_() ) else if ( has_avx() )
sprintf(outbuf, "AVX1"); sprintf(outbuf, "AVX");
else if ( has_fma3_() ) else if ( has_fma3() )
sprintf(outbuf, "FMA3"); sprintf(outbuf, "FMA3");
else if ( has_xop_() ) else if ( has_xop() )
sprintf(outbuf, "XOP"); sprintf(outbuf, "XOP");
else if ( has_sse42_() ) else if ( has_sse42() )
sprintf(outbuf, "SSE42"); sprintf(outbuf, "SSE42");
else if ( has_sse2_() ) else if ( has_sse2() )
sprintf(outbuf, "SSE2"); sprintf(outbuf, "SSE2");
else if ( has_sse_() ) else if ( has_sse() )
sprintf(outbuf, "SSE"); sprintf(outbuf, "SSE");
else else
*outbuf = '\0'; *outbuf = '\0';
@@ -479,7 +533,7 @@ void cpu_bestfeature(char *outbuf, size_t maxsz)
#endif #endif
} }
void cpu_brand_string( char* s ) static inline void cpu_brand_string( char* s )
{ {
#ifdef __arm__ #ifdef __arm__
sprintf( s, "ARM" ); sprintf( s, "ARM" );
@@ -498,3 +552,5 @@ void cpu_brand_string( char* s )
#endif #endif
} }
#endif // SYSINFOS_C__

1
util.c
View File

@@ -24,6 +24,7 @@
#include <unistd.h> #include <unistd.h>
#include <jansson.h> #include <jansson.h>
#include <curl/curl.h> #include <curl/curl.h>
#include "sysinfos.c"
#include <time.h> #include <time.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <math.h> #include <math.h>