mirror of
https://github.com/autc04/Retro68.git
synced 2024-11-03 07:07:20 +00:00
93 lines
1.5 KiB
Go
93 lines
1.5 KiB
Go
// Copyright 2017 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
|
|
|
|
// This program generates bits_tables.go.
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"go/format"
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
)
|
|
|
|
var header = []byte(`// Copyright 2017 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.
|
|
|
|
// Code generated by go run make_tables.go. DO NOT EDIT.
|
|
|
|
package bits
|
|
|
|
`)
|
|
|
|
func main() {
|
|
buf := bytes.NewBuffer(header)
|
|
|
|
gen(buf, "ntz8tab", ntz8)
|
|
gen(buf, "pop8tab", pop8)
|
|
gen(buf, "rev8tab", rev8)
|
|
gen(buf, "len8tab", len8)
|
|
|
|
out, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = ioutil.WriteFile("bits_tables.go", out, 0666)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func gen(w io.Writer, name string, f func(uint8) uint8) {
|
|
fmt.Fprintf(w, "var %s = [256]uint8{", name)
|
|
for i := 0; i < 256; i++ {
|
|
if i%16 == 0 {
|
|
fmt.Fprint(w, "\n\t")
|
|
} else {
|
|
fmt.Fprint(w, " ")
|
|
}
|
|
fmt.Fprintf(w, "%#02x,", f(uint8(i)))
|
|
}
|
|
fmt.Fprint(w, "\n}\n\n")
|
|
}
|
|
|
|
func ntz8(x uint8) (n uint8) {
|
|
for x&1 == 0 && n < 8 {
|
|
x >>= 1
|
|
n++
|
|
}
|
|
return
|
|
}
|
|
|
|
func pop8(x uint8) (n uint8) {
|
|
for x != 0 {
|
|
x &= x - 1
|
|
n++
|
|
}
|
|
return
|
|
}
|
|
|
|
func rev8(x uint8) (r uint8) {
|
|
for i := 8; i > 0; i-- {
|
|
r = r<<1 | x&1
|
|
x >>= 1
|
|
}
|
|
return
|
|
}
|
|
|
|
func len8(x uint8) (n uint8) {
|
|
for x != 0 {
|
|
x >>= 1
|
|
n++
|
|
}
|
|
return
|
|
}
|