1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use randomx4r_sys::*;
bitflags! {
/// Represents options that can be used when allocating the
/// RandomX dataset or VM.
pub struct RandomxFlags: u32 {
/// Use defaults.
const DEFAULT = randomx_flags_RANDOMX_FLAG_DEFAULT;
/// Allocate memory in large pages.
const LARGEPAGES = randomx_flags_RANDOMX_FLAG_LARGE_PAGES;
/// The RandomX VM will use hardware accelerated AES.
const HARDAES = randomx_flags_RANDOMX_FLAG_HARD_AES;
/// The RandomX VM will use the full dataset.
const FULLMEM = randomx_flags_RANDOMX_FLAG_FULL_MEM;
/// The RandomX VM will use a JIT compiler.
const JIT = randomx_flags_RANDOMX_FLAG_JIT;
/// Make sure that JIT pages are never writable and executable
/// at the same time.
const SECURE = randomx_flags_RANDOMX_FLAG_SECURE;
/// Use the SSSE3 extension to speed up Argon2 operations.
const ARGON2_SSSE3 = randomx_flags_RANDOMX_FLAG_ARGON2_SSSE3;
/// Use the AVX2 extension to speed up Argon2 operations.
const ARGON2_AVX2 = randomx_flags_RANDOMX_FLAG_ARGON2_AVX2;
/// Do not use SSSE3 or AVX2 extensions.
const ARGON2 = randomx_flags_RANDOMX_FLAG_ARGON2;
}
}
impl Default for RandomxFlags {
/// Get the recommended flags to use on the current machine.
///
/// Does not include any of the following flags:
/// * LARGEPAGES
/// * JIT
/// * SECURE
fn default() -> RandomxFlags {
// Explode if bits do not match up.
unsafe { RandomxFlags::from_bits(randomx_get_flags()).unwrap() }
}
}