mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-06-05 16:54:20 +00:00
37 lines
473 B
Go
37 lines
473 B
Go
package main
|
|
|
|
/*
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
int64_t add(int64_t a, int64_t b) {
|
|
return a+b;
|
|
}
|
|
void print_add_addr() {
|
|
printf("%x\n", (int)(add));
|
|
}
|
|
*/
|
|
import "C"
|
|
import (
|
|
"asmpkg"
|
|
"fmt"
|
|
"unsafe"
|
|
)
|
|
|
|
//go:noinline
|
|
//go:nosplit
|
|
func main() {
|
|
println(C.add(1, 2))
|
|
|
|
C.print_add_addr()
|
|
fmt.Printf("%x\n", uintptr(unsafe.Pointer(C.add)))
|
|
|
|
if true {
|
|
c := asmpkg.CallCAdd(
|
|
uintptr(unsafe.Pointer(C.add)),
|
|
1, 2,
|
|
)
|
|
fmt.Printf("result: %x\n", c)
|
|
}
|
|
}
|