func BuildCgo(b []byte) func() {
	dummy := cgocall
	fn := &struct {
		trampoline uintptr
		jitcode    uintptr
	}{**(**uintptr)(unsafe.Pointer(&dummy)), Addr(b)}
	return *(*func())(unsafe.Pointer(&fn))
}
BuildCgo is like Build, but the resulting provided code will be
called by way of the cgo runtime. This has the advantage of being
much easier and safer to program against (your JIT'd code need only
conform to your platform's C ABI), at the cost of significant
overhead for each call into your code.
package gojit
import (
	"github.com/edsrzf/mmap-go"
	_ "github.com/nelhage/gojit/cgo"
	"reflect"
	"unsafe"
)
type ABI int
func Alloc(len int) ([]byte, error) {
	b, err := mmap.MapRegion(nil, len, mmap.EXEC|mmap.RDWR, mmap.ANON, int64(0))
	return b, err
}
func Release(b []byte) error {
	m := mmap.MMap(b)
	return m.Unmap()
}
func Addr(b []byte) uintptr {
	hdr := (*reflect.SliceHeader)(unsafe.Pointer(&b))
	return hdr.Data
}
func Build(b []byte) func() {
	dummy := jitcall
	fn := &struct {
		trampoline uintptr
		jitcode    uintptr
	}{**(**uintptr)(unsafe.Pointer(&dummy)), Addr(b)}
	return *(*func())(unsafe.Pointer(&fn))
}