Home | History | Annotate | Download | only in runtime
      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, _ uintptr, 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 }
     42