Integrated new Algos (#224)
- Added XLT v5/9 with autodetect(algo: "cryptonight", variant: "xtl" (autodetect), "xtlv9" (force v9)) - Added cn-lite variant UPX/uPlexa (algo: "cryptonight-lite", variant "upx") - Added force-pow-variant parameter to force usage of the variant from the config and skip parsing of pow/variant from job/pool
This commit is contained in:
parent
d36797d696
commit
1273e45e46
30 changed files with 3372 additions and 52 deletions
|
@ -57,10 +57,17 @@ extern "C"
|
|||
void cnv2_mainloop_ryzen_asm(ScratchPad* ctx0);
|
||||
void cnv2_mainloop_bulldozer_asm(ScratchPad* ctx0);
|
||||
void cnv2_double_mainloop_sandybridge_asm(ScratchPad* ctx0, ScratchPad* ctx1);
|
||||
void cn_fastv2_mainloop_ivybridge_asm(ScratchPad* ctx0);
|
||||
void cn_fastv2_mainloop_ryzen_asm(ScratchPad* ctx0);
|
||||
void cn_fastv2_mainloop_bulldozer_asm(ScratchPad* ctx0);
|
||||
void cn_fastv2_double_mainloop_sandybridge_asm(ScratchPad* ctx0, ScratchPad* ctx1);
|
||||
void cn_liteupx_mainloop_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cnv1_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cn_fast_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cn_litev1_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cnv2_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cn_fastv2_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
void cn_liteupx_mainloop_soft_aes_sandybridge_asm(ScratchPad* ctx0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -768,7 +775,8 @@ public:
|
|||
uint64_t* h[NUM_HASH_BLOCKS];
|
||||
uint64_t al[NUM_HASH_BLOCKS];
|
||||
uint64_t ah[NUM_HASH_BLOCKS];
|
||||
uint64_t idx[NUM_HASH_BLOCKS];
|
||||
uint64_t idx[NUM_HASH_BLOCKS];CryptoNightMultiHash<0x40000, POW_DEFAULT_INDEX_SHIFT, MEMORY_LITE, 0xFFFF0, true, NUM_HASH_BLOCKS>::hashLiteTube(
|
||||
input, size, output, scratchPad);
|
||||
uint64_t sqrt_result[NUM_HASH_BLOCKS];
|
||||
__m128i bx0[NUM_HASH_BLOCKS];
|
||||
__m128i bx1[NUM_HASH_BLOCKS];
|
||||
|
@ -875,6 +883,15 @@ public:
|
|||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
@ -1433,6 +1450,8 @@ public:
|
|||
} else {
|
||||
cn_litev1_mainloop_soft_aes_sandybridge_asm(scratchPad[0]);
|
||||
}
|
||||
} else {
|
||||
cn_liteupx_mainloop_soft_aes_sandybridge_asm(scratchPad[0]);
|
||||
}
|
||||
} else {
|
||||
if (ITERATIONS == 0x80000) {
|
||||
|
@ -1443,6 +1462,8 @@ public:
|
|||
} else {
|
||||
cn_litev1_mainloop_sandybridge_asm(scratchPad[0]);
|
||||
}
|
||||
} else {
|
||||
cn_liteupx_mainloop_sandybridge_asm(scratchPad[0]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1559,6 +1580,40 @@ public:
|
|||
extra_hashes[scratchPad[0]->state[0] & 3](scratchPad[0]->state, 200, output);
|
||||
}
|
||||
|
||||
// single asm
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
const uint8_t* l = scratchPad[0]->memory;
|
||||
uint64_t* h = reinterpret_cast<uint64_t*>(scratchPad[0]->state);
|
||||
|
||||
keccak(static_cast<const uint8_t*>(input), (int) size, scratchPad[0]->state, 200);
|
||||
cn_explode_scratchpad<MEM, SOFT_AES>((__m128i*) h, (__m128i*) l);
|
||||
|
||||
#ifndef XMRIG_NO_ASM
|
||||
if (asmOptimization == AsmOptimization::ASM_INTEL) {
|
||||
if (SOFT_AES) {
|
||||
scratchPad[0]->input = input;
|
||||
scratchPad[0]->t_fn = (const uint32_t*)saes_table;
|
||||
cn_fastv2_mainloop_soft_aes_sandybridge_asm(scratchPad[0]);
|
||||
} else {
|
||||
cn_fastv2_mainloop_ivybridge_asm(scratchPad[0]);
|
||||
}
|
||||
} else if (asmOptimization == AsmOptimization::ASM_RYZEN) {
|
||||
cn_fastv2_mainloop_ryzen_asm(scratchPad[0]);
|
||||
} else if (asmOptimization == AsmOptimization::ASM_BULLDOZER) {
|
||||
cn_fastv2_mainloop_bulldozer_asm(scratchPad[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
cn_implode_scratchpad<MEM, SOFT_AES>((__m128i*) l, (__m128i*) h);
|
||||
keccakf(h, 24);
|
||||
extra_hashes[scratchPad[0]->state[0] & 3](scratchPad[0]->state, 200, output);
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
@ -2278,6 +2333,38 @@ public:
|
|||
extra_hashes[scratchPad[1]->state[0] & 3](scratchPad[1]->state, 200, output + 32);
|
||||
}
|
||||
|
||||
// double asm
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
keccak((const uint8_t*) input, (int) size, scratchPad[0]->state, 200);
|
||||
keccak((const uint8_t*) input + size, (int) size, scratchPad[1]->state, 200);
|
||||
|
||||
const uint8_t* l0 = scratchPad[0]->memory;
|
||||
const uint8_t* l1 = scratchPad[1]->memory;
|
||||
uint64_t* h0 = reinterpret_cast<uint64_t*>(scratchPad[0]->state);
|
||||
uint64_t* h1 = reinterpret_cast<uint64_t*>(scratchPad[1]->state);
|
||||
|
||||
cn_explode_scratchpad<MEM, SOFT_AES>((__m128i*) h0, (__m128i*) l0);
|
||||
cn_explode_scratchpad<MEM, SOFT_AES>((__m128i*) h1, (__m128i*) l1);
|
||||
|
||||
#ifndef XMRIG_NO_ASM
|
||||
cn_fastv2_double_mainloop_sandybridge_asm(scratchPad[0], scratchPad[1]);
|
||||
#endif
|
||||
|
||||
cn_implode_scratchpad<MEM, SOFT_AES>((__m128i*) l0, (__m128i*) h0);
|
||||
cn_implode_scratchpad<MEM, SOFT_AES>((__m128i*) l1, (__m128i*) h1);
|
||||
|
||||
keccakf(h0, 24);
|
||||
keccakf(h1, 24);
|
||||
|
||||
extra_hashes[scratchPad[0]->state[0] & 3](scratchPad[0]->state, 200, output);
|
||||
extra_hashes[scratchPad[1]->state[0] & 3](scratchPad[1]->state, 200, output + 32);
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
@ -3225,6 +3312,15 @@ public:
|
|||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
@ -4480,6 +4576,15 @@ public:
|
|||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
@ -5405,6 +5510,15 @@ public:
|
|||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashPowFastV2_asm(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
ScratchPad** __restrict__ scratchPad,
|
||||
AsmOptimization asmOptimization)
|
||||
{
|
||||
// not supported
|
||||
}
|
||||
|
||||
inline static void hashLiteTube(const uint8_t* __restrict__ input,
|
||||
size_t size,
|
||||
uint8_t* __restrict__ output,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue