Golang implementation of RandomX
Go to file
DataHoarder aab8f99dd4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Include softfloat64 and allow for purego implementation
2024-04-17 06:04:29 +02:00
aes General cleanup, improve load32 and dataset execution 2024-04-12 23:51:55 +02:00
argon2 Move argon2 / float packages to their own folders, cleanup vm Run 2024-04-15 04:14:15 +02:00
asm Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
keys Generate constants from hashes on startup, generate LUT for aes, cleanup endianness to be all little-endian 2024-04-12 17:53:28 +02:00
.drone.yml Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
blake2b.go Version v2.1.0, cleaned up useless printf and string comparisons 2024-04-13 00:07:49 +02:00
cache.go Move argon2 / float packages to their own folders, cleanup vm Run 2024-04-15 04:14:15 +02:00
config.go Move argon2 / float packages to their own folders, cleanup vm Run 2024-04-15 04:14:15 +02:00
dataset.go Include superscalar JIT for amd64, optimize memory allocations 2024-04-12 02:00:46 +02:00
dataset_light.go General cleanup, improve load32 and dataset execution 2024-04-12 23:51:55 +02:00
exec.go Include superscalar JIT for amd64, optimize memory allocations 2024-04-12 02:00:46 +02:00
exec_generic.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
exec_mmap_unix.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
float.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
go.mod Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
go.sum Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
LICENSE Working RandomX with minimal assembly for rounding mode (AMD64,ARM64) 2024-04-11 08:46:34 +02:00
randomx.go Update 'randomx.go' 2019-10-15 20:31:51 +02:00
randomx_test.go Version v2.0.0 with asm, jit, performance and allocation improvements 2024-04-12 02:08:40 +02:00
README.md Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
register.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
superscalar.go Version v2.1.0, cleaned up useless printf and string comparisons 2024-04-13 00:07:49 +02:00
superscalar_amd64.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
superscalar_noasm.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_bytecode.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_bytecode_native.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_bytecode_purego.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_instruction.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_instruction_native.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_instruction_purego.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00

RandomX (Golang Implementation)

Fork from git.dero.io/DERO_Foundation/RandomX. Also related, their Analysis of RandomX writeup.

Original code failed RandomX testcases and was implemented using big.Float.

This package implements RandomX without CGO, using only Golang code, pure float64 ops and two small assembly sections to implement CFROUND modes, with optional soft float implementation.

All test cases pass properly.

Uses minimal Go assembly due to having to set rounding mode natively. Native hard float can be added with supporting rounding mode under asm.

JIT is supported on a few platforms but can be hard-disabled via the disable_jit build flag, or at runtime.

A pure Golang implementation can be used on platforms without hard float support or via the purego build flag manually.

Platform Supported Hard Float SuperScalar JIT Notes
386
amd64 * JIT only on Unix
arm *
arm64
mips *
mips64 *
riscv64 *
wasm *

* these platforms only support software floating point / purego and will not be performant.