.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / sys@v0.0.0-20210124154548-22da62e12c0c / cpu / byteorder.go
1 // Copyright 2019 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 package cpu
6
7 import (
8         "runtime"
9 )
10
11 // byteOrder is a subset of encoding/binary.ByteOrder.
12 type byteOrder interface {
13         Uint32([]byte) uint32
14         Uint64([]byte) uint64
15 }
16
17 type littleEndian struct{}
18 type bigEndian struct{}
19
20 func (littleEndian) Uint32(b []byte) uint32 {
21         _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
22         return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
23 }
24
25 func (littleEndian) Uint64(b []byte) uint64 {
26         _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
27         return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
28                 uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
29 }
30
31 func (bigEndian) Uint32(b []byte) uint32 {
32         _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
33         return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
34 }
35
36 func (bigEndian) Uint64(b []byte) uint64 {
37         _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
38         return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
39                 uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
40 }
41
42 // hostByteOrder returns littleEndian on little-endian machines and
43 // bigEndian on big-endian machines.
44 func hostByteOrder() byteOrder {
45         switch runtime.GOARCH {
46         case "386", "amd64", "amd64p32",
47                 "alpha",
48                 "arm", "arm64",
49                 "mipsle", "mips64le", "mips64p32le",
50                 "nios2",
51                 "ppc64le",
52                 "riscv", "riscv64",
53                 "sh":
54                 return littleEndian{}
55         case "armbe", "arm64be",
56                 "m68k",
57                 "mips", "mips64", "mips64p32",
58                 "ppc", "ppc64",
59                 "s390", "s390x",
60                 "shbe",
61                 "sparc", "sparc64":
62                 return bigEndian{}
63         }
64         panic("unknown architecture")
65 }