From 55d6161f6ee242266aaec72fc682d074b8264753 Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:36:43 +0200 Subject: [PATCH] Version v3.1.0, implement generic NewDataset and GetFlags --- config.go | 13 ------------- dataset.go | 10 ++++++++++ flags.go | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 flags.go diff --git a/config.go b/config.go index 8763883..c3cf041 100644 --- a/config.go +++ b/config.go @@ -106,19 +106,6 @@ const CONDITIONOFFSET = RANDOMX_JUMP_OFFSET const CONDITIONMASK = (1 << RANDOMX_JUMP_BITS) - 1 const STOREL3CONDITION = 14 -const RANDOMX_FLAG_DEFAULT = 0 - -const ( - RANDOMX_FLAG_LARGE_PAGES = 1 << iota - RANDOMX_FLAG_HARD_AES - RANDOMX_FLAG_FULL_MEM - RANDOMX_FLAG_JIT - RANDOMX_FLAG_SECURE - RANDOMX_FLAG_ARGON2_SSSE3 - RANDOMX_FLAG_ARGON2_AVX2 - RANDOMX_FLAG_ARGON2 -) - func isZeroOrPowerOf2(x uint32) bool { return (x & (x - 1)) == 0 } diff --git a/dataset.go b/dataset.go index 92b9d3c..dc1fa30 100644 --- a/dataset.go +++ b/dataset.go @@ -11,6 +11,16 @@ type Dataset interface { Memory() []RegisterLine } +func NewDataset(cache *Cache) Dataset { + if cache.Flags&RANDOMX_FLAG_FULL_MEM > 0 { + if ds := NewFullDataset(cache); ds != nil { + return ds + } + return nil + } + return NewLightDataset(cache) +} + func InitDatasetParallel(dataset Dataset, n int) { n = max(1, n) diff --git a/flags.go b/flags.go new file mode 100644 index 0000000..df67cec --- /dev/null +++ b/flags.go @@ -0,0 +1,36 @@ +package randomx + +import ( + "golang.org/x/sys/cpu" + "runtime" +) + +const RANDOMX_FLAG_DEFAULT = 0 + +const ( + // RANDOMX_FLAG_LARGE_PAGES not implemented + RANDOMX_FLAG_LARGE_PAGES = 1 << iota + // RANDOMX_FLAG_HARD_AES not implemented + RANDOMX_FLAG_HARD_AES + // RANDOMX_FLAG_FULL_MEM Selects between full or light mode dataset + RANDOMX_FLAG_FULL_MEM + // RANDOMX_FLAG_JIT Enables JIT features + RANDOMX_FLAG_JIT + // RANDOMX_FLAG_SECURE Enables W^X for JIT code + RANDOMX_FLAG_SECURE + RANDOMX_FLAG_ARGON2_SSSE3 + RANDOMX_FLAG_ARGON2_AVX2 + RANDOMX_FLAG_ARGON2 +) + +func GetFlags() (flags uint64) { + flags = RANDOMX_FLAG_DEFAULT + if runtime.GOARCH == "amd64" { + flags |= RANDOMX_FLAG_JIT + + if cpu.X86.HasAES { + flags |= RANDOMX_FLAG_HARD_AES + } + } + return flags +}