podman
187 строк · 3.1 Кб
1// Copyright 2016 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
5package sys
6
7import "encoding/binary"
8
9// ArchFamily represents a family of one or more related architectures.
10// For example, ppc64 and ppc64le are both members of the PPC64 family.
11type ArchFamily byte
12
13const (
14NoArch ArchFamily = iota
15AMD64
16ARM
17ARM64
18I386
19MIPS
20MIPS64
21PPC64
22RISCV64
23S390X
24Wasm
25)
26
27// Arch represents an individual architecture.
28type Arch struct {
29Name string
30Family ArchFamily
31
32ByteOrder binary.ByteOrder
33
34// PtrSize is the size in bytes of pointers and the
35// predeclared "int", "uint", and "uintptr" types.
36PtrSize int
37
38// RegSize is the size in bytes of general purpose registers.
39RegSize int
40
41// MinLC is the minimum length of an instruction code.
42MinLC int
43}
44
45// InFamily reports whether a is a member of any of the specified
46// architecture families.
47func (a *Arch) InFamily(xs ...ArchFamily) bool {
48for _, x := range xs {
49if a.Family == x {
50return true
51}
52}
53return false
54}
55
56var Arch386 = &Arch{
57Name: "386",
58Family: I386,
59ByteOrder: binary.LittleEndian,
60PtrSize: 4,
61RegSize: 4,
62MinLC: 1,
63}
64
65var ArchAMD64 = &Arch{
66Name: "amd64",
67Family: AMD64,
68ByteOrder: binary.LittleEndian,
69PtrSize: 8,
70RegSize: 8,
71MinLC: 1,
72}
73
74var ArchARM = &Arch{
75Name: "arm",
76Family: ARM,
77ByteOrder: binary.LittleEndian,
78PtrSize: 4,
79RegSize: 4,
80MinLC: 4,
81}
82
83var ArchARM64 = &Arch{
84Name: "arm64",
85Family: ARM64,
86ByteOrder: binary.LittleEndian,
87PtrSize: 8,
88RegSize: 8,
89MinLC: 4,
90}
91
92var ArchMIPS = &Arch{
93Name: "mips",
94Family: MIPS,
95ByteOrder: binary.BigEndian,
96PtrSize: 4,
97RegSize: 4,
98MinLC: 4,
99}
100
101var ArchMIPSLE = &Arch{
102Name: "mipsle",
103Family: MIPS,
104ByteOrder: binary.LittleEndian,
105PtrSize: 4,
106RegSize: 4,
107MinLC: 4,
108}
109
110var ArchMIPS64 = &Arch{
111Name: "mips64",
112Family: MIPS64,
113ByteOrder: binary.BigEndian,
114PtrSize: 8,
115RegSize: 8,
116MinLC: 4,
117}
118
119var ArchMIPS64LE = &Arch{
120Name: "mips64le",
121Family: MIPS64,
122ByteOrder: binary.LittleEndian,
123PtrSize: 8,
124RegSize: 8,
125MinLC: 4,
126}
127
128var ArchPPC64 = &Arch{
129Name: "ppc64",
130Family: PPC64,
131ByteOrder: binary.BigEndian,
132PtrSize: 8,
133RegSize: 8,
134MinLC: 4,
135}
136
137var ArchPPC64LE = &Arch{
138Name: "ppc64le",
139Family: PPC64,
140ByteOrder: binary.LittleEndian,
141PtrSize: 8,
142RegSize: 8,
143MinLC: 4,
144}
145
146var ArchRISCV64 = &Arch{
147Name: "riscv64",
148Family: RISCV64,
149ByteOrder: binary.LittleEndian,
150PtrSize: 8,
151RegSize: 8,
152MinLC: 4,
153}
154
155var ArchS390X = &Arch{
156Name: "s390x",
157Family: S390X,
158ByteOrder: binary.BigEndian,
159PtrSize: 8,
160RegSize: 8,
161MinLC: 2,
162}
163
164var ArchWasm = &Arch{
165Name: "wasm",
166Family: Wasm,
167ByteOrder: binary.LittleEndian,
168PtrSize: 8,
169RegSize: 8,
170MinLC: 1,
171}
172
173var Archs = [...]*Arch{
174Arch386,
175ArchAMD64,
176ArchARM,
177ArchARM64,
178ArchMIPS,
179ArchMIPSLE,
180ArchMIPS64,
181ArchMIPS64LE,
182ArchPPC64,
183ArchPPC64LE,
184ArchRISCV64,
185ArchS390X,
186ArchWasm,
187}
188