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  

View as plain text