From ba2b9c8a1bb1876b6eb4c9783fde798b19de4418 Mon Sep 17 00:00:00 2001 From: stefan Date: Wed, 24 May 2023 08:32:08 -0400 Subject: init --- vm/memory.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 vm/memory.go (limited to 'vm/memory.go') diff --git a/vm/memory.go b/vm/memory.go new file mode 100644 index 0000000..0a9dd2c --- /dev/null +++ b/vm/memory.go @@ -0,0 +1,39 @@ +package main + +import ( + "github.com/holiman/uint256" + "log" +) + +type Memory []byte + +// store 256b word at offset in memory +func (m *Memory) sw(ost uint64, val *uint256.Int) { + if ost + 32 > uint64(len(*m)) { + *m = append(*m, make([]byte, ost + 32 - uint64(len(*m)))...) + } + + bytes := val.Bytes32() + copy((*m)[ost:], bytes[:]) +} + +// store byte at offset in memory +func (m *Memory) sb(ost uint64, val byte) { + if ost + 1 > uint64(len(*m)) { + *m = append(*m, make([]byte, ost + 1 - uint64(len(*m)))...) + } + + (*m)[ost] = val +} + +// loads 256b word fron offset in memory +func (m *Memory) ld(ost uint64) []byte { + if ost + 32 > uint64(len(*m)) { + log.Fatal("trying to load out of memory") + } + + r := make([]byte, 32) + copy(r, (*m)[ost:ost+32]) + return r +} + -- cgit v1.2.3