From 59a5b3624068f152efe55968ba77eb10a8e8f945 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 15 Jun 2013 18:20:26 +0400 Subject: [PATCH] Remove PoW CPU miner --- src/main.cpp | 129 +------- src/scrypt-x86_64.S | 973 --------------------------------------------------- src/scrypt_mine.cpp | 137 +------- src/scrypt_mine.h | 54 ++-- 4 files changed, 29 insertions(+), 1264 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a0a2509..306a7bf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4418,9 +4418,6 @@ static int nLimitProcessors = -1; void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) { - void *scratchbuf = scrypt_buffer_alloc(); - - printf("CPUMiner started for proof-of-%s\n", fProofOfStake? "stake" : "work"); SetThreadPriority(THREAD_PRIORITY_LOWEST); // Make this thread recognisable as the mining thread @@ -4430,7 +4427,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) CReserveKey reservekey(pwallet); unsigned int nExtraNonce = 0; - while (fGenerateBitcoins || fProofOfStake) + while (fProofOfStake) { if (fShutdown) return; @@ -4439,7 +4436,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) Sleep(1000); if (fShutdown) return; - if ((!fGenerateBitcoins) && !fProofOfStake) + if (!fProofOfStake) return; } @@ -4453,7 +4450,6 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) // // Create new block // - unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; CBlockIndex* pindexPrev = pindexBest; auto_ptr pblock(CreateNewBlock(pwallet, fProofOfStake)); @@ -4472,7 +4468,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) continue; } strMintWarning = ""; - printf("CPUMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str()); + printf("StakeMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str()); SetThreadPriority(THREAD_PRIORITY_NORMAL); CheckWork(pblock.get(), *pwalletMain, reservekey); SetThreadPriority(THREAD_PRIORITY_LOWEST); @@ -4480,126 +4476,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake) Sleep(500); continue; } - - printf("Running BitcoinMiner with %"PRIszu" transactions in block (%u bytes)\n", pblock->vtx.size(), - ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); - - // - // Pre-build hash buffers - // - char pmidstatebuf[32+16]; char* pmidstate = alignup<16>(pmidstatebuf); - char pdatabuf[128+16]; char* pdata = alignup<16>(pdatabuf); - char phash1buf[64+16]; char* phash1 = alignup<16>(phash1buf); - - FormatHashBuffers(pblock.get(), pmidstate, pdata, phash1); - - unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); - unsigned int& nBlockNonce = *(unsigned int*)(pdata + 64 + 12); - - - // - // Search - // - int64 nStart = GetTime(); - uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - - unsigned int max_nonce = 0xffff0000; - block_header res_header; - uint256 result; - - loop - { - unsigned int nHashesDone = 0; - unsigned int nNonceFound; - - nNonceFound = scanhash_scrypt( - (block_header *)&pblock->nVersion, - scratchbuf, - max_nonce, - nHashesDone, - UBEGIN(result), - &res_header - ); - - // Check if something found - if (nNonceFound != (unsigned int) -1) - { - if (result <= hashTarget) - { - // Found a solution - pblock->nNonce = nNonceFound; - assert(result == pblock->GetHash()); - if (!pblock->SignBlock(*pwalletMain)) - { -// strMintWarning = strMintMessage; - break; - } - strMintWarning = ""; - - SetThreadPriority(THREAD_PRIORITY_NORMAL); - CheckWork(pblock.get(), *pwalletMain, reservekey); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - break; - } - } - - // Meter hashes/sec - static int64 nHashCounter; - if (nHPSTimerStart == 0) - { - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - } - else - nHashCounter += nHashesDone; - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - static CCriticalSection cs; - { - LOCK(cs); - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - static int64 nLogTime; - if (GetTime() - nLogTime > 30 * 60) - { - nLogTime = GetTime(); - printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[THREAD_MINER], dHashesPerSec/1000.0); - } - } - } - } - - // Check for stop or if block needs to be rebuilt - if (fShutdown) - return; - if (!fGenerateBitcoins) - return; - if (fLimitProcessors && vnThreadsRunning[THREAD_MINER] > nLimitProcessors) - return; - if (vNodes.empty()) - break; - if (nBlockNonce >= 0xffff0000) - break; - if (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60) - break; - if (pindexPrev != pindexBest) - break; - - // Update nTime every few seconds - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, pblock->GetMaxTransactionTime()); - pblock->nTime = max(pblock->GetBlockTime(), pindexPrev->GetBlockTime() - nMaxClockDrift); - pblock->UpdateTime(pindexPrev); - nBlockTime = ByteReverse(pblock->nTime); - - if (pblock->GetBlockTime() >= (int64)pblock->vtx[0].nTime + nMaxClockDrift) - break; // need to update coinbase timestamp - } } - - scrypt_buffer_free(scratchbuf); } void static ThreadBitcoinMiner(void* parg) diff --git a/src/scrypt-x86_64.S b/src/scrypt-x86_64.S index f0a3fdd..6ae2f00 100644 --- a/src/scrypt-x86_64.S +++ b/src/scrypt-x86_64.S @@ -835,979 +835,6 @@ xmm_scrypt_core_loop2: scrypt_core_cleanup() ret - - .text - .align 32 - .globl scrypt_best_throughput - .globl _scrypt_best_throughput -scrypt_best_throughput: -_scrypt_best_throughput: - pushq %rbx - xorq %rax, %rax - cpuid - movl $3, %eax - cmpl $0x444d4163, %ecx - jne scrypt_best_throughput_exit - cmpl $0x69746e65, %edx - jne scrypt_best_throughput_exit - cmpl $0x68747541, %ebx - jne scrypt_best_throughput_exit - movl $1, %eax - cpuid - andl $0x0ff00000, %eax - movl $3, %eax - jnz scrypt_best_throughput_exit - movl $1, %eax -scrypt_best_throughput_exit: - popq %rbx - ret - - -#define xmm_salsa8_core_2way_doubleround() \ - movdqa %xmm1, %xmm4; \ - movdqa %xmm9, %xmm6; \ - paddd %xmm0, %xmm4; \ - paddd %xmm8, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $7, %xmm4; \ - pslld $7, %xmm6; \ - psrld $25, %xmm5; \ - psrld $25, %xmm7; \ - pxor %xmm4, %xmm3; \ - pxor %xmm6, %xmm11; \ - pxor %xmm5, %xmm3; \ - pxor %xmm7, %xmm11; \ - movdqa %xmm0, %xmm4; \ - movdqa %xmm8, %xmm6; \ - paddd %xmm3, %xmm4; \ - paddd %xmm11, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $9, %xmm4; \ - pslld $9, %xmm6; \ - psrld $23, %xmm5; \ - psrld $23, %xmm7; \ - pxor %xmm4, %xmm2; \ - pxor %xmm6, %xmm10; \ - movdqa %xmm3, %xmm4; \ - movdqa %xmm11, %xmm6; \ - pshufd $0x93, %xmm3, %xmm3; \ - pshufd $0x93, %xmm11, %xmm11; \ - pxor %xmm5, %xmm2; \ - pxor %xmm7, %xmm10; \ - paddd %xmm2, %xmm4; \ - paddd %xmm10, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $13, %xmm4; \ - pslld $13, %xmm6; \ - psrld $19, %xmm5; \ - psrld $19, %xmm7; \ - pxor %xmm4, %xmm1; \ - pxor %xmm6, %xmm9; \ - movdqa %xmm2, %xmm4; \ - movdqa %xmm10, %xmm6; \ - pshufd $0x4e, %xmm2, %xmm2; \ - pshufd $0x4e, %xmm10, %xmm10; \ - pxor %xmm5, %xmm1; \ - pxor %xmm7, %xmm9; \ - paddd %xmm1, %xmm4; \ - paddd %xmm9, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $18, %xmm4; \ - pslld $18, %xmm6; \ - psrld $14, %xmm5; \ - psrld $14, %xmm7; \ - pxor %xmm4, %xmm0; \ - pxor %xmm6, %xmm8; \ - pshufd $0x39, %xmm1, %xmm1; \ - pshufd $0x39, %xmm9, %xmm9; \ - pxor %xmm5, %xmm0; \ - pxor %xmm7, %xmm8; \ - movdqa %xmm3, %xmm4; \ - movdqa %xmm11, %xmm6; \ - paddd %xmm0, %xmm4; \ - paddd %xmm8, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $7, %xmm4; \ - pslld $7, %xmm6; \ - psrld $25, %xmm5; \ - psrld $25, %xmm7; \ - pxor %xmm4, %xmm1; \ - pxor %xmm6, %xmm9; \ - pxor %xmm5, %xmm1; \ - pxor %xmm7, %xmm9; \ - movdqa %xmm0, %xmm4; \ - movdqa %xmm8, %xmm6; \ - paddd %xmm1, %xmm4; \ - paddd %xmm9, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $9, %xmm4; \ - pslld $9, %xmm6; \ - psrld $23, %xmm5; \ - psrld $23, %xmm7; \ - pxor %xmm4, %xmm2; \ - pxor %xmm6, %xmm10; \ - movdqa %xmm1, %xmm4; \ - movdqa %xmm9, %xmm6; \ - pshufd $0x93, %xmm1, %xmm1; \ - pshufd $0x93, %xmm9, %xmm9; \ - pxor %xmm5, %xmm2; \ - pxor %xmm7, %xmm10; \ - paddd %xmm2, %xmm4; \ - paddd %xmm10, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $13, %xmm4; \ - pslld $13, %xmm6; \ - psrld $19, %xmm5; \ - psrld $19, %xmm7; \ - pxor %xmm4, %xmm3; \ - pxor %xmm6, %xmm11; \ - movdqa %xmm2, %xmm4; \ - movdqa %xmm10, %xmm6; \ - pshufd $0x4e, %xmm2, %xmm2; \ - pshufd $0x4e, %xmm10, %xmm10; \ - pxor %xmm5, %xmm3; \ - pxor %xmm7, %xmm11; \ - paddd %xmm3, %xmm4; \ - paddd %xmm11, %xmm6; \ - movdqa %xmm4, %xmm5; \ - movdqa %xmm6, %xmm7; \ - pslld $18, %xmm4; \ - pslld $18, %xmm6; \ - psrld $14, %xmm5; \ - psrld $14, %xmm7; \ - pxor %xmm4, %xmm0; \ - pxor %xmm6, %xmm8; \ - pshufd $0x39, %xmm3, %xmm3; \ - pshufd $0x39, %xmm11, %xmm11; \ - pxor %xmm5, %xmm0; \ - pxor %xmm7, %xmm8; \ - - -#define xmm_salsa8_core_2way() \ - xmm_salsa8_core_2way_doubleround(); \ - xmm_salsa8_core_2way_doubleround(); \ - xmm_salsa8_core_2way_doubleround(); \ - xmm_salsa8_core_2way_doubleround(); \ - - - - .text - .align 32 - .globl scrypt_core_2way - .globl _scrypt_core_2way -scrypt_core_2way: -_scrypt_core_2way: - pushq %rbx - pushq %rbp -#if defined(WIN64) - subq $176, %rsp - movdqa %xmm6, 8(%rsp) - movdqa %xmm7, 24(%rsp) - movdqa %xmm8, 40(%rsp) - movdqa %xmm9, 56(%rsp) - movdqa %xmm10, 72(%rsp) - movdqa %xmm11, 88(%rsp) - movdqa %xmm12, 104(%rsp) - movdqa %xmm13, 120(%rsp) - movdqa %xmm14, 136(%rsp) - movdqa %xmm15, 152(%rsp) - pushq %rdi - pushq %rsi - movq %rcx, %rdi - movq %rdx, %rsi - movq %r8, %rdx -#endif - subq $264, %rsp - - scrypt_shuffle(%rdi, 0, %rsp, 0) - scrypt_shuffle(%rdi, 64, %rsp, 64) - scrypt_shuffle(%rsi, 0, %rsp, 128) - scrypt_shuffle(%rsi, 64, %rsp, 192) - - movdqa 192(%rsp), %xmm12 - movdqa 208(%rsp), %xmm13 - movdqa 224(%rsp), %xmm14 - movdqa 240(%rsp), %xmm15 - - movq %rdx, %rbp - leaq 262144(%rdx), %rcx -scrypt_core_2way_loop1: - movdqa 0(%rsp), %xmm0 - movdqa 16(%rsp), %xmm1 - movdqa 32(%rsp), %xmm2 - movdqa 48(%rsp), %xmm3 - movdqa 64(%rsp), %xmm4 - movdqa 80(%rsp), %xmm5 - movdqa 96(%rsp), %xmm6 - movdqa 112(%rsp), %xmm7 - movdqa 128(%rsp), %xmm8 - movdqa 144(%rsp), %xmm9 - movdqa 160(%rsp), %xmm10 - movdqa 176(%rsp), %xmm11 - pxor %xmm4, %xmm0 - pxor %xmm5, %xmm1 - pxor %xmm6, %xmm2 - pxor %xmm7, %xmm3 - movdqa %xmm0, 0(%rbp) - movdqa %xmm1, 16(%rbp) - movdqa %xmm2, 32(%rbp) - movdqa %xmm3, 48(%rbp) - movdqa %xmm4, 64(%rbp) - movdqa %xmm5, 80(%rbp) - movdqa %xmm6, 96(%rbp) - movdqa %xmm7, 112(%rbp) - pxor %xmm12, %xmm8 - pxor %xmm13, %xmm9 - pxor %xmm14, %xmm10 - pxor %xmm15, %xmm11 - movdqa %xmm8, 128(%rbp) - movdqa %xmm9, 144(%rbp) - movdqa %xmm10, 160(%rbp) - movdqa %xmm11, 176(%rbp) - movdqa %xmm12, 192(%rbp) - movdqa %xmm13, 208(%rbp) - movdqa %xmm14, 224(%rbp) - movdqa %xmm15, 240(%rbp) - - xmm_salsa8_core_2way() - paddd 0(%rbp), %xmm0 - paddd 16(%rbp), %xmm1 - paddd 32(%rbp), %xmm2 - paddd 48(%rbp), %xmm3 - paddd 128(%rbp), %xmm8 - paddd 144(%rbp), %xmm9 - paddd 160(%rbp), %xmm10 - paddd 176(%rbp), %xmm11 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128(%rsp) - movdqa %xmm9, 144(%rsp) - movdqa %xmm10, 160(%rsp) - movdqa %xmm11, 176(%rsp) - - pxor 64(%rsp), %xmm0 - pxor 80(%rsp), %xmm1 - pxor 96(%rsp), %xmm2 - pxor 112(%rsp), %xmm3 - pxor %xmm12, %xmm8 - pxor %xmm13, %xmm9 - pxor %xmm14, %xmm10 - pxor %xmm15, %xmm11 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, %xmm12 - movdqa %xmm9, %xmm13 - movdqa %xmm10, %xmm14 - movdqa %xmm11, %xmm15 - xmm_salsa8_core_2way() - paddd 64(%rsp), %xmm0 - paddd 80(%rsp), %xmm1 - paddd 96(%rsp), %xmm2 - paddd 112(%rsp), %xmm3 - paddd %xmm8, %xmm12 - paddd %xmm9, %xmm13 - paddd %xmm10, %xmm14 - paddd %xmm11, %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - - addq $256, %rbp - cmpq %rcx, %rbp - jne scrypt_core_2way_loop1 - - movq $1024, %rcx -scrypt_core_2way_loop2: - movdqa 0(%rsp), %xmm0 - movdqa 16(%rsp), %xmm1 - movdqa 32(%rsp), %xmm2 - movdqa 48(%rsp), %xmm3 - movdqa 64(%rsp), %xmm4 - movdqa 80(%rsp), %xmm5 - movdqa 96(%rsp), %xmm6 - movdqa 112(%rsp), %xmm7 - movdqa 128(%rsp), %xmm8 - movdqa 144(%rsp), %xmm9 - movdqa 160(%rsp), %xmm10 - movdqa 176(%rsp), %xmm11 - movd %xmm4, %ebp - andl $1023, %ebp - shll $8, %ebp - pxor 0(%rdx, %rbp), %xmm0 - pxor 16(%rdx, %rbp), %xmm1 - pxor 32(%rdx, %rbp), %xmm2 - pxor 48(%rdx, %rbp), %xmm3 - movd %xmm12, %ebx - andl $1023, %ebx - shll $8, %ebx - addl $128, %ebx - pxor 0(%rdx, %rbx), %xmm8 - pxor 16(%rdx, %rbx), %xmm9 - pxor 32(%rdx, %rbx), %xmm10 - pxor 48(%rdx, %rbx), %xmm11 - - pxor %xmm4, %xmm0 - pxor %xmm5, %xmm1 - pxor %xmm6, %xmm2 - pxor %xmm7, %xmm3 - pxor %xmm12, %xmm8 - pxor %xmm13, %xmm9 - pxor %xmm14, %xmm10 - pxor %xmm15, %xmm11 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128(%rsp) - movdqa %xmm9, 144(%rsp) - movdqa %xmm10, 160(%rsp) - movdqa %xmm11, 176(%rsp) - xmm_salsa8_core_2way() - paddd 0(%rsp), %xmm0 - paddd 16(%rsp), %xmm1 - paddd 32(%rsp), %xmm2 - paddd 48(%rsp), %xmm3 - paddd 128(%rsp), %xmm8 - paddd 144(%rsp), %xmm9 - paddd 160(%rsp), %xmm10 - paddd 176(%rsp), %xmm11 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128(%rsp) - movdqa %xmm9, 144(%rsp) - movdqa %xmm10, 160(%rsp) - movdqa %xmm11, 176(%rsp) - - pxor 64(%rdx, %rbp), %xmm0 - pxor 80(%rdx, %rbp), %xmm1 - pxor 96(%rdx, %rbp), %xmm2 - pxor 112(%rdx, %rbp), %xmm3 - pxor 64(%rdx, %rbx), %xmm8 - pxor 80(%rdx, %rbx), %xmm9 - pxor 96(%rdx, %rbx), %xmm10 - pxor 112(%rdx, %rbx), %xmm11 - pxor 64(%rsp), %xmm0 - pxor 80(%rsp), %xmm1 - pxor 96(%rsp), %xmm2 - pxor 112(%rsp), %xmm3 - pxor %xmm12, %xmm8 - pxor %xmm13, %xmm9 - pxor %xmm14, %xmm10 - pxor %xmm15, %xmm11 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, %xmm12 - movdqa %xmm9, %xmm13 - movdqa %xmm10, %xmm14 - movdqa %xmm11, %xmm15 - xmm_salsa8_core_2way() - paddd 64(%rsp), %xmm0 - paddd 80(%rsp), %xmm1 - paddd 96(%rsp), %xmm2 - paddd 112(%rsp), %xmm3 - paddd %xmm8, %xmm12 - paddd %xmm9, %xmm13 - paddd %xmm10, %xmm14 - paddd %xmm11, %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - - subq $1, %rcx - ja scrypt_core_2way_loop2 - - movdqa %xmm12, 192(%rsp) - movdqa %xmm13, 208(%rsp) - movdqa %xmm14, 224(%rsp) - movdqa %xmm15, 240(%rsp) - - scrypt_shuffle(%rsp, 0, %rdi, 0) - scrypt_shuffle(%rsp, 64, %rdi, 64) - scrypt_shuffle(%rsp, 128, %rsi, 0) - scrypt_shuffle(%rsp, 192, %rsi, 64) - - addq $264, %rsp -#if defined(WIN64) - popq %rsi - popq %rdi - movdqa 8(%rsp), %xmm6 - movdqa 24(%rsp), %xmm7 - movdqa 40(%rsp), %xmm8 - movdqa 56(%rsp), %xmm9 - movdqa 72(%rsp), %xmm10 - movdqa 88(%rsp), %xmm11 - movdqa 104(%rsp), %xmm12 - movdqa 120(%rsp), %xmm13 - movdqa 136(%rsp), %xmm14 - movdqa 152(%rsp), %xmm15 - addq $176, %rsp -#endif - popq %rbp - popq %rbx - ret - - -#define xmm_salsa8_core_3way_doubleround() \ - movdqa %xmm1, %xmm4; \ - movdqa %xmm9, %xmm6; \ - movdqa %xmm13, %xmm7; \ - paddd %xmm0, %xmm4; \ - paddd %xmm8, %xmm6; \ - paddd %xmm12, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $7, %xmm4; \ - psrld $25, %xmm5; \ - pxor %xmm4, %xmm3; \ - pxor %xmm5, %xmm3; \ - movdqa %xmm0, %xmm4; \ - movdqa %xmm6, %xmm5; \ - pslld $7, %xmm6; \ - psrld $25, %xmm5; \ - pxor %xmm6, %xmm11; \ - pxor %xmm5, %xmm11; \ - movdqa %xmm8, %xmm6; \ - movdqa %xmm7, %xmm5; \ - pslld $7, %xmm7; \ - psrld $25, %xmm5; \ - pxor %xmm7, %xmm15; \ - pxor %xmm5, %xmm15; \ - movdqa %xmm12, %xmm7; \ - paddd %xmm3, %xmm4; \ - paddd %xmm11, %xmm6; \ - paddd %xmm15, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $9, %xmm4; \ - psrld $23, %xmm5; \ - pxor %xmm4, %xmm2; \ - movdqa %xmm3, %xmm4; \ - pshufd $0x93, %xmm3, %xmm3; \ - pxor %xmm5, %xmm2; \ - movdqa %xmm6, %xmm5; \ - pslld $9, %xmm6; \ - psrld $23, %xmm5; \ - pxor %xmm6, %xmm10; \ - movdqa %xmm11, %xmm6; \ - pshufd $0x93, %xmm11, %xmm11; \ - pxor %xmm5, %xmm10; \ - movdqa %xmm7, %xmm5; \ - pslld $9, %xmm7; \ - psrld $23, %xmm5; \ - pxor %xmm7, %xmm14; \ - movdqa %xmm15, %xmm7; \ - pshufd $0x93, %xmm15, %xmm15; \ - pxor %xmm5, %xmm14; \ - paddd %xmm2, %xmm4; \ - paddd %xmm10, %xmm6; \ - paddd %xmm14, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $13, %xmm4; \ - psrld $19, %xmm5; \ - pxor %xmm4, %xmm1; \ - movdqa %xmm2, %xmm4; \ - pshufd $0x4e, %xmm2, %xmm2; \ - pxor %xmm5, %xmm1; \ - movdqa %xmm6, %xmm5; \ - pslld $13, %xmm6; \ - psrld $19, %xmm5; \ - pxor %xmm6, %xmm9; \ - movdqa %xmm10, %xmm6; \ - pshufd $0x4e, %xmm10, %xmm10; \ - pxor %xmm5, %xmm9; \ - movdqa %xmm7, %xmm5; \ - pslld $13, %xmm7; \ - psrld $19, %xmm5; \ - pxor %xmm7, %xmm13; \ - movdqa %xmm14, %xmm7; \ - pshufd $0x4e, %xmm14, %xmm14; \ - pxor %xmm5, %xmm13; \ - paddd %xmm1, %xmm4; \ - paddd %xmm9, %xmm6; \ - paddd %xmm13, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $18, %xmm4; \ - psrld $14, %xmm5; \ - pxor %xmm4, %xmm0; \ - pshufd $0x39, %xmm1, %xmm1; \ - pxor %xmm5, %xmm0; \ - movdqa %xmm3, %xmm4; \ - movdqa %xmm6, %xmm5; \ - pslld $18, %xmm6; \ - psrld $14, %xmm5; \ - pxor %xmm6, %xmm8; \ - pshufd $0x39, %xmm9, %xmm9; \ - pxor %xmm5, %xmm8; \ - movdqa %xmm11, %xmm6; \ - movdqa %xmm7, %xmm5; \ - pslld $18, %xmm7; \ - psrld $14, %xmm5; \ - pxor %xmm7, %xmm12; \ - pshufd $0x39, %xmm13, %xmm13; \ - pxor %xmm5, %xmm12; \ - movdqa %xmm15, %xmm7; \ - paddd %xmm0, %xmm4; \ - paddd %xmm8, %xmm6; \ - paddd %xmm12, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $7, %xmm4; \ - psrld $25, %xmm5; \ - pxor %xmm4, %xmm1; \ - pxor %xmm5, %xmm1; \ - movdqa %xmm0, %xmm4; \ - movdqa %xmm6, %xmm5; \ - pslld $7, %xmm6; \ - psrld $25, %xmm5; \ - pxor %xmm6, %xmm9; \ - pxor %xmm5, %xmm9; \ - movdqa %xmm8, %xmm6; \ - movdqa %xmm7, %xmm5; \ - pslld $7, %xmm7; \ - psrld $25, %xmm5; \ - pxor %xmm7, %xmm13; \ - pxor %xmm5, %xmm13; \ - movdqa %xmm12, %xmm7; \ - paddd %xmm1, %xmm4; \ - paddd %xmm9, %xmm6; \ - paddd %xmm13, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $9, %xmm4; \ - psrld $23, %xmm5; \ - pxor %xmm4, %xmm2; \ - movdqa %xmm1, %xmm4; \ - pshufd $0x93, %xmm1, %xmm1; \ - pxor %xmm5, %xmm2; \ - movdqa %xmm6, %xmm5; \ - pslld $9, %xmm6; \ - psrld $23, %xmm5; \ - pxor %xmm6, %xmm10; \ - movdqa %xmm9, %xmm6; \ - pshufd $0x93, %xmm9, %xmm9; \ - pxor %xmm5, %xmm10; \ - movdqa %xmm7, %xmm5; \ - pslld $9, %xmm7; \ - psrld $23, %xmm5; \ - pxor %xmm7, %xmm14; \ - movdqa %xmm13, %xmm7; \ - pshufd $0x93, %xmm13, %xmm13; \ - pxor %xmm5, %xmm14; \ - paddd %xmm2, %xmm4; \ - paddd %xmm10, %xmm6; \ - paddd %xmm14, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $13, %xmm4; \ - psrld $19, %xmm5; \ - pxor %xmm4, %xmm3; \ - movdqa %xmm2, %xmm4; \ - pshufd $0x4e, %xmm2, %xmm2; \ - pxor %xmm5, %xmm3; \ - movdqa %xmm6, %xmm5; \ - pslld $13, %xmm6; \ - psrld $19, %xmm5; \ - pxor %xmm6, %xmm11; \ - movdqa %xmm10, %xmm6; \ - pshufd $0x4e, %xmm10, %xmm10; \ - pxor %xmm5, %xmm11; \ - movdqa %xmm7, %xmm5; \ - pslld $13, %xmm7; \ - psrld $19, %xmm5; \ - pxor %xmm7, %xmm15; \ - movdqa %xmm14, %xmm7; \ - pshufd $0x4e, %xmm14, %xmm14; \ - pxor %xmm5, %xmm15; \ - paddd %xmm3, %xmm4; \ - paddd %xmm11, %xmm6; \ - paddd %xmm15, %xmm7; \ - movdqa %xmm4, %xmm5; \ - pslld $18, %xmm4; \ - psrld $14, %xmm5; \ - pxor %xmm4, %xmm0; \ - pshufd $0x39, %xmm3, %xmm3; \ - pxor %xmm5, %xmm0; \ - movdqa %xmm6, %xmm5; \ - pslld $18, %xmm6; \ - psrld $14, %xmm5; \ - pxor %xmm6, %xmm8; \ - pshufd $0x39, %xmm11, %xmm11; \ - pxor %xmm5, %xmm8; \ - movdqa %xmm7, %xmm5; \ - pslld $18, %xmm7; \ - psrld $14, %xmm5; \ - pxor %xmm7, %xmm12; \ - pshufd $0x39, %xmm15, %xmm15; \ - pxor %xmm5, %xmm12; \ - - -#define xmm_salsa8_core_3way() \ - xmm_salsa8_core_3way_doubleround(); \ - xmm_salsa8_core_3way_doubleround(); \ - xmm_salsa8_core_3way_doubleround(); \ - xmm_salsa8_core_3way_doubleround(); \ - - - .text - .align 32 - .globl scrypt_core_3way - .globl _scrypt_core_3way -scrypt_core_3way: -_scrypt_core_3way: - pushq %rbx - pushq %rbp -#if defined(WIN64) - subq $176, %rsp - movdqa %xmm6, 8(%rsp) - movdqa %xmm7, 24(%rsp) - movdqa %xmm8, 40(%rsp) - movdqa %xmm9, 56(%rsp) - movdqa %xmm10, 72(%rsp) - movdqa %xmm11, 88(%rsp) - movdqa %xmm12, 104(%rsp) - movdqa %xmm13, 120(%rsp) - movdqa %xmm14, 136(%rsp) - movdqa %xmm15, 152(%rsp) - pushq %rdi - pushq %rsi - movq %rcx, %rdi - movq %rdx, %rsi - movq %r8, %rdx - movq %r9, %rcx -#endif - subq $392, %rsp - - scrypt_shuffle(%rdi, 0, %rsp, 0) - scrypt_shuffle(%rdi, 64, %rsp, 64) - scrypt_shuffle(%rsi, 0, %rsp, 128) - scrypt_shuffle(%rsi, 64, %rsp, 192) - scrypt_shuffle(%rdx, 0, %rsp, 256) - scrypt_shuffle(%rdx, 64, %rsp, 320) - - movdqa 128+64(%rsp), %xmm8 - movdqa 128+80(%rsp), %xmm9 - movdqa 128+96(%rsp), %xmm10 - movdqa 128+112(%rsp), %xmm11 - - movq %rcx, %rbp - leaq 3*131072(%rcx), %rax -scrypt_core_3way_loop1: - movdqa %xmm8, %xmm12 - movdqa %xmm9, %xmm13 - movdqa %xmm10, %xmm14 - movdqa %xmm11, %xmm15 - movdqa 0(%rsp), %xmm0 - movdqa 16(%rsp), %xmm1 - movdqa 32(%rsp), %xmm2 - movdqa 48(%rsp), %xmm3 - movdqa 64(%rsp), %xmm4 - movdqa 80(%rsp), %xmm5 - movdqa 96(%rsp), %xmm6 - movdqa 112(%rsp), %xmm7 - movdqa 128+0(%rsp), %xmm8 - movdqa 128+16(%rsp), %xmm9 - movdqa 128+32(%rsp), %xmm10 - movdqa 128+48(%rsp), %xmm11 - pxor %xmm4, %xmm0 - pxor %xmm5, %xmm1 - pxor %xmm6, %xmm2 - pxor %xmm7, %xmm3 - movdqa %xmm0, 0(%rbp) - movdqa %xmm1, 16(%rbp) - movdqa %xmm2, 32(%rbp) - movdqa %xmm3, 48(%rbp) - movdqa %xmm4, 64(%rbp) - movdqa %xmm5, 80(%rbp) - movdqa %xmm6, 96(%rbp) - movdqa %xmm7, 112(%rbp) - pxor %xmm12, %xmm8 - pxor %xmm13, %xmm9 - pxor %xmm14, %xmm10 - pxor %xmm15, %xmm11 - movdqa %xmm8, 128+0(%rbp) - movdqa %xmm9, 128+16(%rbp) - movdqa %xmm10, 128+32(%rbp) - movdqa %xmm11, 128+48(%rbp) - movdqa %xmm12, 128+64(%rbp) - movdqa %xmm13, 128+80(%rbp) - movdqa %xmm14, 128+96(%rbp) - movdqa %xmm15, 128+112(%rbp) - movdqa 256+0(%rsp), %xmm12 - movdqa 256+16(%rsp), %xmm13 - movdqa 256+32(%rsp), %xmm14 - movdqa 256+48(%rsp), %xmm15 - movdqa 256+64(%rsp), %xmm4 - movdqa 256+80(%rsp), %xmm5 - movdqa 256+96(%rsp), %xmm6 - movdqa 256+112(%rsp), %xmm7 - pxor %xmm4, %xmm12 - pxor %xmm5, %xmm13 - pxor %xmm6, %xmm14 - pxor %xmm7, %xmm15 - movdqa %xmm12, 256+0(%rbp) - movdqa %xmm13, 256+16(%rbp) - movdqa %xmm14, 256+32(%rbp) - movdqa %xmm15, 256+48(%rbp) - movdqa %xmm4, 256+64(%rbp) - movdqa %xmm5, 256+80(%rbp) - movdqa %xmm6, 256+96(%rbp) - movdqa %xmm7, 256+112(%rbp) - - xmm_salsa8_core_3way() - paddd 0(%rbp), %xmm0 - paddd 16(%rbp), %xmm1 - paddd 32(%rbp), %xmm2 - paddd 48(%rbp), %xmm3 - paddd 128+0(%rbp), %xmm8 - paddd 128+16(%rbp), %xmm9 - paddd 128+32(%rbp), %xmm10 - paddd 128+48(%rbp), %xmm11 - paddd 256+0(%rbp), %xmm12 - paddd 256+16(%rbp), %xmm13 - paddd 256+32(%rbp), %xmm14 - paddd 256+48(%rbp), %xmm15 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128+0(%rsp) - movdqa %xmm9, 128+16(%rsp) - movdqa %xmm10, 128+32(%rsp) - movdqa %xmm11, 128+48(%rsp) - movdqa %xmm12, 256+0(%rsp) - movdqa %xmm13, 256+16(%rsp) - movdqa %xmm14, 256+32(%rsp) - movdqa %xmm15, 256+48(%rsp) - - pxor 64(%rsp), %xmm0 - pxor 80(%rsp), %xmm1 - pxor 96(%rsp), %xmm2 - pxor 112(%rsp), %xmm3 - pxor 128+64(%rsp), %xmm8 - pxor 128+80(%rsp), %xmm9 - pxor 128+96(%rsp), %xmm10 - pxor 128+112(%rsp), %xmm11 - pxor 256+64(%rsp), %xmm12 - pxor 256+80(%rsp), %xmm13 - pxor 256+96(%rsp), %xmm14 - pxor 256+112(%rsp), %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, 128+64(%rsp) - movdqa %xmm9, 128+80(%rsp) - movdqa %xmm10, 128+96(%rsp) - movdqa %xmm11, 128+112(%rsp) - movdqa %xmm12, 256+64(%rsp) - movdqa %xmm13, 256+80(%rsp) - movdqa %xmm14, 256+96(%rsp) - movdqa %xmm15, 256+112(%rsp) - xmm_salsa8_core_3way() - paddd 64(%rsp), %xmm0 - paddd 80(%rsp), %xmm1 - paddd 96(%rsp), %xmm2 - paddd 112(%rsp), %xmm3 - paddd 128+64(%rsp), %xmm8 - paddd 128+80(%rsp), %xmm9 - paddd 128+96(%rsp), %xmm10 - paddd 128+112(%rsp), %xmm11 - paddd 256+64(%rsp), %xmm12 - paddd 256+80(%rsp), %xmm13 - paddd 256+96(%rsp), %xmm14 - paddd 256+112(%rsp), %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, 128+64(%rsp) - movdqa %xmm9, 128+80(%rsp) - movdqa %xmm10, 128+96(%rsp) - movdqa %xmm11, 128+112(%rsp) - movdqa %xmm12, 256+64(%rsp) - movdqa %xmm13, 256+80(%rsp) - movdqa %xmm14, 256+96(%rsp) - movdqa %xmm15, 256+112(%rsp) - - addq $3*128, %rbp - cmpq %rax, %rbp - jne scrypt_core_3way_loop1 - - movq $1024, %rax -scrypt_core_3way_loop2: - movl 64(%rsp), %ebp - andl $1023, %ebp - leal (%ebp, %ebp, 2), %ebp - shll $7, %ebp - movl 128+64(%rsp), %ebx - andl $1023, %ebx - leal (%ebx, %ebx, 2), %ebx - shll $7, %ebx - addl $128, %ebx - movl 256+64(%rsp), %r8d - andl $1023, %r8d - leal (%r8d, %r8d, 2), %r8d - shll $7, %r8d - addl $256, %r8d - movdqa 0(%rsp), %xmm0 - movdqa 16(%rsp), %xmm1 - movdqa 32(%rsp), %xmm2 - movdqa 48(%rsp), %xmm3 - movdqa 128+0(%rsp), %xmm8 - movdqa 128+16(%rsp), %xmm9 - movdqa 128+32(%rsp), %xmm10 - movdqa 128+48(%rsp), %xmm11 - movdqa 256+0(%rsp), %xmm12 - movdqa 256+16(%rsp), %xmm13 - movdqa 256+32(%rsp), %xmm14 - movdqa 256+48(%rsp), %xmm15 - pxor 0(%rcx, %rbp), %xmm0 - pxor 16(%rcx, %rbp), %xmm1 - pxor 32(%rcx, %rbp), %xmm2 - pxor 48(%rcx, %rbp), %xmm3 - pxor 0(%rcx, %rbx), %xmm8 - pxor 16(%rcx, %rbx), %xmm9 - pxor 32(%rcx, %rbx), %xmm10 - pxor 48(%rcx, %rbx), %xmm11 - pxor 0(%rcx, %r8), %xmm12 - pxor 16(%rcx, %r8), %xmm13 - pxor 32(%rcx, %r8), %xmm14 - pxor 48(%rcx, %r8), %xmm15 - - pxor 64(%rsp), %xmm0 - pxor 80(%rsp), %xmm1 - pxor 96(%rsp), %xmm2 - pxor 112(%rsp), %xmm3 - pxor 128+64(%rsp), %xmm8 - pxor 128+80(%rsp), %xmm9 - pxor 128+96(%rsp), %xmm10 - pxor 128+112(%rsp), %xmm11 - pxor 256+64(%rsp), %xmm12 - pxor 256+80(%rsp), %xmm13 - pxor 256+96(%rsp), %xmm14 - pxor 256+112(%rsp), %xmm15 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128+0(%rsp) - movdqa %xmm9, 128+16(%rsp) - movdqa %xmm10, 128+32(%rsp) - movdqa %xmm11, 128+48(%rsp) - movdqa %xmm12, 256+0(%rsp) - movdqa %xmm13, 256+16(%rsp) - movdqa %xmm14, 256+32(%rsp) - movdqa %xmm15, 256+48(%rsp) - xmm_salsa8_core_3way() - paddd 0(%rsp), %xmm0 - paddd 16(%rsp), %xmm1 - paddd 32(%rsp), %xmm2 - paddd 48(%rsp), %xmm3 - paddd 128+0(%rsp), %xmm8 - paddd 128+16(%rsp), %xmm9 - paddd 128+32(%rsp), %xmm10 - paddd 128+48(%rsp), %xmm11 - paddd 256+0(%rsp), %xmm12 - paddd 256+16(%rsp), %xmm13 - paddd 256+32(%rsp), %xmm14 - paddd 256+48(%rsp), %xmm15 - movdqa %xmm0, 0(%rsp) - movdqa %xmm1, 16(%rsp) - movdqa %xmm2, 32(%rsp) - movdqa %xmm3, 48(%rsp) - movdqa %xmm8, 128+0(%rsp) - movdqa %xmm9, 128+16(%rsp) - movdqa %xmm10, 128+32(%rsp) - movdqa %xmm11, 128+48(%rsp) - movdqa %xmm12, 256+0(%rsp) - movdqa %xmm13, 256+16(%rsp) - movdqa %xmm14, 256+32(%rsp) - movdqa %xmm15, 256+48(%rsp) - - pxor 64(%rcx, %rbp), %xmm0 - pxor 80(%rcx, %rbp), %xmm1 - pxor 96(%rcx, %rbp), %xmm2 - pxor 112(%rcx, %rbp), %xmm3 - pxor 64(%rcx, %rbx), %xmm8 - pxor 80(%rcx, %rbx), %xmm9 - pxor 96(%rcx, %rbx), %xmm10 - pxor 112(%rcx, %rbx), %xmm11 - pxor 64(%rcx, %r8), %xmm12 - pxor 80(%rcx, %r8), %xmm13 - pxor 96(%rcx, %r8), %xmm14 - pxor 112(%rcx, %r8), %xmm15 - pxor 64(%rsp), %xmm0 - pxor 80(%rsp), %xmm1 - pxor 96(%rsp), %xmm2 - pxor 112(%rsp), %xmm3 - pxor 128+64(%rsp), %xmm8 - pxor 128+80(%rsp), %xmm9 - pxor 128+96(%rsp), %xmm10 - pxor 128+112(%rsp), %xmm11 - pxor 256+64(%rsp), %xmm12 - pxor 256+80(%rsp), %xmm13 - pxor 256+96(%rsp), %xmm14 - pxor 256+112(%rsp), %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, 128+64(%rsp) - movdqa %xmm9, 128+80(%rsp) - movdqa %xmm10, 128+96(%rsp) - movdqa %xmm11, 128+112(%rsp) - movdqa %xmm12, 256+64(%rsp) - movdqa %xmm13, 256+80(%rsp) - movdqa %xmm14, 256+96(%rsp) - movdqa %xmm15, 256+112(%rsp) - xmm_salsa8_core_3way() - paddd 64(%rsp), %xmm0 - paddd 80(%rsp), %xmm1 - paddd 96(%rsp), %xmm2 - paddd 112(%rsp), %xmm3 - paddd 128+64(%rsp), %xmm8 - paddd 128+80(%rsp), %xmm9 - paddd 128+96(%rsp), %xmm10 - paddd 128+112(%rsp), %xmm11 - paddd 256+64(%rsp), %xmm12 - paddd 256+80(%rsp), %xmm13 - paddd 256+96(%rsp), %xmm14 - paddd 256+112(%rsp), %xmm15 - movdqa %xmm0, 64(%rsp) - movdqa %xmm1, 80(%rsp) - movdqa %xmm2, 96(%rsp) - movdqa %xmm3, 112(%rsp) - movdqa %xmm8, 128+64(%rsp) - movdqa %xmm9, 128+80(%rsp) - movdqa %xmm10, 128+96(%rsp) - movdqa %xmm11, 128+112(%rsp) - movdqa %xmm12, 256+64(%rsp) - movdqa %xmm13, 256+80(%rsp) - movdqa %xmm14, 256+96(%rsp) - movdqa %xmm15, 256+112(%rsp) - - subq $1, %rax - ja scrypt_core_3way_loop2 - - scrypt_shuffle(%rsp, 0, %rdi, 0) - scrypt_shuffle(%rsp, 64, %rdi, 64) - scrypt_shuffle(%rsp, 128, %rsi, 0) - scrypt_shuffle(%rsp, 192, %rsi, 64) - scrypt_shuffle(%rsp, 256, %rdx, 0) - scrypt_shuffle(%rsp, 320, %rdx, 64) - addq $392, %rsp #if defined(WIN64) popq %rsi diff --git a/src/scrypt_mine.cpp b/src/scrypt_mine.cpp index afca59d..c424e49 100644 --- a/src/scrypt_mine.cpp +++ b/src/scrypt_mine.cpp @@ -37,29 +37,9 @@ #include "util.h" #include "net.h" -extern bool fShutdown; -extern bool fGenerateBitcoins; - -extern CBlockIndex* pindexBest; -extern uint32_t nTransactionsUpdated; - - -#if defined(__x86_64__) - -#define SCRYPT_3WAY -#define SCRYPT_BUFFER_SIZE (3 * 131072 + 63) - -extern "C" int scrypt_best_throughput(); -extern "C" void scrypt_core(uint32_t *X, uint32_t *V); -extern "C" void scrypt_core_2way(uint32_t *X, uint32_t *Y, uint32_t *V); -extern "C" void scrypt_core_3way(uint32_t *X, uint32_t *Y, uint32_t *Z, uint32_t *V); - -#elif defined(__i386__) - +#if defined (__x86_64__) || defined (__i386__) #define SCRYPT_BUFFER_SIZE (131072 + 63) - -extern "C" void scrypt_core(uint32_t *X, uint32_t *V); - +extern "C" void scrypt_core(uint32_t *X, uint32_t *V); #endif void *scrypt_buffer_alloc() { @@ -93,116 +73,3 @@ void scrypt_hash(const void* input, size_t inputlen, uint32_t *res, void *scratc { return scrypt(input, inputlen, res, scratchpad); } - -#ifdef SCRYPT_3WAY -static void scrypt_2way(const void *input1, const void *input2, size_t input1len, size_t input2len, uint32_t *res1, uint32_t *res2, void *scratchpad) -{ - uint32_t *V; - uint32_t X[32], Y[32]; - V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (const uint8_t*)input1, input1len, 1, (uint8_t *)X, 128); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (const uint8_t*)input2, input2len, 1, (uint8_t *)Y, 128); - - scrypt_core_2way(X, Y, V); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (uint8_t *)X, 128, 1, (uint8_t*)res1, 32); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (uint8_t *)Y, 128, 1, (uint8_t*)res2, 32); -} - -static void scrypt_3way(const void *input1, const void *input2, const void *input3, - size_t input1len, size_t input2len, size_t input3len, uint32_t *res1, uint32_t *res2, uint32_t *res3, - void *scratchpad) -{ - uint32_t *V; - uint32_t X[32], Y[32], Z[32]; - V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (const uint8_t*)input1, input1len, 1, (uint8_t *)X, 128); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (const uint8_t*)input2, input2len, 1, (uint8_t *)Y, 128); - PBKDF2_SHA256((const uint8_t*)input3, input3len, (const uint8_t*)input3, input3len, 1, (uint8_t *)Z, 128); - - scrypt_core_3way(X, Y, Z, V); - - PBKDF2_SHA256((const uint8_t*)input1, input1len, (uint8_t *)X, 128, 1, (uint8_t*)res1, 32); - PBKDF2_SHA256((const uint8_t*)input2, input2len, (uint8_t *)Y, 128, 1, (uint8_t*)res2, 32); - PBKDF2_SHA256((const uint8_t*)input3, input3len, (uint8_t *)Z, 128, 1, (uint8_t*)res3, 32); -} -#endif - -unsigned int scanhash_scrypt(block_header *pdata, void *scratchbuf, - uint32_t max_nonce, uint32_t &hash_count, - void *result, block_header *res_header) -{ - hash_count = 0; - block_header data = *pdata; - uint32_t hash[8]; - unsigned char *hashc = (unsigned char *) &hash; - -#ifdef SCRYPT_3WAY - block_header data2 = *pdata; - uint32_t hash2[8]; - unsigned char *hashc2 = (unsigned char *) &hash2; - - block_header data3 = *pdata; - uint32_t hash3[8]; - unsigned char *hashc3 = (unsigned char *) &hash3; - - int throughput = scrypt_best_throughput(); -#endif - - uint32_t n = 0; - - while (true) { - - data.nonce = n++; - -#ifdef SCRYPT_3WAY - if (throughput >= 2 && n < max_nonce) { - data2.nonce = n++; - if(throughput >= 3) - { - data3.nonce = n++; - scrypt_3way(&data, &data2, &data3, 80, 80, 80, hash, hash2, hash3, scratchbuf); - hash_count += 3; - - if (hashc3[31] == 0 && hashc3[30] == 0) { - memcpy(result, hash3, 32); - *res_header = data3; - - return data3.nonce; - } - } - else - { - scrypt_2way(&data, &data2, 80, 80, hash, hash2, scratchbuf); - hash_count += 2; - } - - if (hashc2[31] == 0 && hashc2[30] == 0) { - memcpy(result, hash2, 32); - - return data2.nonce; - } - } else { - scrypt(&data, 80, hash, scratchbuf); - hash_count += 1; - } -#else - scrypt(&data, 80, hash, scratchbuf); - hash_count += 1; -#endif - if (hashc[31] == 0 && hashc[30] == 0) { - memcpy(result, hash, 32); - - return data.nonce; - } - - if (n >= max_nonce) { - hash_count = 0xffff + 1; - break; - } - } - - return (unsigned int) -1; -} diff --git a/src/scrypt_mine.h b/src/scrypt_mine.h index 58f25f3..0260cde 100644 --- a/src/scrypt_mine.h +++ b/src/scrypt_mine.h @@ -1,30 +1,24 @@ -#ifndef SCRYPT_MINE_H -#define SCRYPT_MINE_H - -#include -#include - -#include "util.h" -#include "net.h" - -typedef struct -{ - unsigned int version; - uint256 prev_block; - uint256 merkle_root; - unsigned int timestamp; - unsigned int bits; - unsigned int nonce; - -} block_header; - -void *scrypt_buffer_alloc(); -void scrypt_buffer_free(void *scratchpad); - -unsigned int scanhash_scrypt(block_header *pdata, void *scratchbuf, - uint32_t max_nonce, uint32_t &hash_count, - void *result, block_header *res_header); - -void scrypt_hash(const void* input, size_t inputlen, uint32_t *res, void *scratchpad); - -#endif // SCRYPT_MINE_H +#ifndef SCRYPT_MINE_H +#define SCRYPT_MINE_H + +#include +#include + +#include "util.h" +#include "net.h" + +typedef struct +{ + unsigned int version; + uint256 prev_block; + uint256 merkle_root; + unsigned int timestamp; + unsigned int bits; + unsigned int nonce; +} block_header; + +void *scrypt_buffer_alloc(); +void scrypt_buffer_free(void *scratchpad); +void scrypt_hash(const void* input, size_t inputlen, uint32_t *res, void *scratchpad); + +#endif // SCRYPT_MINE_H -- 1.7.1