github.com/hbdrawn/golang@v0.0.0-20141214014649-6b835209aba2/src/runtime/wbfat_gen.go (about)

     1  // Copyright 2014 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  // +build ignore
     6  
     7  package main
     8  
     9  import (
    10  	"flag"
    11  	"fmt"
    12  	"log"
    13  	"os"
    14  )
    15  
    16  func main() {
    17  	flag.Parse()
    18  	if flag.NArg() > 0 {
    19  		f, err := os.Create(flag.Arg(0))
    20  		if err != nil {
    21  			log.Fatal(err)
    22  		}
    23  		os.Stdout = f
    24  	}
    25  	fmt.Printf("// generated by wbfat_gen.go; use go generate\n\n")
    26  	fmt.Printf("package runtime\n")
    27  	for i := uint(2); i <= 4; i++ {
    28  		for j := 1; j < 1<<i; j++ {
    29  			fmt.Printf("\n//go:nosplit\n")
    30  			fmt.Printf("func writebarrierfat%0*b(dst *[%d]uintptr, _ *byte, src [%d]uintptr) {\n", int(i), j, i, i)
    31  			for k := uint(0); k < i; k++ {
    32  				if j&(1<<(i-1-k)) != 0 {
    33  					fmt.Printf("\twritebarrierptr(&dst[%d], src[%d])\n", k, k)
    34  				} else {
    35  					fmt.Printf("\tdst[%d] = src[%d]\n", k, k)
    36  				}
    37  			}
    38  			fmt.Printf("}\n")
    39  		}
    40  	}
    41  }