go-compute/examples/add.go

31 lines
1 KiB
Go

package examples
import (
"git.gammaspectra.live/WeebDataHoarder/compute-go/amd64"
"git.gammaspectra.live/WeebDataHoarder/compute-go/assembler"
"git.gammaspectra.live/WeebDataHoarder/compute-go/assembler/obj"
)
func Add() (add func(a, b uint64) uint64, clean func() error, err error) {
b, err := assembler.NewBuilder(amd64.ABIDefinition)
if err != nil {
return nil, nil, err
}
add, clean, err = assembler.CreateFunction[func(a, b uint64) uint64](b, obj.ABIInternal, "add",
func(b *assembler.Builder, params []assembler.AddressableList, returns []assembler.AddressableList, regs *assembler.RegisterAllocator, data *assembler.DataAllocator) (frameSize, textFlag int, err error) {
bReg := regs.AllocArgOutput(params[1])
defer regs.Free(bReg)
amd64.Mov64(b, params[1].One(), bReg)
amd64.Add64(b, params[0].One(), bReg)
amd64.Mov64(b, bReg, returns[0].One())
amd64.Return(b)
return 0, obj.NOFRAME | obj.NOSPLIT, nil
},
nil)
if err != nil {
return nil, nil, err
}
return add, clean, nil
}