Source file src/runtime/testdata/testprogcgo/callback_amd64.go
1 // Copyright 2026 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 // Regression test to verify that cgocallback restores X15 = 0 as required by 8 // ABIInternal. 9 10 /* 11 #include <stdint.h> 12 13 void go_callback_amd64(); 14 15 static void call_go_callback_amd64() { 16 // Clobber X15. 17 uint64_t val = 42; 18 asm volatile( 19 "vmovdqu %0, %%xmm15;" 20 : 21 : "m" (val) 22 : "xmm15"); 23 24 go_callback_amd64(); 25 } 26 */ 27 import "C" 28 29 import ( 30 "runtime/testdata/testprogcgo/goasm" 31 ) 32 33 func init() { 34 register("CgoCallbackX15", CgoCallbackX15) 35 } 36 37 //export go_callback_amd64 38 func go_callback_amd64() { 39 v := goasm.ReadX15() 40 if v != 0 { 41 println("X15 =", v) 42 panic("non-zero X15") 43 } 44 } 45 46 func CgoCallbackX15() { 47 C.call_go_callback_amd64() 48 49 println("OK") 50 } 51