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