Version v3.1.0, implement generic NewDataset and GetFlags
Some checks are pending
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is running

This commit is contained in:
DataHoarder 2024-04-23 14:36:43 +02:00
parent 36f1a90a20
commit 55d6161f6e
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
3 changed files with 46 additions and 13 deletions

View file

@ -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
}

View file

@ -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)

36
flags.go Normal file
View file

@ -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
}