diff options
Diffstat (limited to 'src/runtime/wbfat_gen.go')
-rw-r--r-- | src/runtime/wbfat_gen.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/runtime/wbfat_gen.go b/src/runtime/wbfat_gen.go new file mode 100644 index 000000000..78d5b6271 --- /dev/null +++ b/src/runtime/wbfat_gen.go @@ -0,0 +1,41 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "flag" + "fmt" + "log" + "os" +) + +func main() { + flag.Parse() + if flag.NArg() > 0 { + f, err := os.Create(flag.Arg(0)) + if err != nil { + log.Fatal(err) + } + os.Stdout = f + } + fmt.Printf("// generated by wbfat_gen.go; use go generate\n\n") + fmt.Printf("package runtime\n") + for i := uint(2); i <= 4; i++ { + for j := 1; j < 1<<i; j++ { + fmt.Printf("\n//go:nosplit\n") + fmt.Printf("func writebarrierfat%0*b(dst *[%d]uintptr, _ *byte, src [%d]uintptr) {\n", int(i), j, i, i) + for k := uint(0); k < i; k++ { + if j&(1<<(i-1-k)) != 0 { + fmt.Printf("\twritebarrierptr(&dst[%d], src[%d])\n", k, k) + } else { + fmt.Printf("\tdst[%d] = src[%d]\n", k, k) + } + } + fmt.Printf("}\n") + } + } +} |