mirror of
https://github.com/GOSTSec/sgminer
synced 2025-02-09 05:24:16 +00:00
Calculate midstate for algos
This commit is contained in:
parent
fb9b8a339c
commit
20bfe45789
74
algorithm.c
74
algorithm.c
@ -94,6 +94,19 @@ void gen_hash(const unsigned char *data, unsigned int len, unsigned char *hash)
|
||||
sph_sha256_close(&ctx_sha2, hash);
|
||||
}
|
||||
|
||||
void sha256d_midstate(struct work *work)
|
||||
{
|
||||
unsigned char data[64];
|
||||
uint32_t *data32 = (uint32_t *)data;
|
||||
sph_sha256_context ctx;
|
||||
|
||||
flip64(data32, work->data);
|
||||
sph_sha256_init(&ctx);
|
||||
sph_sha256(&ctx, data, 64);
|
||||
memcpy(work->midstate, ctx.val, 32);
|
||||
endian_flip32(work->midstate, work->midstate);
|
||||
}
|
||||
|
||||
#define CL_SET_BLKARG(blkvar) status |= clSetKernelArg(*kernel, num++, sizeof(uint), (void *)&blk->blkvar)
|
||||
#define CL_SET_VARG(args, var) status |= clSetKernelArg(*kernel, num++, args * sizeof(uint), (void *)var)
|
||||
#define CL_SET_ARG_N(n, var) do { status |= clSetKernelArg(*kernel, n, sizeof(var), (void *)&var); } while (0)
|
||||
@ -951,7 +964,7 @@ static cl_int queue_blake_kernel(_clState *clState, dev_blk_ctx *blk, __maybe_un
|
||||
static algorithm_settings_t algos[] = {
|
||||
// kernels starting from this will have difficulty calculated by using litecoin algorithm
|
||||
#define A_SCRYPT(a) \
|
||||
{ a, ALGO_SCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFFFFFFULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, scrypt_regenhash, NULL, queue_scrypt_kernel, gen_hash, append_scrypt_compiler_options }
|
||||
{ a, ALGO_SCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFFFFFFULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, scrypt_regenhash, NULL, NULL, queue_scrypt_kernel, gen_hash, append_scrypt_compiler_options }
|
||||
A_SCRYPT("ckolivas"),
|
||||
A_SCRYPT("alexkarnew"),
|
||||
A_SCRYPT("alexkarnold"),
|
||||
@ -962,33 +975,33 @@ static algorithm_settings_t algos[] = {
|
||||
#undef A_SCRYPT
|
||||
|
||||
#define A_NEOSCRYPT(a) \
|
||||
{ a, ALGO_NEOSCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, neoscrypt_regenhash, NULL, queue_neoscrypt_kernel, gen_hash, append_neoscrypt_compiler_options }
|
||||
{ a, ALGO_NEOSCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, neoscrypt_regenhash, NULL, NULL, queue_neoscrypt_kernel, gen_hash, append_neoscrypt_compiler_options }
|
||||
A_NEOSCRYPT("neoscrypt"),
|
||||
#undef A_NEOSCRYPT
|
||||
|
||||
#define A_PLUCK(a) \
|
||||
{ a, ALGO_PLUCK, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, pluck_regenhash, NULL, queue_pluck_kernel, gen_hash, append_neoscrypt_compiler_options }
|
||||
{ a, ALGO_PLUCK, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, pluck_regenhash, NULL, NULL, queue_pluck_kernel, gen_hash, append_neoscrypt_compiler_options }
|
||||
A_PLUCK("pluck"),
|
||||
#undef A_PLUCK
|
||||
|
||||
#define A_CREDITS(a) \
|
||||
{ a, ALGO_CRE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, credits_regenhash, NULL, queue_credits_kernel, gen_hash, NULL}
|
||||
{ a, ALGO_CRE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, credits_regenhash, NULL, NULL, queue_credits_kernel, gen_hash, NULL}
|
||||
A_CREDITS("credits"),
|
||||
#undef A_CREDITS
|
||||
|
||||
#define A_YESCRYPT(a) \
|
||||
{ a, ALGO_YESCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, yescrypt_regenhash, NULL, queue_yescrypt_kernel, gen_hash, append_neoscrypt_compiler_options}
|
||||
{ a, ALGO_YESCRYPT, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 0, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, yescrypt_regenhash, NULL, NULL, queue_yescrypt_kernel, gen_hash, append_neoscrypt_compiler_options}
|
||||
A_YESCRYPT("yescrypt"),
|
||||
#undef A_YESCRYPT
|
||||
|
||||
#define A_YESCRYPT_MULTI(a) \
|
||||
{ a, ALGO_YESCRYPT_MULTI, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 6,-1,CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE , yescrypt_regenhash, NULL, queue_yescrypt_multikernel, gen_hash, append_neoscrypt_compiler_options}
|
||||
{ a, ALGO_YESCRYPT_MULTI, "", 1, 65536, 65536, 0, 0, 0xFF, 0xFFFF000000000000ULL, 0x0000ffffUL, 6,-1,CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE , yescrypt_regenhash, NULL, NULL, queue_yescrypt_multikernel, gen_hash, append_neoscrypt_compiler_options}
|
||||
A_YESCRYPT_MULTI("yescrypt-multi"),
|
||||
#undef A_YESCRYPT_MULTI
|
||||
|
||||
// kernels starting from this will have difficulty calculated by using quarkcoin algorithm
|
||||
#define A_QUARK(a, b) \
|
||||
{ a, ALGO_QUARK, "", 256, 256, 256, 0, 0, 0xFF, 0xFFFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, queue_sph_kernel, gen_hash, append_x11_compiler_options }
|
||||
{ a, ALGO_QUARK, "", 256, 256, 256, 0, 0, 0xFF, 0xFFFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, NULL, queue_sph_kernel, gen_hash, append_x11_compiler_options }
|
||||
A_QUARK("quarkcoin", quarkcoin_regenhash),
|
||||
A_QUARK("qubitcoin", qubitcoin_regenhash),
|
||||
A_QUARK("animecoin", animecoin_regenhash),
|
||||
@ -997,51 +1010,51 @@ static algorithm_settings_t algos[] = {
|
||||
|
||||
// kernels starting from this will have difficulty calculated by using bitcoin algorithm
|
||||
#define A_DARK(a, b) \
|
||||
{ a, ALGO_X11, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, queue_sph_kernel, gen_hash, append_x11_compiler_options }
|
||||
{ a, ALGO_X11, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, NULL, queue_sph_kernel, gen_hash, append_x11_compiler_options }
|
||||
A_DARK("darkcoin", darkcoin_regenhash),
|
||||
A_DARK("inkcoin", inkcoin_regenhash),
|
||||
A_DARK("myriadcoin-groestl", myriadcoin_groestl_regenhash),
|
||||
#undef A_DARK
|
||||
|
||||
{ "twecoin", ALGO_TWE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, twecoin_regenhash, NULL, queue_sph_kernel, sha256, NULL },
|
||||
{ "maxcoin", ALGO_KECCAK, "", 1, 256, 1, 4, 15, 0x0F, 0xFFFFULL, 0x000000ffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, maxcoin_regenhash, NULL, queue_maxcoin_kernel, sha256, NULL },
|
||||
{ "twecoin", ALGO_TWE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, twecoin_regenhash, NULL, NULL, queue_sph_kernel, sha256, NULL },
|
||||
{ "maxcoin", ALGO_KECCAK, "", 1, 256, 1, 4, 15, 0x0F, 0xFFFFULL, 0x000000ffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, maxcoin_regenhash, NULL, NULL, queue_maxcoin_kernel, sha256, NULL },
|
||||
|
||||
{ "darkcoin-mod", ALGO_X11, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, darkcoin_regenhash, NULL, queue_darkcoin_mod_kernel, gen_hash, append_x11_compiler_options },
|
||||
{ "darkcoin-mod", ALGO_X11, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, darkcoin_regenhash, NULL, NULL, queue_darkcoin_mod_kernel, gen_hash, append_x11_compiler_options },
|
||||
|
||||
{ "marucoin", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, marucoin_regenhash, NULL, queue_sph_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "marucoin-mod", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 12, 8 * 16 * 4194304, 0, marucoin_regenhash, NULL, queue_marucoin_mod_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "marucoin-modold", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, marucoin_regenhash, NULL, queue_marucoin_mod_old_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "marucoin", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, marucoin_regenhash, NULL, NULL, queue_sph_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "marucoin-mod", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 12, 8 * 16 * 4194304, 0, marucoin_regenhash, NULL, NULL, queue_marucoin_mod_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "marucoin-modold", ALGO_X13, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, marucoin_regenhash, NULL, NULL, queue_marucoin_mod_old_kernel, gen_hash, append_x13_compiler_options },
|
||||
|
||||
{ "x14", ALGO_X14, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 13, 8 * 16 * 4194304, 0, x14_regenhash, NULL, queue_x14_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "x14old", ALGO_X14, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, x14_regenhash, NULL, queue_x14_old_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "x14", ALGO_X14, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 13, 8 * 16 * 4194304, 0, x14_regenhash, NULL, NULL, queue_x14_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "x14old", ALGO_X14, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 8 * 16 * 4194304, 0, x14_regenhash, NULL, NULL, queue_x14_old_kernel, gen_hash, append_x13_compiler_options },
|
||||
|
||||
{ "bitblock", ALGO_X15, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 14, 4 * 16 * 4194304, 0, bitblock_regenhash, NULL, queue_bitblock_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "bitblockold", ALGO_X15, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 4 * 16 * 4194304, 0, bitblock_regenhash, NULL, queue_bitblockold_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "bitblock", ALGO_X15, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 14, 4 * 16 * 4194304, 0, bitblock_regenhash, NULL, NULL, queue_bitblock_kernel, gen_hash, append_x13_compiler_options },
|
||||
{ "bitblockold", ALGO_X15, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 10, 4 * 16 * 4194304, 0, bitblock_regenhash, NULL, NULL, queue_bitblockold_kernel, gen_hash, append_x13_compiler_options },
|
||||
|
||||
{ "talkcoin-mod", ALGO_NIST, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 8 * 16 * 4194304, 0, talkcoin_regenhash, NULL, queue_talkcoin_mod_kernel, gen_hash, append_x11_compiler_options },
|
||||
{ "talkcoin-mod", ALGO_NIST, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 8 * 16 * 4194304, 0, talkcoin_regenhash, NULL, NULL, queue_talkcoin_mod_kernel, gen_hash, append_x11_compiler_options },
|
||||
|
||||
{ "fresh", ALGO_FRESH, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 4 * 16 * 4194304, 0, fresh_regenhash, NULL, queue_fresh_kernel, gen_hash, NULL },
|
||||
{ "fresh", ALGO_FRESH, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 4 * 16 * 4194304, 0, fresh_regenhash, NULL, NULL, queue_fresh_kernel, gen_hash, NULL },
|
||||
|
||||
{ "lyra2re", ALGO_LYRA2RE, "", 1, 128, 128, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 2 * 8 * 4194304, 0, lyra2re_regenhash, precalc_hash_blake256, queue_lyra2re_kernel, gen_hash, NULL },
|
||||
{ "lyra2rev2", ALGO_LYRA2REV2, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 6, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, lyra2rev2_regenhash, precalc_hash_blake256, queue_lyra2rev2_kernel, gen_hash, append_neoscrypt_compiler_options },
|
||||
{ "lyra2re", ALGO_LYRA2RE, "", 1, 128, 128, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 4, 2 * 8 * 4194304, 0, lyra2re_regenhash, blake256_midstate, blake256_prepare_work, queue_lyra2re_kernel, gen_hash, NULL },
|
||||
{ "lyra2rev2", ALGO_LYRA2REV2, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 6, -1, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, lyra2rev2_regenhash, blake256_midstate, blake256_prepare_work, queue_lyra2rev2_kernel, gen_hash, append_neoscrypt_compiler_options },
|
||||
|
||||
// kernels starting from this will have difficulty calculated by using fuguecoin algorithm
|
||||
#define A_FUGUE(a, b, c) \
|
||||
{ a, ALGO_FUGUE, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, queue_sph_kernel, c, NULL }
|
||||
{ a, ALGO_FUGUE, "", 1, 256, 256, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 0, 0, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, b, NULL, NULL, queue_sph_kernel, c, NULL }
|
||||
A_FUGUE("fuguecoin", fuguecoin_regenhash, sha256),
|
||||
A_FUGUE("groestlcoin", groestlcoin_regenhash, sha256),
|
||||
A_FUGUE("diamond", groestlcoin_regenhash, gen_hash),
|
||||
#undef A_FUGUE
|
||||
|
||||
{ "whirlcoin", ALGO_WHIRL, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 3, 8 * 16 * 4194304, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, whirlcoin_regenhash, NULL, queue_whirlcoin_kernel, sha256, NULL },
|
||||
{ "whirlpoolx", ALGO_WHIRLPOOLX, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000FFFFUL, 0, 0, 0, whirlpoolx_regenhash, NULL, queue_whirlpoolx_kernel, gen_hash, NULL },
|
||||
{ "whirlcoin", ALGO_WHIRL, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000ffffUL, 3, 8 * 16 * 4194304, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, whirlcoin_regenhash, NULL, NULL, queue_whirlcoin_kernel, sha256, NULL },
|
||||
{ "whirlpoolx", ALGO_WHIRLPOOLX, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x0000FFFFUL, 0, 0, 0, whirlpoolx_regenhash, NULL, NULL, queue_whirlpoolx_kernel, gen_hash, NULL },
|
||||
|
||||
{ "blake256r8", ALGO_BLAKECOIN, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x000000ffUL, 0, 128, 0, blakecoin_regenhash, precalc_hash_blakecoin, queue_blake_kernel, sha256, NULL },
|
||||
{ "blake256r14", ALGO_BLAKE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x00000000UL, 0, 128, 0, blake256_regenhash, precalc_hash_blake256, queue_blake_kernel, gen_hash, NULL },
|
||||
{ "vanilla", ALGO_VANILLA, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x000000ffUL, 0, 128, 0, blakecoin_regenhash, precalc_hash_blakecoin, queue_blake_kernel, gen_hash, NULL },
|
||||
{ "blake256r8", ALGO_BLAKECOIN, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x000000ffUL, 0, 128, 0, blakecoin_regenhash, blakecoin_midstate, blakecoin_prepare_work, queue_blake_kernel, sha256, NULL },
|
||||
{ "blake256r14", ALGO_BLAKE, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x00000000UL, 0, 128, 0, blake256_regenhash, blake256_midstate, blake256_prepare_work, queue_blake_kernel, gen_hash, NULL },
|
||||
{ "vanilla", ALGO_VANILLA, "", 1, 1, 1, 0, 0, 0xFF, 0xFFFFULL, 0x000000ffUL, 0, 128, 0, blakecoin_regenhash, blakecoin_midstate, blakecoin_prepare_work, queue_blake_kernel, gen_hash, NULL },
|
||||
|
||||
// Terminator (do not remove)
|
||||
{ NULL, ALGO_UNK, "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL }
|
||||
{ NULL, ALGO_UNK, "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
void copy_algorithm_settings(algorithm_t* dest, const char* algo)
|
||||
@ -1069,7 +1082,8 @@ void copy_algorithm_settings(algorithm_t* dest, const char* algo)
|
||||
dest->rw_buffer_size = src->rw_buffer_size;
|
||||
dest->cq_properties = src->cq_properties;
|
||||
dest->regenhash = src->regenhash;
|
||||
dest->precalc_hash = src->precalc_hash;
|
||||
dest->calc_midstate = src->calc_midstate;
|
||||
dest->prepare_work = src->prepare_work;
|
||||
dest->queue_kernel = src->queue_kernel;
|
||||
dest->gen_hash = src->gen_hash;
|
||||
dest->set_compile_options = src->set_compile_options;
|
||||
|
@ -70,7 +70,8 @@ typedef struct _algorithm_t {
|
||||
long rw_buffer_size;
|
||||
cl_command_queue_properties cq_properties;
|
||||
void(*regenhash)(struct work *);
|
||||
void(*precalc_hash)(struct _dev_blk_ctx *, uint32_t *, uint32_t *);
|
||||
void(*calc_midstate)(struct work *);
|
||||
void(*prepare_work)(struct _dev_blk_ctx *, uint32_t *, uint32_t *);
|
||||
cl_int(*queue_kernel)(struct __clState *, struct _dev_blk_ctx *, cl_uint);
|
||||
void(*gen_hash)(const unsigned char *, unsigned int, unsigned char *);
|
||||
void(*set_compile_options)(struct _build_kernel_data *, struct cgpu_info *, struct _algorithm_t *);
|
||||
@ -93,7 +94,8 @@ typedef struct _algorithm_settings_t
|
||||
long rw_buffer_size;
|
||||
cl_command_queue_properties cq_properties;
|
||||
void (*regenhash)(struct work *);
|
||||
void (*precalc_hash)(struct _dev_blk_ctx *, uint32_t *, uint32_t *);
|
||||
void (*calc_midstate)(struct work *);
|
||||
void (*prepare_work)(struct _dev_blk_ctx *, uint32_t *, uint32_t *);
|
||||
cl_int (*queue_kernel)(struct __clState *, struct _dev_blk_ctx *, cl_uint);
|
||||
void (*gen_hash)(const unsigned char *, unsigned int, unsigned char *);
|
||||
void (*set_compile_options)(build_kernel_data *, struct cgpu_info *, algorithm_t *);
|
||||
|
@ -62,24 +62,35 @@ inline void blake256hash(void *state, const void *input)
|
||||
sph_blake256_close(&ctx_blake, state);
|
||||
}
|
||||
|
||||
void precalc_hash_blake256(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata)
|
||||
void blake256_midstate(struct work *work)
|
||||
{
|
||||
sph_blake256_context ctx_blake;
|
||||
uint32_t data[16];
|
||||
sph_blake256_context ctx_blake;
|
||||
uint32_t data[16];
|
||||
|
||||
be32enc_vect(data, (const uint32_t *)pdata, 16);
|
||||
be32enc_vect(data, (const uint32_t *)work->data, 19);
|
||||
|
||||
sph_blake256_init(&ctx_blake);
|
||||
sph_blake256(&ctx_blake, data, 64);
|
||||
sph_blake256_init(&ctx_blake);
|
||||
sph_blake256 (&ctx_blake, (unsigned char *)data, 64);
|
||||
|
||||
blk->ctx_a = ctx_blake.H[0];
|
||||
blk->ctx_b = ctx_blake.H[1];
|
||||
blk->ctx_c = ctx_blake.H[2];
|
||||
blk->ctx_d = ctx_blake.H[3];
|
||||
blk->ctx_e = ctx_blake.H[4];
|
||||
blk->ctx_f = ctx_blake.H[5];
|
||||
blk->ctx_g = ctx_blake.H[6];
|
||||
blk->ctx_h = ctx_blake.H[7];
|
||||
memcpy(work->midstate, ctx_blake.H, 32);
|
||||
endian_flip32(work->midstate, work->midstate);
|
||||
|
||||
char *strdata, *strmidstate;
|
||||
strdata = bin2hex(work->data, 80);
|
||||
strmidstate = bin2hex(work->midstate, 32);
|
||||
applog(LOG_DEBUG, "data %s midstate %s", strdata, strmidstate);
|
||||
}
|
||||
|
||||
void blake256_prepare_work(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata)
|
||||
{
|
||||
blk->ctx_a = state[0];
|
||||
blk->ctx_b = state[1];
|
||||
blk->ctx_c = state[2];
|
||||
blk->ctx_d = state[3];
|
||||
blk->ctx_e = state[4];
|
||||
blk->ctx_f = state[5];
|
||||
blk->ctx_g = state[6];
|
||||
blk->ctx_h = state[7];
|
||||
|
||||
blk->cty_a = pdata[16];
|
||||
blk->cty_b = pdata[17];
|
||||
|
@ -4,7 +4,8 @@
|
||||
#include "miner.h"
|
||||
|
||||
extern int blake256_test(unsigned char *pdata, const unsigned char *ptarget, uint32_t nonce);
|
||||
extern void precalc_hash_blake256(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata);
|
||||
extern void blake256_prepare_work(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata);
|
||||
extern void blake256_midstate(struct work *work);
|
||||
extern void blake256_regenhash(struct work *work);
|
||||
|
||||
#endif /* BLAKE256_H */
|
@ -62,24 +62,35 @@ inline void blakecoinhash(void *state, const void *input)
|
||||
sph_blake256r8_close(&ctx_blake, state);
|
||||
}
|
||||
|
||||
void precalc_hash_blakecoin(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata)
|
||||
void blakecoin_midstate(struct work *work)
|
||||
{
|
||||
sph_blake256_context ctx_blake;
|
||||
uint32_t data[16];
|
||||
sph_blake256_context ctx_blake;
|
||||
uint32_t data[16];
|
||||
|
||||
be32enc_vect(data, (const uint32_t *)pdata, 16);
|
||||
be32enc_vect(data, (const uint32_t *)work->data, 19);
|
||||
|
||||
sph_blake256_init(&ctx_blake);
|
||||
sph_blake256r8(&ctx_blake, data, 64);
|
||||
sph_blake256_init(&ctx_blake);
|
||||
sph_blake256r8 (&ctx_blake, (unsigned char *)data, 64);
|
||||
|
||||
blk->ctx_a = ctx_blake.H[0];
|
||||
blk->ctx_b = ctx_blake.H[1];
|
||||
blk->ctx_c = ctx_blake.H[2];
|
||||
blk->ctx_d = ctx_blake.H[3];
|
||||
blk->ctx_e = ctx_blake.H[4];
|
||||
blk->ctx_f = ctx_blake.H[5];
|
||||
blk->ctx_g = ctx_blake.H[6];
|
||||
blk->ctx_h = ctx_blake.H[7];
|
||||
memcpy(work->midstate, ctx_blake.H, 32);
|
||||
endian_flip32(work->midstate, work->midstate);
|
||||
|
||||
char *strdata, *strmidstate;
|
||||
strdata = bin2hex(work->data, 80);
|
||||
strmidstate = bin2hex(work->midstate, 32);
|
||||
applog(LOG_DEBUG, "data %s midstate %s", strdata, strmidstate);
|
||||
}
|
||||
|
||||
void blakecoin_prepare_work(dev_blk_ctx *blk, uint32_t *state, uint32_t *pdata)
|
||||
{
|
||||
blk->ctx_a = state[0];
|
||||
blk->ctx_b = state[1];
|
||||
blk->ctx_c = state[2];
|
||||
blk->ctx_d = state[3];
|
||||
blk->ctx_e = state[4];
|
||||
blk->ctx_f = state[5];
|
||||
blk->ctx_g = state[6];
|
||||
blk->ctx_h = state[7];
|
||||
|
||||
blk->cty_a = pdata[16];
|
||||
blk->cty_b = pdata[17];
|
||||
|
@ -4,7 +4,8 @@
|
||||
#include "miner.h"
|
||||
|
||||
extern int blakecoin_test(unsigned char *pdata, const unsigned char *ptarget, uint32_t nonce);
|
||||
extern void precalc_hash_blakecoin(dev_blk_ctx *blk, uint32_t *state, uint32_t *data);
|
||||
extern void blakecoin_prepare_work(dev_blk_ctx *blk, uint32_t *state, uint32_t *data);
|
||||
extern void blakecoin_midstate(struct work *work);
|
||||
extern void blakecoin_regenhash(struct work *work);
|
||||
|
||||
#endif /* BLAKECOIN_H */
|
@ -1367,7 +1367,7 @@ static bool opencl_thread_init(struct thr_info *thr)
|
||||
static bool opencl_prepare_work(struct thr_info __maybe_unused *thr, struct work *work)
|
||||
{
|
||||
work->blk.work = work;
|
||||
if (work->pool->algorithm.precalc_hash) work->pool->algorithm.precalc_hash(&work->blk, 0, (uint32_t *)(work->data));
|
||||
if (work->pool->algorithm.prepare_work) work->pool->algorithm.prepare_work(&work->blk, (uint32_t *)(work->midstate), (uint32_t *)(work->data));
|
||||
thr->pool_no = work->pool->pool_no;
|
||||
return true;
|
||||
}
|
||||
|
23
sgminer.c
23
sgminer.c
@ -1906,20 +1906,6 @@ static bool jobj_binary(const json_t *obj, const char *key,
|
||||
}
|
||||
#endif
|
||||
|
||||
static void calc_midstate(struct work *work)
|
||||
{
|
||||
unsigned char data[64];
|
||||
uint32_t *data32 = (uint32_t *)data;
|
||||
sph_sha256_context ctx;
|
||||
|
||||
flip64(data32, work->data);
|
||||
sph_sha256_init(&ctx);
|
||||
sph_sha256(&ctx, data, 64);
|
||||
memcpy(work->midstate, ctx.val, 32);
|
||||
endian_flip32(work->midstate, work->midstate);
|
||||
}
|
||||
|
||||
|
||||
static struct work *make_work(void)
|
||||
{
|
||||
struct work *w = (struct work *)calloc(1, sizeof(struct work));
|
||||
@ -2147,10 +2133,7 @@ static void gen_gbt_work(struct pool *pool, struct work *work)
|
||||
free(header);
|
||||
}
|
||||
|
||||
// Neoscrypt doesn't calc_midstate()
|
||||
if (pool->algorithm.type != ALGO_NEOSCRYPT) {
|
||||
calc_midstate(work);
|
||||
}
|
||||
if (pool->algorithm.calc_midstate) pool->algorithm.calc_midstate(work);
|
||||
local_work++;
|
||||
work->pool = pool;
|
||||
work->gbt = true;
|
||||
@ -2276,7 +2259,7 @@ static bool getwork_decode(json_t *res_val, struct work *work)
|
||||
if (opt_morenotices) {
|
||||
applog(LOG_DEBUG, "%s: Calculating midstate locally", isnull(get_pool_name(work->pool), ""));
|
||||
}
|
||||
calc_midstate(work);
|
||||
if (work->pool->algorithm.calc_midstate) work->pool->algorithm.calc_midstate(work);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6143,7 +6126,7 @@ static void gen_stratum_work(struct pool *pool, struct work *work)
|
||||
if (pool->algorithm.type == ALGO_NEOSCRYPT) {
|
||||
set_target_neoscrypt(work->target, work->sdiff, work->thr_id);
|
||||
} else {
|
||||
calc_midstate(work);
|
||||
if (pool->algorithm.calc_midstate) pool->algorithm.calc_midstate(work);
|
||||
set_target(work->target, work->sdiff, pool->algorithm.diff_multiplier2, work->thr_id);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user