Browse Source

Merge branch 'device_refactor' of https://github.com/luke-jr/cgminer into fpga

nfactor-troky
ckolivas 13 years ago
parent
commit
9eb3ac426b
  1. 9
      adl.c
  2. 12
      api.c
  3. 1610
      main.c
  4. 82
      miner.h
  5. 19
      sha256_4way.c
  6. 19
      sha256_altivec_4way.c
  7. 20
      sha256_cryptopp.c
  8. 10
      sha256_generic.c
  9. 23
      sha256_sse2_amd64.c
  10. 25
      sha256_sse2_i386.c
  11. 23
      sha256_sse4_amd64.c
  12. 10
      sha256_via.c

9
adl.c

@ -212,6 +212,15 @@ void init_adl(int nDevs)
continue; continue;
} }
if (!gpus[gpu].enabled) {
gpus[i].gpu_engine =
gpus[i].gpu_memclock =
gpus[i].gpu_vddc =
gpus[i].gpu_fan =
gpus[i].gpu_powertune = 0;
continue;
}
gpus[gpu].has_adl = true; gpus[gpu].has_adl = true;
/* Flag adl as active if any card is successfully activated */ /* Flag adl as active if any card is successfully activated */
adl_active = true; adl_active = true;

12
api.c

@ -387,7 +387,7 @@ void gpustatus(int gpu, bool isjson)
#endif #endif
gt = gv = gm = gc = ga = gf = gp = pt = 0; gt = gv = gm = gc = ga = gf = gp = pt = 0;
if (gpu_devices[gpu]) if (cgpu->enabled)
enabled = (char *)YES; enabled = (char *)YES;
else else
enabled = (char *)NO; enabled = (char *)NO;
@ -662,13 +662,13 @@ void gpuenable(SOCKETTYPE c, char *param, bool isjson)
return; return;
} }
if (gpu_devices[id]) { if (gpus[id].enabled) {
strcpy(io_buffer, message(MSG_ALRENA, id, isjson)); strcpy(io_buffer, message(MSG_ALRENA, id, isjson));
return; return;
} }
for (i = 0; i < gpu_threads; i++) { for (i = 0; i < gpu_threads; i++) {
gpu = thr_info[i].cgpu->cpu_gpu; gpu = thr_info[i].cgpu->device_id;
if (gpu == id) { if (gpu == id) {
thr = &thr_info[i]; thr = &thr_info[i];
if (thr->cgpu->status != LIFE_WELL) { if (thr->cgpu->status != LIFE_WELL) {
@ -676,7 +676,7 @@ void gpuenable(SOCKETTYPE c, char *param, bool isjson)
return; return;
} }
gpu_devices[id] = true; gpus[id].enabled = true;
tq_push(thr->q, &ping); tq_push(thr->q, &ping);
} }
@ -705,12 +705,12 @@ void gpudisable(SOCKETTYPE c, char *param, bool isjson)
return; return;
} }
if (!gpu_devices[id]) { if (!gpus[id].enabled) {
strcpy(io_buffer, message(MSG_ALRDIS, id, isjson)); strcpy(io_buffer, message(MSG_ALRDIS, id, isjson));
return; return;
} }
gpu_devices[id] = false; gpus[id].enabled = false;
strcpy(io_buffer, message(MSG_GPUDIS, id, isjson)); strcpy(io_buffer, message(MSG_GPUDIS, id, isjson));
} }

1610
main.c

File diff suppressed because it is too large Load Diff

82
miner.h

@ -208,9 +208,35 @@ struct gpu_adl {
}; };
#endif #endif
struct cgpu_info;
struct thr_info;
struct work;
struct device_api {
char*name;
// API-global functions
void (*api_detect)();
// Device-specific functions
void (*reinit_device)(struct cgpu_info*);
void (*get_statline)(char*, struct cgpu_info*);
// Thread-specific functions
bool (*thread_prepare)(struct thr_info*);
uint64_t (*can_limit_work)(struct thr_info*);
bool (*thread_init)(struct thr_info*);
void (*free_work)(struct thr_info*, struct work*);
bool (*prepare_work)(struct thr_info*, struct work*);
uint64_t (*scanhash)(struct thr_info*, struct work*, uint64_t);
void (*thread_shutdown)(struct thr_info*);
};
struct cgpu_info { struct cgpu_info {
int is_gpu; int cgminer_id;
int cpu_gpu; struct device_api *api;
int device_id;
bool enabled;
int accepted; int accepted;
int rejected; int rejected;
int hw_errors; int hw_errors;
@ -221,6 +247,8 @@ struct cgpu_info {
char init[40]; char init[40];
struct timeval last_message_tv; struct timeval last_message_tv;
int threads;
bool dynamic; bool dynamic;
int intensity; int intensity;
#ifdef HAVE_ADL #ifdef HAVE_ADL
@ -257,6 +285,7 @@ struct thr_info {
pthread_t pth; pthread_t pth;
struct thread_q *q; struct thread_q *q;
struct cgpu_info *cgpu; struct cgpu_info *cgpu;
void *cgpu_data;
struct timeval last; struct timeval last;
struct timeval sick; struct timeval sick;
@ -352,57 +381,62 @@ extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
extern char *bin2hex(const unsigned char *p, size_t len); extern char *bin2hex(const unsigned char *p, size_t len);
extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len); extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
extern unsigned int ScanHash_4WaySSE2(int, const unsigned char *pmidstate, typedef bool (*sha256_func)(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t nonce);
extern unsigned int ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t nonce); uint32_t max_nonce,
uint32_t *last_nonce,
uint32_t nonce);
extern unsigned int scanhash_sse2_amd64(int, const unsigned char *pmidstate, extern bool ScanHash_4WaySSE2(int, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *phash1, unsigned char *phash, unsigned char *pdata, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone); uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
extern bool scanhash_via(int, unsigned char *data_inout, extern bool ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata,
unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget,
uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
extern bool scanhash_via(int, const unsigned char *pmidstate,
unsigned char *pdata,
unsigned char *phash1, unsigned char *phash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t n); uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
extern bool scanhash_c(int, const unsigned char *midstate, unsigned char *data, extern bool scanhash_c(int, const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t n); uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
extern bool scanhash_cryptopp(int, const unsigned char *midstate,unsigned char *data, extern bool scanhash_cryptopp(int, const unsigned char *midstate,unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t n); uint32_t max_nonce, uint32_t *last_nonce, uint32_t n);
extern bool scanhash_asm32(int, const unsigned char *midstate,unsigned char *data, extern bool scanhash_asm32(int, const unsigned char *midstate,unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t nonce); uint32_t max_nonce, uint32_t *last_nonce, uint32_t nonce);
extern int scanhash_sse2_64(int, const unsigned char *pmidstate, unsigned char *pdata, extern bool scanhash_sse2_64(int, const unsigned char *pmidstate, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce); uint32_t nonce);
extern int scanhash_sse4_64(int, const unsigned char *pmidstate, unsigned char *pdata, extern bool scanhash_sse4_64(int, const unsigned char *pmidstate, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce); uint32_t nonce);
extern int scanhash_sse2_32(int, const unsigned char *pmidstate, unsigned char *pdata, extern bool scanhash_sse2_32(int, const unsigned char *pmidstate, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce); uint32_t nonce);
extern int extern int
@ -431,6 +465,7 @@ extern bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, flo
extern void api(void); extern void api(void);
#define MAX_GPUDEVICES 16 #define MAX_GPUDEVICES 16
#define MAX_DEVICES 32
#define MAX_POOLS (32) #define MAX_POOLS (32)
extern int nDevs; extern int nDevs;
@ -444,9 +479,10 @@ extern struct work_restart *work_restart;
extern struct cgpu_info gpus[MAX_GPUDEVICES]; extern struct cgpu_info gpus[MAX_GPUDEVICES];
extern int gpu_threads; extern int gpu_threads;
extern double total_secs; extern double total_secs;
extern bool gpu_devices[MAX_GPUDEVICES];
extern int mining_threads; extern int mining_threads;
extern struct cgpu_info *cpus; extern struct cgpu_info *cpus;
extern int total_devices;
extern struct cgpu_info *devices[];
extern int total_pools; extern int total_pools;
extern struct pool *pools[MAX_POOLS]; extern struct pool *pools[MAX_POOLS];
extern const char *algo_names[]; extern const char *algo_names[];

19
sha256_4way.c

@ -101,14 +101,16 @@ static const unsigned int pSHA256InitState[8] =
{0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
unsigned int ScanHash_4WaySSE2(int thr_id, const unsigned char *pmidstate, bool ScanHash_4WaySSE2(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce) uint32_t nonce)
{ {
unsigned int *nNonce_p = (unsigned int*)(pdata + 12); unsigned int *nNonce_p = (unsigned int*)(pdata + 76);
pdata += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
@ -132,17 +134,18 @@ unsigned int ScanHash_4WaySSE2(int thr_id, const unsigned char *pmidstate,
((unsigned int*)phash)[i] = thash[i][j]; ((unsigned int*)phash)[i] = thash[i][j];
if (fulltest(phash, ptarget)) { if (fulltest(phash, ptarget)) {
*nHashesDone = nonce; nonce += j;
*nNonce_p = nonce + j; *last_nonce = nonce;
return nonce + j; *nNonce_p = nonce;
return true;
} }
} }
} }
if ((nonce >= max_nonce) || work_restart[thr_id].restart) if ((nonce >= max_nonce) || work_restart[thr_id].restart)
{ {
*nHashesDone = nonce; *last_nonce = nonce;
return -1; return false;
} }
} }
} }

19
sha256_altivec_4way.c

@ -74,14 +74,16 @@ static const unsigned int pSHA256InitState[8] =
{0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
unsigned int ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate, bool ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce) uint32_t nonce)
{ {
unsigned int *nNonce_p = (unsigned int*)(pdata + 12); unsigned int *nNonce_p = (unsigned int*)(pdata + 76);
pdata += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
@ -104,17 +106,18 @@ unsigned int ScanHash_altivec_4way(int thr_id, const unsigned char *pmidstate,
((unsigned int*)phash)[i] = thash[i][j]; ((unsigned int*)phash)[i] = thash[i][j];
if (fulltest(phash, ptarget)) { if (fulltest(phash, ptarget)) {
*nHashesDone = nonce; nonce += j;
*nNonce_p = nonce + j; *last_nonce = nonce;
return nonce + j; *nNonce_p = nonce;
return true;
} }
} }
} }
if ((nonce >= max_nonce) || work_restart[thr_id].restart) if ((nonce >= max_nonce) || work_restart[thr_id].restart)
{ {
*nHashesDone = nonce; *last_nonce = nonce;
return -1; return false;
} }
nonce += NPAR; nonce += NPAR;

20
sha256_cryptopp.c

@ -97,11 +97,13 @@ bool scanhash_cryptopp(int thr_id, const unsigned char *midstate,
unsigned char *data, unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t n) uint32_t n)
{ {
uint32_t *hash32 = (uint32_t *) hash; uint32_t *hash32 = (uint32_t *) hash;
uint32_t *nonce = (uint32_t *)(data + 12); uint32_t *nonce = (uint32_t *)(data + 76);
data += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
@ -113,12 +115,12 @@ bool scanhash_cryptopp(int thr_id, const unsigned char *midstate,
runhash(hash, hash1, sha256_init_state); runhash(hash, hash1, sha256_init_state);
if (unlikely((hash32[7] == 0) && fulltest(hash, target))) { if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
*hashes_done = n; *last_nonce = n;
return true; return true;
} }
if ((n >= max_nonce) || work_restart[thr_id].restart) { if ((n >= max_nonce) || work_restart[thr_id].restart) {
*hashes_done = n; *last_nonce = n;
return false; return false;
} }
} }
@ -579,11 +581,13 @@ bool scanhash_asm32(int thr_id, const unsigned char *midstate,
unsigned char *data, unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t n) uint32_t n)
{ {
uint32_t *hash32 = (uint32_t *) hash; uint32_t *hash32 = (uint32_t *) hash;
uint32_t *nonce = (uint32_t *)(data + 12); uint32_t *nonce = (uint32_t *)(data + 76);
data += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
@ -595,12 +599,12 @@ bool scanhash_asm32(int thr_id, const unsigned char *midstate,
runhash32(hash, hash1, sha256_init_state); runhash32(hash, hash1, sha256_init_state);
if (unlikely((hash32[7] == 0) && fulltest(hash, target))) { if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
*hashes_done = n; *last_nonce = n;
return true; return true;
} }
if ((n >= max_nonce) || work_restart[thr_id].restart) { if ((n >= max_nonce) || work_restart[thr_id].restart) {
*hashes_done = n; *last_nonce = n;
return false; return false;
} }
} }

10
sha256_generic.c

@ -242,13 +242,15 @@ const uint32_t sha256_init_state[8] = {
bool scanhash_c(int thr_id, const unsigned char *midstate, unsigned char *data, bool scanhash_c(int thr_id, const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash, unsigned char *hash1, unsigned char *hash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t n) uint32_t n)
{ {
uint32_t *hash32 = (uint32_t *) hash; uint32_t *hash32 = (uint32_t *) hash;
uint32_t *nonce = (uint32_t *)(data + 12); uint32_t *nonce = (uint32_t *)(data + 76);
unsigned long stat_ctr = 0; unsigned long stat_ctr = 0;
data += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
while (1) { while (1) {
@ -261,12 +263,12 @@ bool scanhash_c(int thr_id, const unsigned char *midstate, unsigned char *data,
stat_ctr++; stat_ctr++;
if (unlikely((hash32[7] == 0) && fulltest(hash, target))) { if (unlikely((hash32[7] == 0) && fulltest(hash, target))) {
*hashes_done = n; *last_nonce = n;
return true; return true;
} }
if ((n >= max_nonce) || work_restart[thr_id].restart) { if ((n >= max_nonce) || work_restart[thr_id].restart) {
*hashes_done = n; *last_nonce = n;
return false; return false;
} }
} }

23
sha256_sse2_amd64.c

@ -50,14 +50,14 @@ const uint32_t sha256_init[8]__attribute__((aligned(0x100))) =
__m128i g_4sha256_k[64]; __m128i g_4sha256_k[64];
__m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000))); __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
int scanhash_sse2_64(int thr_id, const unsigned char *pmidstate, bool scanhash_sse2_64(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce) uint32_t nonce)
{ {
uint32_t *nNonce_p = (uint32_t *)(pdata + 12); uint32_t *nNonce_p = (uint32_t *)(pdata + 76);
uint32_t m_midstate[8], m_w[16], m_w1[16]; uint32_t m_midstate[8], m_w[16], m_w1[16];
__m128i m_4w[64] __attribute__ ((aligned (0x100))); __m128i m_4w[64] __attribute__ ((aligned (0x100)));
__m128i m_4hash[64] __attribute__ ((aligned (0x100))); __m128i m_4hash[64] __attribute__ ((aligned (0x100)));
@ -65,6 +65,8 @@ int scanhash_sse2_64(int thr_id, const unsigned char *pmidstate,
__m128i offset; __m128i offset;
int i; int i;
pdata += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
/* For debugging */ /* For debugging */
@ -114,19 +116,20 @@ int scanhash_sse2_64(int thr_id, const unsigned char *pmidstate,
} }
if (fulltest(phash, ptarget)) { if (fulltest(phash, ptarget)) {
*nHashesDone = nonce; nonce += j;
*nNonce_p = nonce + j; *last_nonce = nonce + 1;
return nonce + j; *nNonce_p = nonce;
return true;
} }
} }
nonce += 4;
if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart)) if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart))
{ {
*nHashesDone = nonce; *last_nonce = nonce;
return -1; return false;
} }
nonce += 4;
} }
} }

25
sha256_sse2_i386.c

@ -50,14 +50,14 @@ const uint32_t sha256_32init[8]__attribute__((aligned(0x100))) =
__m128i g_4sha256_k[64]; __m128i g_4sha256_k[64];
__m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000))); __m128i sha256_consts_m128i[64]__attribute__((aligned(0x1000)));
int scanhash_sse2_32(int thr_id, const unsigned char *pmidstate, bool scanhash_sse2_32(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce) uint32_t nonce)
{ {
uint32_t *nNonce_p = (uint32_t *)(pdata + 12); uint32_t *nNonce_p = (uint32_t *)(pdata + 76);
uint32_t m_midstate[8], m_w[16], m_w1[16]; uint32_t m_midstate[8], m_w[16], m_w1[16];
__m128i m_4w[64] __attribute__ ((aligned (0x100))); __m128i m_4w[64] __attribute__ ((aligned (0x100)));
__m128i m_4hash[64] __attribute__ ((aligned (0x100))); __m128i m_4hash[64] __attribute__ ((aligned (0x100)));
@ -65,6 +65,8 @@ int scanhash_sse2_32(int thr_id, const unsigned char *pmidstate,
__m128i offset; __m128i offset;
int i; int i;
pdata += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
/* Message expansion */ /* Message expansion */
@ -105,20 +107,21 @@ int scanhash_sse2_32(int thr_id, const unsigned char *pmidstate,
} }
if (fulltest(phash, ptarget)) { if (fulltest(phash, ptarget)) {
*nHashesDone = nonce; nonce += j;
*nNonce_p = nonce + j; *last_nonce = nonce;
return nonce + j; *nNonce_p = nonce;
return true;
}
} }
} }
if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart)) {
*last_nonce = nonce;
return false;
} }
nonce += 4; nonce += 4;
if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart))
{
*nHashesDone = nonce;
return -1;
}
} }
} }

23
sha256_sse4_amd64.c

@ -49,19 +49,21 @@ static uint32_t g_sha256_hinit[8] =
__m128i g_4sha256_k[64]; __m128i g_4sha256_k[64];
int scanhash_sse4_64(int thr_id, const unsigned char *pmidstate, bool scanhash_sse4_64(int thr_id, const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash, unsigned char *phash1, unsigned char *phash,
const unsigned char *ptarget, const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t nonce) uint32_t nonce)
{ {
uint32_t *nNonce_p = (uint32_t *)(pdata + 12); uint32_t *nNonce_p = (uint32_t *)(pdata + 76);
uint32_t m_midstate[8], m_w[16], m_w1[16]; uint32_t m_midstate[8], m_w[16], m_w1[16];
__m128i m_4w[64], m_4hash[64], m_4hash1[64]; __m128i m_4w[64], m_4hash[64], m_4hash1[64];
__m128i offset; __m128i offset;
int i; int i;
pdata += 64;
work_restart[thr_id].restart = 0; work_restart[thr_id].restart = 0;
/* For debugging */ /* For debugging */
@ -113,19 +115,20 @@ int scanhash_sse4_64(int thr_id, const unsigned char *pmidstate,
} }
if (fulltest(phash, ptarget)) { if (fulltest(phash, ptarget)) {
*nHashesDone = nonce; nonce += j;
*nNonce_p = nonce + j; *last_nonce = nonce;
return nonce + j; *nNonce_p = nonce;
return true;
} }
} }
nonce += 4;
if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart)) if (unlikely((nonce >= max_nonce) || work_restart[thr_id].restart))
{ {
*nHashesDone = nonce; *last_nonce = nonce;
return -1; return false;
} }
nonce += 4;
} }
} }

10
sha256_via.c

@ -19,9 +19,11 @@ static void via_sha256(void *hash, void *buf, unsigned len)
:"memory"); :"memory");
} }
bool scanhash_via(int thr_id, unsigned char *data_inout, bool scanhash_via(int thr_id, const unsigned char *pmidstate,
unsigned char *data_inout,
unsigned char *phash1, unsigned char *phash,
const unsigned char *target, const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done, uint32_t max_nonce, uint32_t *last_nonce,
uint32_t n) uint32_t n)
{ {
unsigned char data[128] __attribute__((aligned(128))); unsigned char data[128] __attribute__((aligned(128)));
@ -70,12 +72,12 @@ bool scanhash_via(int thr_id, unsigned char *data_inout,
dout32[i] = swab32(data32[i]); dout32[i] = swab32(data32[i]);
} }
*hashes_done = n; *last_nonce = n;
return true; return true;
} }
if ((n >= max_nonce) || work_restart[thr_id].restart) { if ((n >= max_nonce) || work_restart[thr_id].restart) {
*hashes_done = n; *last_nonce = n;
return false; return false;
} }
} }

Loading…
Cancel
Save