mirror of
https://github.com/JayDDee/cpuminer-opt.git
synced 2025-09-17 23:44:27 +00:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9653bca1e2 | ||
![]() |
1c0719e8a4 |
@@ -257,6 +257,7 @@ cpuminer_SOURCES = \
|
|||||||
algo/x16/hex.c \
|
algo/x16/hex.c \
|
||||||
algo/x16/x21s-4way.c \
|
algo/x16/x21s-4way.c \
|
||||||
algo/x16/x21s.c \
|
algo/x16/x21s.c \
|
||||||
|
algo/x16/minotaur.c \
|
||||||
algo/x17/x17-gate.c \
|
algo/x17/x17-gate.c \
|
||||||
algo/x17/x17.c \
|
algo/x17/x17.c \
|
||||||
algo/x17/x17-4way.c \
|
algo/x17/x17-4way.c \
|
||||||
|
@@ -93,6 +93,7 @@ Supported Algorithms
|
|||||||
lyra2z
|
lyra2z
|
||||||
lyra2z330 Lyra2 330 rows, Zoin (ZOI)
|
lyra2z330 Lyra2 330 rows, Zoin (ZOI)
|
||||||
m7m Magi (XMG)
|
m7m Magi (XMG)
|
||||||
|
minotaur Ringcoin (RNG)
|
||||||
myr-gr Myriad-Groestl
|
myr-gr Myriad-Groestl
|
||||||
neoscrypt NeoScrypt(128, 2, 1)
|
neoscrypt NeoScrypt(128, 2, 1)
|
||||||
nist5 Nist5
|
nist5 Nist5
|
||||||
|
@@ -46,6 +46,15 @@ Icelake is only available on some laptops. Mining with a laptop is not
|
|||||||
recommended. The icelake build is included in anticipation of Intel eventually
|
recommended. The icelake build is included in anticipation of Intel eventually
|
||||||
releasing a desktop CPU with a microarchitecture newer than Skylake.
|
releasing a desktop CPU with a microarchitecture newer than Skylake.
|
||||||
|
|
||||||
|
Notes about included DLL files:
|
||||||
|
|
||||||
|
Downloading DLL files from alternative sources presents an inherent
|
||||||
|
security risk if their source is unknown. All DLL files included have
|
||||||
|
been copied from the Ubuntu-20.04 instalation or compiled by me from
|
||||||
|
source code obtained from the author's official repository. The exact
|
||||||
|
procedure is documented in the build instructions for Windows:
|
||||||
|
https://github.com/JayDDee/cpuminer-opt/wiki/Compiling-from-source
|
||||||
|
|
||||||
If you like this software feel free to donate:
|
If you like this software feel free to donate:
|
||||||
|
|
||||||
BTC: 12tdvfF7KmAsihBXQXynT6E6th2c2pByTT
|
BTC: 12tdvfF7KmAsihBXQXynT6E6th2c2pByTT
|
||||||
|
@@ -65,6 +65,17 @@ If not what makes it happen or not happen?
|
|||||||
Change Log
|
Change Log
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
v3.13.1.1
|
||||||
|
|
||||||
|
Fixed Windows crash mining minotaur algo.
|
||||||
|
|
||||||
|
Fixed GCC 10 compile again.
|
||||||
|
Added -fno-common to testing to be consistent with GCC 10 default.
|
||||||
|
|
||||||
|
v3.13.1
|
||||||
|
|
||||||
|
Added minotaur algo for Ringcoin.
|
||||||
|
|
||||||
v3.13.0.1
|
v3.13.0.1
|
||||||
|
|
||||||
Issue #262: Fixed xevan AVX2 invalid shares.
|
Issue #262: Fixed xevan AVX2 invalid shares.
|
||||||
|
@@ -90,13 +90,44 @@ void algo_not_implemented()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// default null functions
|
// default null functions
|
||||||
|
// deprecated, use generic as default
|
||||||
int null_scanhash()
|
int null_scanhash()
|
||||||
{
|
{
|
||||||
applog(LOG_WARNING,"SWERR: undefined scanhash function in algo_gate");
|
applog(LOG_WARNING,"SWERR: undefined scanhash function in algo_gate");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default generic scanhash can be used in many cases.
|
||||||
|
int scanhash_generic( struct work *work, uint32_t max_nonce,
|
||||||
|
uint64_t *hashes_done, struct thr_info *mythr )
|
||||||
|
{
|
||||||
|
uint32_t edata[20] __attribute__((aligned(64)));
|
||||||
|
uint32_t hash[8] __attribute__((aligned(64)));
|
||||||
|
uint32_t *pdata = work->data;
|
||||||
|
uint32_t *ptarget = work->target;
|
||||||
|
const uint32_t first_nonce = pdata[19];
|
||||||
|
const uint32_t last_nonce = max_nonce - 1;
|
||||||
|
uint32_t n = first_nonce;
|
||||||
|
const int thr_id = mythr->id;
|
||||||
|
const bool bench = opt_benchmark;
|
||||||
|
|
||||||
|
mm128_bswap32_80( edata, pdata );
|
||||||
|
do
|
||||||
|
{
|
||||||
|
edata[19] = n;
|
||||||
|
if ( likely( algo_gate.hash( hash, edata, thr_id ) ) )
|
||||||
|
if ( unlikely( valid_hash( hash, ptarget ) && !bench ) )
|
||||||
|
{
|
||||||
|
pdata[19] = bswap_32( n );
|
||||||
|
submit_solution( work, hash, mythr );
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
} while ( n < last_nonce && !work_restart[thr_id].restart );
|
||||||
|
*hashes_done = n - first_nonce;
|
||||||
|
pdata[19] = n;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int null_hash()
|
int null_hash()
|
||||||
{
|
{
|
||||||
applog(LOG_WARNING,"SWERR: null_hash unsafe null function");
|
applog(LOG_WARNING,"SWERR: null_hash unsafe null function");
|
||||||
@@ -106,7 +137,7 @@ int null_hash()
|
|||||||
void init_algo_gate( algo_gate_t* gate )
|
void init_algo_gate( algo_gate_t* gate )
|
||||||
{
|
{
|
||||||
gate->miner_thread_init = (void*)&return_true;
|
gate->miner_thread_init = (void*)&return_true;
|
||||||
gate->scanhash = (void*)&null_scanhash;
|
gate->scanhash = (void*)&scanhash_generic;
|
||||||
gate->hash = (void*)&null_hash;
|
gate->hash = (void*)&null_hash;
|
||||||
gate->get_new_work = (void*)&std_get_new_work;
|
gate->get_new_work = (void*)&std_get_new_work;
|
||||||
gate->work_decode = (void*)&std_le_work_decode;
|
gate->work_decode = (void*)&std_le_work_decode;
|
||||||
@@ -179,6 +210,7 @@ bool register_algo_gate( int algo, algo_gate_t *gate )
|
|||||||
case ALGO_LYRA2Z: register_lyra2z_algo ( gate ); break;
|
case ALGO_LYRA2Z: register_lyra2z_algo ( gate ); break;
|
||||||
case ALGO_LYRA2Z330: register_lyra2z330_algo ( gate ); break;
|
case ALGO_LYRA2Z330: register_lyra2z330_algo ( gate ); break;
|
||||||
case ALGO_M7M: register_m7m_algo ( gate ); break;
|
case ALGO_M7M: register_m7m_algo ( gate ); break;
|
||||||
|
case ALGO_MINOTAUR: register_minotaur_algo ( gate ); break;
|
||||||
case ALGO_MYR_GR: register_myriad_algo ( gate ); break;
|
case ALGO_MYR_GR: register_myriad_algo ( gate ); break;
|
||||||
case ALGO_NEOSCRYPT: register_neoscrypt_algo ( gate ); break;
|
case ALGO_NEOSCRYPT: register_neoscrypt_algo ( gate ); break;
|
||||||
case ALGO_NIST5: register_nist5_algo ( gate ); break;
|
case ALGO_NIST5: register_nist5_algo ( gate ); break;
|
||||||
@@ -251,7 +283,6 @@ bool register_algo_gate( int algo, algo_gate_t *gate )
|
|||||||
// restore warnings
|
// restore warnings
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
// run the alternate hash function for a specific algo
|
|
||||||
void exec_hash_function( int algo, void *output, const void *pdata )
|
void exec_hash_function( int algo, void *output, const void *pdata )
|
||||||
{
|
{
|
||||||
algo_gate_t gate;
|
algo_gate_t gate;
|
||||||
|
@@ -110,11 +110,13 @@ inline bool set_excl ( set_t a, set_t b ) { return (a & b) == 0; }
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
// mandatory function, must be overwritten
|
// Mandatory functions, one of these is mandatory. If the default scanhash
|
||||||
|
// is used a custom hash function must be registered, with a custom scanhash
|
||||||
|
// the hash function is not necessary.
|
||||||
int ( *scanhash ) ( struct work*, uint32_t, uint64_t*, struct thr_info* );
|
int ( *scanhash ) ( struct work*, uint32_t, uint64_t*, struct thr_info* );
|
||||||
|
|
||||||
// Deprecated, will be removed
|
//int ( *hash ) ( void*, const void*, uint32_t ) ;
|
||||||
int ( *hash ) ( void*, const void*, uint32_t ) ;
|
int ( *hash ) ( void*, const void*, int );
|
||||||
|
|
||||||
//optional, safe to use default in most cases
|
//optional, safe to use default in most cases
|
||||||
|
|
||||||
@@ -207,9 +209,13 @@ void four_way_not_tested();
|
|||||||
#define JR2_WORK_CMP_INDEX_2 43
|
#define JR2_WORK_CMP_INDEX_2 43
|
||||||
#define JR2_WORK_CMP_SIZE_2 33
|
#define JR2_WORK_CMP_SIZE_2 33
|
||||||
|
|
||||||
// allways returns failure
|
// deprecated, use generic instead
|
||||||
int null_scanhash();
|
int null_scanhash();
|
||||||
|
|
||||||
|
// Default generic, may be used in many cases.
|
||||||
|
int scanhash_generic( struct work *work, uint32_t max_nonce,
|
||||||
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
|
|
||||||
// displays warning
|
// displays warning
|
||||||
int null_hash ();
|
int null_hash ();
|
||||||
|
|
||||||
|
@@ -731,7 +731,7 @@ void skein512_8way_full( skein512_8way_context *sc, void *out, const void *data,
|
|||||||
void
|
void
|
||||||
skein512_8way_prehash64( skein512_8way_context *sc, const void *data )
|
skein512_8way_prehash64( skein512_8way_context *sc, const void *data )
|
||||||
{
|
{
|
||||||
__m512i *vdata = (__m512*)data;
|
__m512i *vdata = (__m512i*)data;
|
||||||
__m512i *buf = sc->buf;
|
__m512i *buf = sc->buf;
|
||||||
buf[0] = vdata[0];
|
buf[0] = vdata[0];
|
||||||
buf[1] = vdata[1];
|
buf[1] = vdata[1];
|
||||||
|
258
algo/x16/minotaur.c
Normal file
258
algo/x16/minotaur.c
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
// Minotaur hash
|
||||||
|
|
||||||
|
#include "algo-gate-api.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "algo/blake/sph_blake.h"
|
||||||
|
#include "algo/bmw/sph_bmw.h"
|
||||||
|
#include "algo/jh/sph_jh.h"
|
||||||
|
#include "algo/keccak/sph_keccak.h"
|
||||||
|
#include "algo/skein/sph_skein.h"
|
||||||
|
#include "algo/shavite/sph_shavite.h"
|
||||||
|
#include "algo/luffa/luffa_for_sse2.h"
|
||||||
|
#include "algo/cubehash/cubehash_sse2.h"
|
||||||
|
#include "algo/simd/nist.h"
|
||||||
|
#include "algo/hamsi/sph_hamsi.h"
|
||||||
|
#include "algo/fugue/sph_fugue.h"
|
||||||
|
#include "algo/shabal/sph_shabal.h"
|
||||||
|
#include "algo/whirlpool/sph_whirlpool.h"
|
||||||
|
#include <openssl/sha.h>
|
||||||
|
#if defined(__AES__)
|
||||||
|
#include "algo/echo/aes_ni/hash_api.h"
|
||||||
|
#include "algo/groestl/aes_ni/hash-groestl.h"
|
||||||
|
#else
|
||||||
|
#include "algo/echo/sph_echo.h"
|
||||||
|
#include "algo/groestl/sph_groestl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Config
|
||||||
|
#define MINOTAUR_ALGO_COUNT 16
|
||||||
|
|
||||||
|
typedef struct TortureNode TortureNode;
|
||||||
|
typedef struct TortureGarden TortureGarden;
|
||||||
|
|
||||||
|
// Graph of hash algos plus SPH contexts
|
||||||
|
struct TortureGarden {
|
||||||
|
#if defined(__AES__)
|
||||||
|
hashState_echo echo;
|
||||||
|
hashState_groestl groestl;
|
||||||
|
#else
|
||||||
|
sph_echo512_context echo;
|
||||||
|
sph_groestl512_context groestl;
|
||||||
|
#endif
|
||||||
|
sph_blake512_context blake;
|
||||||
|
sph_bmw512_context bmw;
|
||||||
|
sph_skein512_context skein;
|
||||||
|
sph_jh512_context jh;
|
||||||
|
sph_keccak512_context keccak;
|
||||||
|
hashState_luffa luffa;
|
||||||
|
cubehashParam cube;
|
||||||
|
shavite512_context shavite;
|
||||||
|
hashState_sd simd;
|
||||||
|
sph_hamsi512_context hamsi;
|
||||||
|
sph_fugue512_context fugue;
|
||||||
|
sph_shabal512_context shabal;
|
||||||
|
sph_whirlpool_context whirlpool;
|
||||||
|
SHA512_CTX sha512;
|
||||||
|
|
||||||
|
struct TortureNode {
|
||||||
|
unsigned int algo;
|
||||||
|
TortureNode *childLeft;
|
||||||
|
TortureNode *childRight;
|
||||||
|
} nodes[22];
|
||||||
|
} __attribute__ ((aligned (64)));
|
||||||
|
|
||||||
|
// Get a 64-byte hash for given 64-byte input, using given TortureGarden contexts and given algo index
|
||||||
|
static void get_hash( void *output, const void *input, TortureGarden *garden,
|
||||||
|
unsigned int algo )
|
||||||
|
{
|
||||||
|
unsigned char hash[64] __attribute__ ((aligned (64)));
|
||||||
|
|
||||||
|
switch (algo) {
|
||||||
|
case 0:
|
||||||
|
sph_blake512_init(&garden->blake);
|
||||||
|
sph_blake512(&garden->blake, input, 64);
|
||||||
|
sph_blake512_close(&garden->blake, hash);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sph_bmw512_init(&garden->bmw);
|
||||||
|
sph_bmw512(&garden->bmw, input, 64);
|
||||||
|
sph_bmw512_close(&garden->bmw, hash);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
cubehashInit( &garden->cube, 512, 16, 32 );
|
||||||
|
cubehashUpdateDigest( &garden->cube, (byte*)hash,
|
||||||
|
(const byte*)input, 64 );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
#if defined(__AES__)
|
||||||
|
echo_full( &garden->echo, (BitSequence *)hash, 512,
|
||||||
|
(const BitSequence *)input, 64 );
|
||||||
|
#else
|
||||||
|
sph_echo512_init(&garden->echo);
|
||||||
|
sph_echo512(&garden->echo, input, 64);
|
||||||
|
sph_echo512_close(&garden->echo, hash);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sph_fugue512_init(&garden->fugue);
|
||||||
|
sph_fugue512(&garden->fugue, input, 64);
|
||||||
|
sph_fugue512_close(&garden->fugue, hash);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
#if defined(__AES__)
|
||||||
|
groestl512_full( &garden->groestl, (char*)hash, (char*)input, 512 );
|
||||||
|
#else
|
||||||
|
sph_groestl512_init(&garden->groestl);
|
||||||
|
sph_groestl512(&garden->groestl, input, 64);
|
||||||
|
sph_groestl512_close(&garden->groestl, hash);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sph_hamsi512_init(&garden->hamsi);
|
||||||
|
sph_hamsi512(&garden->hamsi, input, 64);
|
||||||
|
sph_hamsi512_close(&garden->hamsi, hash);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
SHA512_Init( &garden->sha512 );
|
||||||
|
SHA512_Update( &garden->sha512, input, 64 );
|
||||||
|
SHA512_Final( (unsigned char*)hash, &garden->sha512 );
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
sph_jh512_init(&garden->jh);
|
||||||
|
sph_jh512(&garden->jh, input, 64);
|
||||||
|
sph_jh512_close(&garden->jh, hash);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
sph_keccak512_init(&garden->keccak);
|
||||||
|
sph_keccak512(&garden->keccak, input, 64);
|
||||||
|
sph_keccak512_close(&garden->keccak, hash);
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
init_luffa( &garden->luffa, 512 );
|
||||||
|
update_and_final_luffa( &garden->luffa, (BitSequence*)hash,
|
||||||
|
(const BitSequence*)input, 64 );
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
sph_shabal512_init(&garden->shabal);
|
||||||
|
sph_shabal512(&garden->shabal, input, 64);
|
||||||
|
sph_shabal512_close(&garden->shabal, hash);
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
sph_shavite512_init(&garden->shavite);
|
||||||
|
sph_shavite512(&garden->shavite, input, 64);
|
||||||
|
sph_shavite512_close(&garden->shavite, hash);
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
init_sd( &garden->simd, 512 );
|
||||||
|
update_final_sd( &garden->simd, (BitSequence *)hash,
|
||||||
|
(const BitSequence*)input, 512 );
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
sph_skein512_init(&garden->skein);
|
||||||
|
sph_skein512(&garden->skein, input, 64);
|
||||||
|
sph_skein512_close(&garden->skein, hash);
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
sph_whirlpool_init(&garden->whirlpool);
|
||||||
|
sph_whirlpool(&garden->whirlpool, input, 64);
|
||||||
|
sph_whirlpool_close(&garden->whirlpool, hash);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output the hash
|
||||||
|
memcpy(output, hash, 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively traverse a given torture garden starting with a given hash and given node within the garden. The hash is overwritten with the final hash.
|
||||||
|
static void traverse_garden( TortureGarden *garden, void *hash,
|
||||||
|
TortureNode *node )
|
||||||
|
{
|
||||||
|
unsigned char partialHash[64] __attribute__ ((aligned (64)));
|
||||||
|
get_hash(partialHash, hash, garden, node->algo);
|
||||||
|
|
||||||
|
if ( partialHash[63] % 2 == 0 )
|
||||||
|
{ // Last byte of output hash is even
|
||||||
|
if ( node->childLeft != NULL )
|
||||||
|
traverse_garden( garden, partialHash, node->childLeft );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Last byte of output hash is odd
|
||||||
|
if ( node->childRight != NULL )
|
||||||
|
traverse_garden( garden, partialHash, node->childRight );
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy( hash, partialHash, 64 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Associate child nodes with a parent node
|
||||||
|
static inline void link_nodes( TortureNode *parent, TortureNode *childLeft,
|
||||||
|
TortureNode *childRight )
|
||||||
|
{
|
||||||
|
parent->childLeft = childLeft;
|
||||||
|
parent->childRight = childRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __thread TortureGarden garden;
|
||||||
|
|
||||||
|
bool initialize_torture_garden()
|
||||||
|
{
|
||||||
|
// Create torture garden nodes. Note that both sides of 19 and 20 lead to 21, and 21 has no children (to make traversal complete).
|
||||||
|
link_nodes(&garden.nodes[0], &garden.nodes[1], &garden.nodes[2]);
|
||||||
|
link_nodes(&garden.nodes[1], &garden.nodes[3], &garden.nodes[4]);
|
||||||
|
link_nodes(&garden.nodes[2], &garden.nodes[5], &garden.nodes[6]);
|
||||||
|
link_nodes(&garden.nodes[3], &garden.nodes[7], &garden.nodes[8]);
|
||||||
|
link_nodes(&garden.nodes[4], &garden.nodes[9], &garden.nodes[10]);
|
||||||
|
link_nodes(&garden.nodes[5], &garden.nodes[11], &garden.nodes[12]);
|
||||||
|
link_nodes(&garden.nodes[6], &garden.nodes[13], &garden.nodes[14]);
|
||||||
|
link_nodes(&garden.nodes[7], &garden.nodes[15], &garden.nodes[16]);
|
||||||
|
link_nodes(&garden.nodes[8], &garden.nodes[15], &garden.nodes[16]);
|
||||||
|
link_nodes(&garden.nodes[9], &garden.nodes[15], &garden.nodes[16]);
|
||||||
|
link_nodes(&garden.nodes[10], &garden.nodes[15], &garden.nodes[16]);
|
||||||
|
link_nodes(&garden.nodes[11], &garden.nodes[17], &garden.nodes[18]);
|
||||||
|
link_nodes(&garden.nodes[12], &garden.nodes[17], &garden.nodes[18]);
|
||||||
|
link_nodes(&garden.nodes[13], &garden.nodes[17], &garden.nodes[18]);
|
||||||
|
link_nodes(&garden.nodes[14], &garden.nodes[17], &garden.nodes[18]);
|
||||||
|
link_nodes(&garden.nodes[15], &garden.nodes[19], &garden.nodes[20]);
|
||||||
|
link_nodes(&garden.nodes[16], &garden.nodes[19], &garden.nodes[20]);
|
||||||
|
link_nodes(&garden.nodes[17], &garden.nodes[19], &garden.nodes[20]);
|
||||||
|
link_nodes(&garden.nodes[18], &garden.nodes[19], &garden.nodes[20]);
|
||||||
|
link_nodes(&garden.nodes[19], &garden.nodes[21], &garden.nodes[21]);
|
||||||
|
link_nodes(&garden.nodes[20], &garden.nodes[21], &garden.nodes[21]);
|
||||||
|
garden.nodes[21].childLeft = NULL;
|
||||||
|
garden.nodes[21].childRight = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Produce a 32-byte hash from 80-byte input data
|
||||||
|
int minotaur_hash( void *output, const void *input )
|
||||||
|
{
|
||||||
|
unsigned char hash[64] __attribute__ ((aligned (64)));
|
||||||
|
|
||||||
|
// Find initial sha512 hash
|
||||||
|
SHA512_Init( &garden.sha512 );
|
||||||
|
SHA512_Update( &garden.sha512, input, 80 );
|
||||||
|
SHA512_Final( (unsigned char*) hash, &garden.sha512 );
|
||||||
|
|
||||||
|
// Assign algos to torture garden nodes based on initial hash
|
||||||
|
for ( int i = 0; i < 22; i++ )
|
||||||
|
garden.nodes[i].algo = hash[i] % MINOTAUR_ALGO_COUNT;
|
||||||
|
|
||||||
|
// Send the initial hash through the torture garden
|
||||||
|
traverse_garden( &garden, hash, &garden.nodes[0] );
|
||||||
|
|
||||||
|
memcpy( output, hash, 32 );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool register_minotaur_algo( algo_gate_t* gate )
|
||||||
|
{
|
||||||
|
gate->hash = (void*)&minotaur_hash;
|
||||||
|
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT;
|
||||||
|
gate->miner_thread_init = (void*)&initialize_torture_garden;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
@@ -4,14 +4,14 @@ bool register_sonoa_algo( algo_gate_t* gate )
|
|||||||
{
|
{
|
||||||
#if defined (SONOA_8WAY)
|
#if defined (SONOA_8WAY)
|
||||||
gate->scanhash = (void*)&scanhash_sonoa_8way;
|
gate->scanhash = (void*)&scanhash_sonoa_8way;
|
||||||
// gate->hash = (void*)&sonoa_8way_hash;
|
gate->hash = (void*)&sonoa_8way_hash;
|
||||||
#elif defined (SONOA_4WAY)
|
#elif defined (SONOA_4WAY)
|
||||||
gate->scanhash = (void*)&scanhash_sonoa_4way;
|
gate->scanhash = (void*)&scanhash_sonoa_4way;
|
||||||
// gate->hash = (void*)&sonoa_4way_hash;
|
gate->hash = (void*)&sonoa_4way_hash;
|
||||||
#else
|
#else
|
||||||
init_sonoa_ctx();
|
init_sonoa_ctx();
|
||||||
gate->scanhash = (void*)&scanhash_sonoa;
|
// gate->scanhash = (void*)&scanhash_sonoa;
|
||||||
// gate->hash = (void*)&sonoa_hash;
|
gate->hash = (void*)&sonoa_hash;
|
||||||
#endif
|
#endif
|
||||||
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
||||||
return true;
|
return true;
|
||||||
|
@@ -569,34 +569,4 @@ int sonoa_hash( void *state, const void *input, int thrid )
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_sonoa( struct work *work, uint32_t max_nonce,
|
|
||||||
uint64_t *hashes_done, struct thr_info *mythr)
|
|
||||||
{
|
|
||||||
uint32_t edata[20] __attribute__((aligned(64)));
|
|
||||||
uint32_t hash64[8] __attribute__((aligned(64)));
|
|
||||||
uint32_t *pdata = work->data;
|
|
||||||
uint32_t *ptarget = work->target;
|
|
||||||
uint32_t n = pdata[19];
|
|
||||||
const uint32_t first_nonce = pdata[19];
|
|
||||||
const int thr_id = mythr->id;
|
|
||||||
const bool bench = opt_benchmark;
|
|
||||||
|
|
||||||
mm128_bswap32_80( edata, pdata );
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
edata[19] = n;
|
|
||||||
if ( sonoa_hash( hash64, edata, thr_id ) )
|
|
||||||
if ( unlikely( valid_hash( hash64, ptarget ) && !bench ) )
|
|
||||||
{
|
|
||||||
pdata[19] = bswap_32( n );
|
|
||||||
submit_solution( work, hash64, mythr );
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
} while ( n < max_nonce && !work_restart[thr_id].restart );
|
|
||||||
*hashes_done = n - first_nonce;
|
|
||||||
pdata[19] = n;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -57,7 +57,7 @@ union _x17_8way_context_overlay
|
|||||||
} __attribute__ ((aligned (64)));
|
} __attribute__ ((aligned (64)));
|
||||||
typedef union _x17_8way_context_overlay x17_8way_context_overlay;
|
typedef union _x17_8way_context_overlay x17_8way_context_overlay;
|
||||||
|
|
||||||
void x17_8way_hash( void *state, const void *input )
|
int x17_8way_hash( void *state, const void *input )
|
||||||
{
|
{
|
||||||
uint64_t vhash[8*8] __attribute__ ((aligned (128)));
|
uint64_t vhash[8*8] __attribute__ ((aligned (128)));
|
||||||
uint64_t vhashA[8*8] __attribute__ ((aligned (64)));
|
uint64_t vhashA[8*8] __attribute__ ((aligned (64)));
|
||||||
@@ -230,6 +230,8 @@ void x17_8way_hash( void *state, const void *input )
|
|||||||
haval256_5_8way_init( &ctx.haval );
|
haval256_5_8way_init( &ctx.haval );
|
||||||
haval256_5_8way_update( &ctx.haval, vhashA, 64 );
|
haval256_5_8way_update( &ctx.haval, vhashA, 64 );
|
||||||
haval256_5_8way_close( &ctx.haval, state );
|
haval256_5_8way_close( &ctx.haval, state );
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_x17_8way( struct work *work, uint32_t max_nonce,
|
int scanhash_x17_8way( struct work *work, uint32_t max_nonce,
|
||||||
@@ -300,7 +302,7 @@ union _x17_4way_context_overlay
|
|||||||
};
|
};
|
||||||
typedef union _x17_4way_context_overlay x17_4way_context_overlay;
|
typedef union _x17_4way_context_overlay x17_4way_context_overlay;
|
||||||
|
|
||||||
void x17_4way_hash( void *state, const void *input )
|
int x17_4way_hash( void *state, const void *input )
|
||||||
{
|
{
|
||||||
uint64_t vhash[8*4] __attribute__ ((aligned (64)));
|
uint64_t vhash[8*4] __attribute__ ((aligned (64)));
|
||||||
uint64_t vhashA[8*4] __attribute__ ((aligned (64)));
|
uint64_t vhashA[8*4] __attribute__ ((aligned (64)));
|
||||||
@@ -399,6 +401,8 @@ void x17_4way_hash( void *state, const void *input )
|
|||||||
haval256_5_4way_init( &ctx.haval );
|
haval256_5_4way_init( &ctx.haval );
|
||||||
haval256_5_4way_update( &ctx.haval, vhashB, 64 );
|
haval256_5_4way_update( &ctx.haval, vhashB, 64 );
|
||||||
haval256_5_4way_close( &ctx.haval, state );
|
haval256_5_4way_close( &ctx.haval, state );
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_x17_4way( struct work *work, uint32_t max_nonce,
|
int scanhash_x17_4way( struct work *work, uint32_t max_nonce,
|
||||||
|
@@ -9,7 +9,6 @@ bool register_x17_algo( algo_gate_t* gate )
|
|||||||
gate->scanhash = (void*)&scanhash_x17_4way;
|
gate->scanhash = (void*)&scanhash_x17_4way;
|
||||||
gate->hash = (void*)&x17_4way_hash;
|
gate->hash = (void*)&x17_4way_hash;
|
||||||
#else
|
#else
|
||||||
gate->scanhash = (void*)&scanhash_x17;
|
|
||||||
gate->hash = (void*)&x17_hash;
|
gate->hash = (void*)&x17_hash;
|
||||||
#endif
|
#endif
|
||||||
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
||||||
|
@@ -14,20 +14,18 @@ bool register_x17_algo( algo_gate_t* gate );
|
|||||||
|
|
||||||
#if defined(X17_8WAY)
|
#if defined(X17_8WAY)
|
||||||
|
|
||||||
void x17_8way_hash( void *state, const void *input );
|
int x17_8way_hash( void *state, const void *input );
|
||||||
int scanhash_x17_8way( struct work *work, uint32_t max_nonce,
|
int scanhash_x17_8way( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
#elif defined(X17_4WAY)
|
#elif defined(X17_4WAY)
|
||||||
|
|
||||||
void x17_4way_hash( void *state, const void *input );
|
int x17_4way_hash( void *state, const void *input );
|
||||||
int scanhash_x17_4way( struct work *work, uint32_t max_nonce,
|
int scanhash_x17_4way( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void x17_hash( void *state, const void *input );
|
int x17_hash( void *state, const void *input, int thr_id );
|
||||||
int scanhash_x17( struct work *work, uint32_t max_nonce,
|
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -56,7 +56,7 @@ union _x17_context_overlay
|
|||||||
};
|
};
|
||||||
typedef union _x17_context_overlay x17_context_overlay;
|
typedef union _x17_context_overlay x17_context_overlay;
|
||||||
|
|
||||||
void x17_hash(void *output, const void *input)
|
int x17_hash(void *output, const void *input, int thr_id )
|
||||||
{
|
{
|
||||||
// unsigned char hash[64 * 4] __attribute__((aligned(64))) = {0};
|
// unsigned char hash[64 * 4] __attribute__((aligned(64))) = {0};
|
||||||
unsigned char hash[64] __attribute__((aligned(64)));
|
unsigned char hash[64] __attribute__((aligned(64)));
|
||||||
@@ -143,36 +143,8 @@ void x17_hash(void *output, const void *input)
|
|||||||
sph_haval256_5_init(&ctx.haval);
|
sph_haval256_5_init(&ctx.haval);
|
||||||
sph_haval256_5( &ctx.haval, (const void*)hash, 64 );
|
sph_haval256_5( &ctx.haval, (const void*)hash, 64 );
|
||||||
sph_haval256_5_close( &ctx.haval, output );
|
sph_haval256_5_close( &ctx.haval, output );
|
||||||
}
|
|
||||||
|
|
||||||
int scanhash_x17( struct work *work, uint32_t max_nonce,
|
return 1;
|
||||||
uint64_t *hashes_done, struct thr_info *mythr)
|
|
||||||
{
|
|
||||||
uint32_t edata[20] __attribute__((aligned(64)));
|
|
||||||
uint32_t hash64[8] __attribute__((aligned(64)));
|
|
||||||
uint32_t *pdata = work->data;
|
|
||||||
uint32_t *ptarget = work->target;
|
|
||||||
uint32_t n = pdata[19] - 1;
|
|
||||||
const uint32_t first_nonce = pdata[19];
|
|
||||||
const int thr_id = mythr->id;
|
|
||||||
const bool bench = opt_benchmark;
|
|
||||||
|
|
||||||
mm128_bswap32_80( edata, pdata );
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
edata[19] = n;
|
|
||||||
x17_hash( hash64, edata );
|
|
||||||
if ( unlikely( valid_hash( hash64, ptarget ) && !bench ) )
|
|
||||||
{
|
|
||||||
pdata[19] = bswap_32( n );
|
|
||||||
submit_solution( work, hash64, mythr );
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
} while ( n < max_nonce && !work_restart[thr_id].restart );
|
|
||||||
*hashes_done = n - first_nonce;
|
|
||||||
pdata[19] = n;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -57,7 +57,7 @@ union _xevan_8way_context_overlay
|
|||||||
} __attribute__ ((aligned (64)));
|
} __attribute__ ((aligned (64)));
|
||||||
typedef union _xevan_8way_context_overlay xevan_8way_context_overlay;
|
typedef union _xevan_8way_context_overlay xevan_8way_context_overlay;
|
||||||
|
|
||||||
void xevan_8way_hash( void *output, const void *input )
|
int xevan_8way_hash( void *output, const void *input )
|
||||||
{
|
{
|
||||||
uint64_t vhash[16<<3] __attribute__ ((aligned (128)));
|
uint64_t vhash[16<<3] __attribute__ ((aligned (128)));
|
||||||
uint64_t vhashA[16<<3] __attribute__ ((aligned (64)));
|
uint64_t vhashA[16<<3] __attribute__ ((aligned (64)));
|
||||||
@@ -395,6 +395,8 @@ void xevan_8way_hash( void *output, const void *input )
|
|||||||
haval256_5_8way_init( &ctx.haval );
|
haval256_5_8way_init( &ctx.haval );
|
||||||
haval256_5_8way_update( &ctx.haval, vhashA, dataLen );
|
haval256_5_8way_update( &ctx.haval, vhashA, dataLen );
|
||||||
haval256_5_8way_close( &ctx.haval, output );
|
haval256_5_8way_close( &ctx.haval, output );
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_xevan_8way( struct work *work, uint32_t max_nonce,
|
int scanhash_xevan_8way( struct work *work, uint32_t max_nonce,
|
||||||
@@ -465,7 +467,7 @@ union _xevan_4way_context_overlay
|
|||||||
};
|
};
|
||||||
typedef union _xevan_4way_context_overlay xevan_4way_context_overlay;
|
typedef union _xevan_4way_context_overlay xevan_4way_context_overlay;
|
||||||
|
|
||||||
void xevan_4way_hash( void *output, const void *input )
|
int xevan_4way_hash( void *output, const void *input )
|
||||||
{
|
{
|
||||||
uint64_t hash0[16] __attribute__ ((aligned (64)));
|
uint64_t hash0[16] __attribute__ ((aligned (64)));
|
||||||
uint64_t hash1[16] __attribute__ ((aligned (64)));
|
uint64_t hash1[16] __attribute__ ((aligned (64)));
|
||||||
@@ -666,6 +668,8 @@ void xevan_4way_hash( void *output, const void *input )
|
|||||||
haval256_5_4way_init( &ctx.haval );
|
haval256_5_4way_init( &ctx.haval );
|
||||||
haval256_5_4way_update( &ctx.haval, vhashA, dataLen );
|
haval256_5_4way_update( &ctx.haval, vhashA, dataLen );
|
||||||
haval256_5_4way_close( &ctx.haval, output );
|
haval256_5_4way_close( &ctx.haval, output );
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanhash_xevan_4way( struct work *work, uint32_t max_nonce,
|
int scanhash_xevan_4way( struct work *work, uint32_t max_nonce,
|
||||||
|
@@ -10,7 +10,6 @@ bool register_xevan_algo( algo_gate_t* gate )
|
|||||||
gate->hash = (void*)&xevan_4way_hash;
|
gate->hash = (void*)&xevan_4way_hash;
|
||||||
#else
|
#else
|
||||||
init_xevan_ctx();
|
init_xevan_ctx();
|
||||||
gate->scanhash = (void*)&scanhash_xevan;
|
|
||||||
gate->hash = (void*)&xevan_hash;
|
gate->hash = (void*)&xevan_hash;
|
||||||
#endif
|
#endif
|
||||||
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
gate->optimizations = SSE2_OPT | AES_OPT | AVX2_OPT | AVX512_OPT | VAES_OPT;
|
||||||
|
@@ -14,14 +14,12 @@ bool register_xevan_algo( algo_gate_t* gate );
|
|||||||
|
|
||||||
#if defined(XEVAN_8WAY)
|
#if defined(XEVAN_8WAY)
|
||||||
|
|
||||||
void xevan_8way_hash( void *state, const void *input );
|
int xevan_8way_hash( void *state, const void *input );
|
||||||
|
|
||||||
int scanhash_xevan_8way( struct work *work, uint32_t max_nonce,
|
int scanhash_xevan_8way( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
#elif defined(XEVAN_4WAY)
|
#elif defined(XEVAN_4WAY)
|
||||||
|
|
||||||
void xevan_4way_hash( void *state, const void *input );
|
int xevan_4way_hash( void *state, const void *input );
|
||||||
|
|
||||||
int scanhash_xevan_4way( struct work *work, uint32_t max_nonce,
|
int scanhash_xevan_4way( struct work *work, uint32_t max_nonce,
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
uint64_t *hashes_done, struct thr_info *mythr );
|
||||||
|
|
||||||
@@ -29,11 +27,7 @@ int scanhash_xevan_4way( struct work *work, uint32_t max_nonce,
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
void xevan_hash( void *state, const void *input );
|
int xevan_hash( void *state, const void *input, int trh_id );
|
||||||
|
|
||||||
int scanhash_xevan( struct work *work, uint32_t max_nonce,
|
|
||||||
uint64_t *hashes_done, struct thr_info *mythr );
|
|
||||||
|
|
||||||
void init_xevan_ctx();
|
void init_xevan_ctx();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -83,7 +83,7 @@ void init_xevan_ctx()
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void xevan_hash(void *output, const void *input)
|
int xevan_hash(void *output, const void *input, int thr_id )
|
||||||
{
|
{
|
||||||
uint32_t _ALIGN(64) hash[32]; // 128 bytes required
|
uint32_t _ALIGN(64) hash[32]; // 128 bytes required
|
||||||
const int dataLen = 128;
|
const int dataLen = 128;
|
||||||
@@ -218,36 +218,8 @@ void xevan_hash(void *output, const void *input)
|
|||||||
sph_haval256_5_close(&ctx.haval, hash);
|
sph_haval256_5_close(&ctx.haval, hash);
|
||||||
|
|
||||||
memcpy(output, hash, 32);
|
memcpy(output, hash, 32);
|
||||||
}
|
|
||||||
|
|
||||||
int scanhash_xevan( struct work *work, uint32_t max_nonce,
|
return 1;
|
||||||
uint64_t *hashes_done, struct thr_info *mythr)
|
|
||||||
{
|
|
||||||
uint32_t edata[20] __attribute__((aligned(64)));
|
|
||||||
uint32_t hash64[8] __attribute__((aligned(64)));
|
|
||||||
uint32_t *pdata = work->data;
|
|
||||||
uint32_t *ptarget = work->target;
|
|
||||||
uint32_t n = pdata[19];
|
|
||||||
const uint32_t first_nonce = pdata[19];
|
|
||||||
const int thr_id = mythr->id;
|
|
||||||
const bool bench = opt_benchmark;
|
|
||||||
|
|
||||||
mm128_bswap32_80( edata, pdata );
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
edata[19] = n;
|
|
||||||
xevan_hash( hash64, edata );
|
|
||||||
if ( unlikely( valid_hash( hash64, ptarget ) && !bench ) )
|
|
||||||
{
|
|
||||||
pdata[19] = bswap_32( n );
|
|
||||||
submit_solution( work, hash64, mythr );
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
} while ( n < max_nonce && !work_restart[thr_id].restart );
|
|
||||||
pdata[19] = n;
|
|
||||||
*hashes_done = n - first_nonce;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -445,7 +445,7 @@ bool register_yescrypt_algo( algo_gate_t* gate )
|
|||||||
|
|
||||||
YESCRYPT_P = 1;
|
YESCRYPT_P = 1;
|
||||||
|
|
||||||
applog( LOG_NOTICE,"Yescrypt parameters: N= %d, R= %d.", YESCRYPT_N,
|
applog( LOG_NOTICE,"Yescrypt parameters: N= %d, R= %d", YESCRYPT_N,
|
||||||
YESCRYPT_R );
|
YESCRYPT_R );
|
||||||
if ( yescrypt_client_key )
|
if ( yescrypt_client_key )
|
||||||
applog( LOG_NOTICE,"Key= \"%s\"\n", yescrypt_client_key );
|
applog( LOG_NOTICE,"Key= \"%s\"\n", yescrypt_client_key );
|
||||||
|
@@ -139,7 +139,7 @@ bool register_yespower_algo( algo_gate_t* gate )
|
|||||||
yespower_params.perslen = 0;
|
yespower_params.perslen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
applog( LOG_NOTICE,"Yespower parameters: N= %d, R= %d.", yespower_params.N,
|
applog( LOG_NOTICE,"Yespower parameters: N= %d, R= %d", yespower_params.N,
|
||||||
yespower_params.r );
|
yespower_params.r );
|
||||||
if ( yespower_params.pers )
|
if ( yespower_params.pers )
|
||||||
applog( LOG_NOTICE,"Key= \"%s\"\n", yespower_params.pers );
|
applog( LOG_NOTICE,"Key= \"%s\"\n", yespower_params.pers );
|
||||||
@@ -264,7 +264,7 @@ bool register_power2b_algo( algo_gate_t* gate )
|
|||||||
yespower_params.pers = "Now I am become Death, the destroyer of worlds";
|
yespower_params.pers = "Now I am become Death, the destroyer of worlds";
|
||||||
yespower_params.perslen = 46;
|
yespower_params.perslen = 46;
|
||||||
|
|
||||||
applog( LOG_NOTICE,"yespower-b2b parameters: N= %d, R= %d.", yespower_params.N,
|
applog( LOG_NOTICE,"yespower-b2b parameters: N= %d, R= %d", yespower_params.N,
|
||||||
yespower_params.r );
|
yespower_params.r );
|
||||||
applog( LOG_NOTICE,"Key= \"%s\"", yespower_params.pers );
|
applog( LOG_NOTICE,"Key= \"%s\"", yespower_params.pers );
|
||||||
applog( LOG_NOTICE,"Key length= %d\n", yespower_params.perslen );
|
applog( LOG_NOTICE,"Key length= %d\n", yespower_params.perslen );
|
||||||
|
@@ -76,7 +76,7 @@ typedef struct {
|
|||||||
unsigned char uc[32];
|
unsigned char uc[32];
|
||||||
} yespower_binary_t __attribute__ ((aligned (64)));
|
} yespower_binary_t __attribute__ ((aligned (64)));
|
||||||
|
|
||||||
yespower_params_t yespower_params;
|
extern yespower_params_t yespower_params;
|
||||||
|
|
||||||
//SHA256_CTX sha256_prehash_ctx;
|
//SHA256_CTX sha256_prehash_ctx;
|
||||||
extern __thread SHA256_CTX sha256_prehash_ctx;
|
extern __thread SHA256_CTX sha256_prehash_ctx;
|
||||||
|
@@ -9,15 +9,15 @@ rm cpuminer-avx512-sha-vaes cpuminer-avx512 cpuminer-avx2 cpuminer-aes-avx cpumi
|
|||||||
make distclean || echo clean
|
make distclean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
./autogen.sh || echo done
|
./autogen.sh || echo done
|
||||||
CFLAGS="-O3 -march=icelake-client -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=icelake-client -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-avx512-sha-vaes.exe
|
mv cpuminer.exe cpuminer-avx512-sha-vaes.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
mv cpuminer cpuminer-avx512-sha-vaes
|
mv cpuminer cpuminer-avx512-sha-vaes
|
||||||
|
|
||||||
CFLAGS="-O3 -march=skylake-avx512 -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=skylake-avx512 -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-avx512.exe
|
mv cpuminer.exe cpuminer-avx512.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
@@ -26,8 +26,8 @@ mv cpuminer cpuminer-avx512
|
|||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
# GCC 9 doesn't include AES with core-avx2
|
# GCC 9 doesn't include AES with core-avx2
|
||||||
CFLAGS="-O3 -march=core-avx2 -maes -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=core-avx2 -maes -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-avx2.exe
|
mv cpuminer.exe cpuminer-avx2.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
@@ -35,17 +35,17 @@ mv cpuminer cpuminer-avx2
|
|||||||
|
|
||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=corei7-avx -maes -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=corei7-avx -maes -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-avx.exe
|
mv cpuminer.exe cpuminer-avx.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
mv cpuminer cpuminer-aes-avx
|
mv cpuminer cpuminer-avx
|
||||||
|
|
||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -maes -msse4.2 -Wall" ./configure --with-curl
|
CFLAGS="-O3 -maes -msse4.2 -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-aes-sse42.exe
|
mv cpuminer.exe cpuminer-aes-sse42.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
@@ -53,8 +53,8 @@ mv cpuminer cpuminer-aes-sse42
|
|||||||
|
|
||||||
#make clean || echo clean
|
#make clean || echo clean
|
||||||
#rm -f config.status
|
#rm -f config.status
|
||||||
#CFLAGS="-O3 -march=corei7 -Wall" ./configure --with-curl
|
#CFLAGS="-O3 -march=corei7 -Wall -fno-common" ./configure --with-curl
|
||||||
#make -j 16
|
#make -j 8
|
||||||
#strip -s cpuminer.exe
|
#strip -s cpuminer.exe
|
||||||
#mv cpuminer.exe cpuminer-sse42.exe
|
#mv cpuminer.exe cpuminer-sse42.exe
|
||||||
#strip -s cpuminer
|
#strip -s cpuminer
|
||||||
@@ -62,8 +62,8 @@ mv cpuminer cpuminer-aes-sse42
|
|||||||
|
|
||||||
#make clean || echo clean
|
#make clean || echo clean
|
||||||
#rm -f config.status
|
#rm -f config.status
|
||||||
#CFLAGS="-O3 -march=core2 -Wall" ./configure --with-curl
|
#CFLAGS="-O3 -march=core2 -Wall -fno-common" ./configure --with-curl
|
||||||
#make -j 16
|
#make -j 8
|
||||||
#strip -s cpuminer.exe
|
#strip -s cpuminer.exe
|
||||||
#mv cpuminer.exe cpuminer-ssse3.exe
|
#mv cpuminer.exe cpuminer-ssse3.exe
|
||||||
#strip -s cpuminer
|
#strip -s cpuminer
|
||||||
@@ -71,8 +71,8 @@ mv cpuminer cpuminer-aes-sse42
|
|||||||
|
|
||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -msse2 -Wall" ./configure --with-curl
|
CFLAGS="-O3 -msse2 -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-sse2.exe
|
mv cpuminer.exe cpuminer-sse2.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
@@ -80,8 +80,8 @@ mv cpuminer cpuminer-sse2
|
|||||||
|
|
||||||
make clean || echo done
|
make clean || echo done
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=znver1 -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=znver1 -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe cpuminer-zen.exe
|
mv cpuminer.exe cpuminer-zen.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
@@ -89,8 +89,8 @@ mv cpuminer cpuminer-zen
|
|||||||
|
|
||||||
make clean || echo done
|
make clean || echo done
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=native -Wall" ./configure --with-curl
|
CFLAGS="-O3 -march=native -Wall -fno-common" ./configure --with-curl
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
strip -s cpuminer
|
strip -s cpuminer
|
||||||
|
|
||||||
|
27
build-no-common.sh
Executable file
27
build-no-common.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#if [ "$OS" = "Windows_NT" ]; then
|
||||||
|
# ./mingw64.sh
|
||||||
|
# exit 0
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# Linux build
|
||||||
|
|
||||||
|
make distclean || echo clean
|
||||||
|
|
||||||
|
rm -f config.status
|
||||||
|
./autogen.sh || echo done
|
||||||
|
|
||||||
|
# Ubuntu 10.04 (gcc 4.4)
|
||||||
|
# extracflags="-O3 -march=native -Wall -D_REENTRANT -funroll-loops -fvariable-expansion-in-unroller -fmerge-all-constants -fbranch-target-load-optimize2 -fsched2-use-superblocks -falign-loops=16 -falign-functions=16 -falign-jumps=16 -falign-labels=16"
|
||||||
|
|
||||||
|
# Debian 7.7 / Ubuntu 14.04 (gcc 4.7+)
|
||||||
|
#extracflags="$extracflags -Ofast -flto -fuse-linker-plugin -ftree-loop-if-convert-stores"
|
||||||
|
|
||||||
|
#CFLAGS="-O3 -march=native -Wall" ./configure --with-curl --with-crypto=$HOME/usr
|
||||||
|
CFLAGS="-O3 -march=native -Wall -fno-common" ./configure --with-curl
|
||||||
|
#CFLAGS="-O3 -march=native -Wall" CXXFLAGS="$CFLAGS -std=gnu++11" ./configure --with-curl
|
||||||
|
|
||||||
|
make -j 4
|
||||||
|
|
||||||
|
strip -s cpuminer
|
@@ -3,8 +3,8 @@
|
|||||||
# imake clean and rm all the targetted executables.
|
# imake clean and rm all the targetted executables.
|
||||||
# tips to users.
|
# tips to users.
|
||||||
|
|
||||||
rm cpuminer-avx512-sha-vaes cpuminer-avx512 cpuminer-avx2 cpuminer-aes-avx cpuminer-aes-sse42 cpuminer-sse2 cpuminer-zen > /dev/null
|
rm cpuminer-avx512-sha-vaes cpuminer-avx512 cpuminer-avx2 cpuminer-avx cpuminer-aes-sse42 cpuminer-sse2 cpuminer-zen > /dev/null
|
||||||
|
|
||||||
rm cpuminer-avx512-sha-vaes.exe cpuminer-avx512.exe cpuminer-avx2.exe cpuminer-aes-avx.exe cpuminer-aes-sse42.exe cpuminer-sse2.exe cpuminer-zen.exe > /dev/null
|
rm cpuminer-avx512-sha-vaes.exe cpuminer-avx512.exe cpuminer-avx2.exe cpuminer-avx.exe cpuminer-aes-sse42.exe cpuminer-sse2.exe cpuminer-zen.exe > /dev/null
|
||||||
|
|
||||||
make distclean > /dev/null
|
make distclean > /dev/null
|
||||||
|
20
configure
vendored
20
configure
vendored
@@ -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.13.0.1.
|
# Generated by GNU Autoconf 2.69 for cpuminer-opt 3.13.1.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.13.0.1'
|
PACKAGE_VERSION='3.13.1.1'
|
||||||
PACKAGE_STRING='cpuminer-opt 3.13.0.1'
|
PACKAGE_STRING='cpuminer-opt 3.13.1.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.13.0.1 to adapt to many kinds of systems.
|
\`configure' configures cpuminer-opt 3.13.1.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.13.0.1:";;
|
short | recursive ) echo "Configuration of cpuminer-opt 3.13.1.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.13.0.1
|
cpuminer-opt configure 3.13.1.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.13.0.1, which was
|
It was created by cpuminer-opt $as_me 3.13.1.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.13.0.1'
|
VERSION='3.13.1.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.13.0.1, which was
|
This file was extended by cpuminer-opt $as_me 3.13.1.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.13.0.1
|
cpuminer-opt config.status 3.13.1.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\\"
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT([cpuminer-opt], [3.13.0.1])
|
AC_INIT([cpuminer-opt], [3.13.1.1])
|
||||||
|
|
||||||
AC_PREREQ([2.59c])
|
AC_PREREQ([2.59c])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
@@ -55,9 +55,12 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// GCC 9 warning sysctl.h is deprecated
|
// GCC 9 warning sysctl.h is deprecated
|
||||||
|
#if ( __GNUC__ < 9 )
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
#endif // HAVE_SYS_SYSCTL_H
|
||||||
|
#endif // _MSC_VER ELSE
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
15
miner.h
15
miner.h
@@ -324,12 +324,12 @@ int timeval_subtract( struct timeval *result, struct timeval *x,
|
|||||||
|
|
||||||
#define EXP16 65536.
|
#define EXP16 65536.
|
||||||
#define EXP32 4294967296.
|
#define EXP32 4294967296.
|
||||||
const long double exp32; // 2**32
|
extern const long double exp32; // 2**32
|
||||||
const long double exp48; // 2**48
|
extern const long double exp48; // 2**48
|
||||||
const long double exp64; // 2**64
|
extern const long double exp64; // 2**64
|
||||||
const long double exp96; // 2**96
|
extern const long double exp96; // 2**96
|
||||||
const long double exp128; // 2**128
|
extern const long double exp128; // 2**128
|
||||||
const long double exp160; // 2**160
|
extern const long double exp160; // 2**160
|
||||||
|
|
||||||
bool fulltest( const uint32_t *hash, const uint32_t *target );
|
bool fulltest( const uint32_t *hash, const uint32_t *target );
|
||||||
bool valid_hash( const void*, const void* );
|
bool valid_hash( const void*, const void* );
|
||||||
@@ -554,6 +554,7 @@ enum algos {
|
|||||||
ALGO_LYRA2Z,
|
ALGO_LYRA2Z,
|
||||||
ALGO_LYRA2Z330,
|
ALGO_LYRA2Z330,
|
||||||
ALGO_M7M,
|
ALGO_M7M,
|
||||||
|
ALGO_MINOTAUR,
|
||||||
ALGO_MYR_GR,
|
ALGO_MYR_GR,
|
||||||
ALGO_NEOSCRYPT,
|
ALGO_NEOSCRYPT,
|
||||||
ALGO_NIST5,
|
ALGO_NIST5,
|
||||||
@@ -645,6 +646,7 @@ static const char* const algo_names[] = {
|
|||||||
"lyra2z",
|
"lyra2z",
|
||||||
"lyra2z330",
|
"lyra2z330",
|
||||||
"m7m",
|
"m7m",
|
||||||
|
"minotaur",
|
||||||
"myr-gr",
|
"myr-gr",
|
||||||
"neoscrypt",
|
"neoscrypt",
|
||||||
"nist5",
|
"nist5",
|
||||||
@@ -802,6 +804,7 @@ Options:\n\
|
|||||||
lyra2z330 Lyra2 330 rows\n\
|
lyra2z330 Lyra2 330 rows\n\
|
||||||
m7m Magi (XMG)\n\
|
m7m Magi (XMG)\n\
|
||||||
myr-gr Myriad-Groestl\n\
|
myr-gr Myriad-Groestl\n\
|
||||||
|
minotaur Ringcoin (RNG)\n\
|
||||||
neoscrypt NeoScrypt(128, 2, 1)\n\
|
neoscrypt NeoScrypt(128, 2, 1)\n\
|
||||||
nist5 Nist5\n\
|
nist5 Nist5\n\
|
||||||
pentablake 5 x blake512\n\
|
pentablake 5 x blake512\n\
|
||||||
|
@@ -44,14 +44,14 @@ cp $LOCAL_LIB/curl/lib/.libs/libcurl-4.dll release/
|
|||||||
rm -f config.status
|
rm -f config.status
|
||||||
./autogen.sh || echo done
|
./autogen.sh || echo done
|
||||||
CFLAGS="-O3 -march=icelake-client -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=icelake-client -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-avx512-sha-vaes.exe
|
mv cpuminer.exe release/cpuminer-avx512-sha-vaes.exe
|
||||||
|
|
||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=znver1 -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=znver1 -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-zen.exe
|
mv cpuminer.exe release/cpuminer-zen.exe
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ make clean || echo clean
|
|||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=skylake-avx512 -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=skylake-avx512 -Wall" ./configure $CONFIGURE_ARGS
|
||||||
#CFLAGS="-O3 -march=skylake-avx512 -Wall -fno-asynchronous-unwind-tables" ./configure $CONFIGURE_ARGS
|
#CFLAGS="-O3 -march=skylake-avx512 -Wall -fno-asynchronous-unwind-tables" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-avx512.exe
|
mv cpuminer.exe release/cpuminer-avx512.exe
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ make clean || echo clean
|
|||||||
rm -f config.status
|
rm -f config.status
|
||||||
# GCC 9 doesn't include AES in -march=core-avx2
|
# GCC 9 doesn't include AES in -march=core-avx2
|
||||||
CFLAGS="-O3 -march=core-avx2 -maes -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=core-avx2 -maes -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-avx2.exe
|
mv cpuminer.exe release/cpuminer-avx2.exe
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ make clean || echo clean
|
|||||||
rm -f config.status
|
rm -f config.status
|
||||||
# -march=corei7-avx still includes aes, but just in case
|
# -march=corei7-avx still includes aes, but just in case
|
||||||
CFLAGS="-O3 -march=corei7-avx -maes -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=corei7-avx -maes -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-avx.exe
|
mv cpuminer.exe release/cpuminer-avx.exe
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ make clean || echo clean
|
|||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -march=westmere -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -march=westmere -Wall" ./configure $CONFIGURE_ARGS
|
||||||
#CFLAGS="-O3 -maes -msse4.2 -Wall" ./configure $CONFIGURE_ARGS
|
#CFLAGS="-O3 -maes -msse4.2 -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-aes-sse42.exe
|
mv cpuminer.exe release/cpuminer-aes-sse42.exe
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ mv cpuminer.exe release/cpuminer-aes-sse42.exe
|
|||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
rm -f config.status
|
rm -f config.status
|
||||||
CFLAGS="-O3 -msse2 -Wall" ./configure $CONFIGURE_ARGS
|
CFLAGS="-O3 -msse2 -Wall" ./configure $CONFIGURE_ARGS
|
||||||
make -j 16
|
make -j 8
|
||||||
strip -s cpuminer.exe
|
strip -s cpuminer.exe
|
||||||
mv cpuminer.exe release/cpuminer-sse2.exe
|
mv cpuminer.exe release/cpuminer-sse2.exe
|
||||||
make clean || echo clean
|
make clean || echo clean
|
||||||
|
Reference in New Issue
Block a user