Source file
src/math/bits/make_tables.go
1
2
3
4
5
6
7
8
9 package main
10
11 import (
12 "bytes"
13 "fmt"
14 "go/format"
15 "io"
16 "log"
17 "os"
18 )
19
20 var header = []byte(`// Copyright 2017 The Go Authors. All rights reserved.
21 // Use of this source code is governed by a BSD-style
22 // license that can be found in the LICENSE file.
23
24 // Code generated by go run make_tables.go. DO NOT EDIT.
25
26 package bits
27
28 `)
29
30 func main() {
31 buf := bytes.NewBuffer(header)
32
33 gen(buf, "ntz8tab", ntz8)
34 gen(buf, "pop8tab", pop8)
35 gen(buf, "rev8tab", rev8)
36 gen(buf, "len8tab", len8)
37
38 out, err := format.Source(buf.Bytes())
39 if err != nil {
40 log.Fatal(err)
41 }
42
43 err = os.WriteFile("bits_tables.go", out, 0666)
44 if err != nil {
45 log.Fatal(err)
46 }
47 }
48
49 func gen(w io.Writer, name string, f func(uint8) uint8) {
50
51 fmt.Fprintf(w, "const %s = \"\"+\n\"", name)
52 for i := 0; i < 256; i++ {
53 fmt.Fprintf(w, "\\x%02x", f(uint8(i)))
54 if i%16 == 15 && i != 255 {
55 fmt.Fprint(w, "\"+\n\"")
56 }
57 }
58 fmt.Fprint(w, "\"\n\n")
59 }
60
61 func ntz8(x uint8) (n uint8) {
62 for x&1 == 0 && n < 8 {
63 x >>= 1
64 n++
65 }
66 return
67 }
68
69 func pop8(x uint8) (n uint8) {
70 for x != 0 {
71 x &= x - 1
72 n++
73 }
74 return
75 }
76
77 func rev8(x uint8) (r uint8) {
78 for i := 8; i > 0; i-- {
79 r = r<<1 | x&1
80 x >>= 1
81 }
82 return
83 }
84
85 func len8(x uint8) (n uint8) {
86 for x != 0 {
87 x >>= 1
88 n++
89 }
90 return
91 }
92
View as plain text