Remove PoW CPU miner
authoralex <alex@alex-VirtualBox.(none)>
Sat, 15 Jun 2013 14:20:26 +0000 (18:20 +0400)
committeralex <alex@alex-VirtualBox.(none)>
Sat, 15 Jun 2013 14:20:26 +0000 (18:20 +0400)
src/main.cpp
src/scrypt-x86_64.S
src/scrypt_mine.cpp
src/scrypt_mine.h

index a0a2509..306a7bf 100644 (file)
@@ -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<CBlock> 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)
index f0a3fdd..6ae2f00 100644 (file)
@@ -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
index afca59d..c424e49 100644 (file)
 #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;
-}
index 58f25f3..0260cde 100644 (file)
@@ -1,30 +1,24 @@
-#ifndef SCRYPT_MINE_H\r
-#define SCRYPT_MINE_H\r
-\r
-#include <stdint.h>\r
-#include <stdlib.h>\r
-\r
-#include "util.h"\r
-#include "net.h"\r
-\r
-typedef struct\r
-{\r
-    unsigned int version;\r
-    uint256 prev_block;\r
-    uint256 merkle_root;\r
-    unsigned int timestamp;\r
-    unsigned int bits;\r
-    unsigned int nonce;\r
-\r
-} block_header;\r
-\r
-void *scrypt_buffer_alloc();\r
-void scrypt_buffer_free(void *scratchpad);\r
-\r
-unsigned int scanhash_scrypt(block_header *pdata, void *scratchbuf,
-    uint32_t max_nonce, uint32_t &hash_count,
-    void *result, block_header *res_header);
-\r
-void scrypt_hash(const void* input, size_t inputlen, uint32_t *res, void *scratchpad);\r
-\r
-#endif // SCRYPT_MINE_H\r
+#ifndef SCRYPT_MINE_H
+#define SCRYPT_MINE_H
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#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