Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tpruvot
GitHub Repository: tpruvot/cpuminer-multi
Path: blob/linux/scryptjane/scrypt-jane-salsa.h
1201 views
1
#define SCRYPT_MIX_BASE "Salsa20/8"
2
3
typedef uint32_t scrypt_mix_word_t;
4
5
#define SCRYPT_WORDTO8_LE U32TO8_LE
6
#define SCRYPT_WORD_ENDIAN_SWAP U32_SWAP
7
8
#define SCRYPT_BLOCK_BYTES 64
9
#define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t))
10
11
/* must have these here in case block bytes is ever != 64 */
12
#include "scrypt-jane-romix-basic.h"
13
14
#include "scrypt-jane-mix_salsa-avx.h"
15
#include "scrypt-jane-mix_salsa-sse2.h"
16
#include "scrypt-jane-mix_salsa.h"
17
18
#if defined(SCRYPT_SALSA_AVX)
19
#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx
20
#define SCRYPT_ROMIX_FN scrypt_ROMix_avx
21
#define SCRYPT_ROMIX_TANGLE_FN salsa_core_tangle_sse2
22
#define SCRYPT_ROMIX_UNTANGLE_FN salsa_core_tangle_sse2
23
#include "scrypt-jane-romix-template.h"
24
#endif
25
26
#if defined(SCRYPT_SALSA_SSE2)
27
#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_sse2
28
#define SCRYPT_ROMIX_FN scrypt_ROMix_sse2
29
#define SCRYPT_MIX_FN salsa_core_sse2
30
#define SCRYPT_ROMIX_TANGLE_FN salsa_core_tangle_sse2
31
#define SCRYPT_ROMIX_UNTANGLE_FN salsa_core_tangle_sse2
32
#include "scrypt-jane-romix-template.h"
33
#endif
34
35
/* cpu agnostic */
36
#define SCRYPT_ROMIX_FN scrypt_ROMix_basic
37
#define SCRYPT_MIX_FN salsa_core_basic
38
#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_convert_endian
39
#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_convert_endian
40
#include "scrypt-jane-romix-template.h"
41
42
#if !defined(SCRYPT_CHOOSE_COMPILETIME)
43
static scrypt_ROMixfn
44
scrypt_getROMix() {
45
size_t cpuflags = detect_cpu();
46
47
#if defined(SCRYPT_SALSA_AVX)
48
if (cpuflags & cpu_avx)
49
return scrypt_ROMix_avx;
50
else
51
#endif
52
53
#if defined(SCRYPT_SALSA_SSE2)
54
if (cpuflags & cpu_sse2)
55
return scrypt_ROMix_sse2;
56
else
57
#endif
58
59
return scrypt_ROMix_basic;
60
}
61
#endif
62
63
64
#if defined(SCRYPT_TEST_SPEED)
65
static size_t
66
available_implementations() {
67
size_t cpuflags = detect_cpu();
68
size_t flags = 0;
69
70
#if defined(SCRYPT_SALSA_AVX)
71
if (cpuflags & cpu_avx)
72
flags |= cpu_avx;
73
#endif
74
75
#if defined(SCRYPT_SALSA_SSE2)
76
if (cpuflags & cpu_sse2)
77
flags |= cpu_sse2;
78
#endif
79
80
return flags;
81
}
82
#endif
83
84
85
static int
86
scrypt_test_mix() {
87
static const uint8_t expected[16] = {
88
0x41,0x1f,0x2e,0xa3,0xab,0xa3,0x1a,0x34,0x87,0x1d,0x8a,0x1c,0x76,0xa0,0x27,0x66,
89
};
90
91
int ret = 1;
92
size_t cpuflags = detect_cpu();
93
94
#if defined(SCRYPT_SALSA_AVX)
95
if (cpuflags & cpu_avx)
96
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx, salsa_core_tangle_sse2, salsa_core_tangle_sse2, expected);
97
#endif
98
99
#if defined(SCRYPT_SALSA_SSE2)
100
if (cpuflags & cpu_sse2)
101
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_sse2, salsa_core_tangle_sse2, salsa_core_tangle_sse2, expected);
102
#endif
103
104
#if defined(SCRYPT_SALSA_BASIC)
105
ret &= scrypt_test_mix_instance(scrypt_ChunkMix_basic, scrypt_romix_convert_endian, scrypt_romix_convert_endian, expected);
106
#endif
107
108
return ret;
109
}
110
111