Files
1e7911e653 XMR-Stak 2.3.0 RC
Co-authored-by: psychocrypt <psychocryptHPC@gmail.com>
Co-authored-by: fireice-uk <fireice-uk@users.noreply.github.com>
Co-authored-by: Lee Clagett <code@leeclagett.com>
Co-authored-by: curie-kief <curie-kief@users.noreply.github.com>
2018-03-25 13:28:40 +01:00

124 lines
3.1 KiB
C++

#pragma once
#include <stddef.h>
#include <inttypes.h>
#include <type_traits>
enum xmrstak_algo
{
invalid_algo = 0,
cryptonight = 1,
cryptonight_lite = 2,
cryptonight_monero = 3,
cryptonight_heavy = 4
};
// define aeon settings
constexpr size_t CRYPTONIGHT_LITE_MEMORY = 1 * 1024 * 1024;
constexpr uint32_t CRYPTONIGHT_LITE_MASK = 0xFFFF0;
constexpr uint32_t CRYPTONIGHT_LITE_ITER = 0x40000;
constexpr size_t CRYPTONIGHT_MEMORY = 2 * 1024 * 1024;
constexpr uint32_t CRYPTONIGHT_MASK = 0x1FFFF0;
constexpr uint32_t CRYPTONIGHT_ITER = 0x80000;
constexpr size_t CRYPTONIGHT_HEAVY_MEMORY = 4 * 1024 * 1024;
constexpr uint32_t CRYPTONIGHT_HEAVY_MASK = 0x3FFFF0;
constexpr uint32_t CRYPTONIGHT_HEAVY_ITER = 0x40000;
template<xmrstak_algo ALGO>
inline constexpr size_t cn_select_memory() { return 0; }
template<>
inline constexpr size_t cn_select_memory<cryptonight>() { return CRYPTONIGHT_MEMORY; }
template<>
inline constexpr size_t cn_select_memory<cryptonight_lite>() { return CRYPTONIGHT_LITE_MEMORY; }
template<>
inline constexpr size_t cn_select_memory<cryptonight_monero>() { return CRYPTONIGHT_MEMORY; }
template<>
inline constexpr size_t cn_select_memory<cryptonight_heavy>() { return CRYPTONIGHT_HEAVY_MEMORY; }
inline size_t cn_select_memory(xmrstak_algo algo)
{
switch(algo)
{
case cryptonight:
return CRYPTONIGHT_MEMORY;
case cryptonight_lite:
return CRYPTONIGHT_LITE_MEMORY;
case cryptonight_monero:
return CRYPTONIGHT_MEMORY;
case cryptonight_heavy:
return CRYPTONIGHT_HEAVY_MEMORY;
default:
return 0;
}
}
template<xmrstak_algo ALGO>
inline constexpr uint32_t cn_select_mask() { return 0; }
template<>
inline constexpr uint32_t cn_select_mask<cryptonight>() { return CRYPTONIGHT_MASK; }
template<>
inline constexpr uint32_t cn_select_mask<cryptonight_lite>() { return CRYPTONIGHT_LITE_MASK; }
template<>
inline constexpr uint32_t cn_select_mask<cryptonight_monero>() { return CRYPTONIGHT_MASK; }
template<>
inline constexpr uint32_t cn_select_mask<cryptonight_heavy>() { return CRYPTONIGHT_HEAVY_MASK; }
inline size_t cn_select_mask(xmrstak_algo algo)
{
switch(algo)
{
case cryptonight:
return CRYPTONIGHT_MASK;
case cryptonight_lite:
return CRYPTONIGHT_LITE_MASK;
case cryptonight_monero:
return CRYPTONIGHT_MASK;
case cryptonight_heavy:
return CRYPTONIGHT_HEAVY_MASK;
default:
return 0;
}
}
template<xmrstak_algo ALGO>
inline constexpr uint32_t cn_select_iter() { return 0; }
template<>
inline constexpr uint32_t cn_select_iter<cryptonight>() { return CRYPTONIGHT_ITER; }
template<>
inline constexpr uint32_t cn_select_iter<cryptonight_lite>() { return CRYPTONIGHT_LITE_ITER; }
template<>
inline constexpr uint32_t cn_select_iter<cryptonight_monero>() { return CRYPTONIGHT_ITER; }
template<>
inline constexpr uint32_t cn_select_iter<cryptonight_heavy>() { return CRYPTONIGHT_HEAVY_ITER; }
inline size_t cn_select_iter(xmrstak_algo algo)
{
switch(algo)
{
case cryptonight:
return CRYPTONIGHT_ITER;
case cryptonight_lite:
return CRYPTONIGHT_LITE_ITER;
case cryptonight_monero:
return CRYPTONIGHT_ITER;
case cryptonight_heavy:
return CRYPTONIGHT_HEAVY_ITER;
default:
return 0;
}
}