mirror of
https://github.com/hanzoai/wasm2go.git
synced 2026-10-30 15:06:48 +00:00
84 lines
1.4 KiB
Go
84 lines
1.4 KiB
Go
// Code generated by wasm2go. DO NOT EDIT.
|
|
|
|
package ncruces
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"math"
|
|
)
|
|
|
|
type Module struct {
|
|
memory []byte
|
|
maxMem int64
|
|
}
|
|
|
|
func New() *Module {
|
|
m := new(Module)
|
|
m.maxMem = 65536
|
|
m.memory = make([]byte, 65536)
|
|
return m
|
|
}
|
|
|
|
type Memory = interface {
|
|
Slice() *[]byte
|
|
Grow(delta, max int64) int64
|
|
}
|
|
type wasmMemory []byte
|
|
|
|
func (m *wasmMemory) Slice() *[]byte {
|
|
return (*[]byte)(m)
|
|
}
|
|
func (m *wasmMemory) Grow(delta, max int64) int64 {
|
|
return memory_grow((*[]byte)(m), delta, max)
|
|
}
|
|
func (m *Module) Xbench_mem(v0 int32) int32 {
|
|
var v1, v2 int32
|
|
v1 = i32(0)
|
|
l0:
|
|
m.memory[uint64(uint32(v1))] = byte(v1 * i32(31) & i32(255))
|
|
v1 = v1 + i32(1)
|
|
if uint32(v1) < uint32(v0) {
|
|
goto l0
|
|
}
|
|
v1 = i32(0)
|
|
v2 = i32(0)
|
|
l1:
|
|
{
|
|
t0 := int32(load32(m.memory, uint64(uint32(v1))))
|
|
v2 = v2 + t0
|
|
v1 = v1 + i32(4)
|
|
if uint32(v1) < uint32(v0) {
|
|
goto l1
|
|
}
|
|
}
|
|
return v2
|
|
}
|
|
func (m *Module) Xmemory() Memory {
|
|
return (*wasmMemory)(&m.memory)
|
|
}
|
|
|
|
//go:nosplit
|
|
func i32(x int32) int32 { return x }
|
|
|
|
//go:nosplit
|
|
func load32(mem []byte, addr uint64) uint32 {
|
|
return binary.LittleEndian.Uint32(mem[addr:])
|
|
}
|
|
|
|
func memory_grow(mem *[]byte, delta, max int64) int64 {
|
|
buf := *mem
|
|
len := int64(len(buf))
|
|
old := len >> 16
|
|
if delta == 0 {
|
|
return old
|
|
}
|
|
new := old + delta
|
|
add := new<<16 - len
|
|
max = min(max, int64(math.MaxInt)>>16)
|
|
if new > max || new < old || add < 0 {
|
|
return -1
|
|
}
|
|
*mem = append(buf, make([]byte, add)...)
|
|
return old
|
|
}
|