1// run
2
3// Copyright 2018 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package main
8
9import "fmt"
10
11func main() {
12	want := int32(0x3edae8)
13	got := foo(1)
14	if want != got {
15		panic(fmt.Sprintf("want %x, got %x", want, got))
16	}
17}
18
19func foo(a int32) int32 {
20	return shr1(int32(shr2(int64(0x14ff6e2207db5d1f), int(a))), 4)
21}
22
23func shr1(n int32, m int) int32 { return n >> uint(m) }
24
25func shr2(n int64, m int) int64 {
26	if m < 0 {
27		m = -m
28	}
29	if m >= 64 {
30		return n
31	}
32
33	return n >> uint(m)
34}
35