mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
Information about CPU architectures (e.g., name, family, byte ordering, pointer and register size) is currently redundantly scattered around the source tree. Instead consolidate the basic information into a single new package cmd/internal/sys. Also, introduce new sys.I386, sys.AMD64, etc. names for the constants '8', '6', etc. and replace most uses of the latter. The notable exceptions are a couple of error messages that still refer to the old char-based toolchain names and function reltype in cmd/link. Passes toolstash/buildall. Change-Id: I8a6f0cbd49577ec1672a98addebc45f767e36461 Reviewed-on: https://go-review.googlesource.com/21623 Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
145 lines
2.4 KiB
Go
145 lines
2.4 KiB
Go
// Copyright 2016 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.
|
|
|
|
package sys
|
|
|
|
import "encoding/binary"
|
|
|
|
// ArchFamily represents an architecture family.
|
|
type ArchFamily byte
|
|
|
|
const (
|
|
AMD64 ArchFamily = '6'
|
|
ARM ArchFamily = '5'
|
|
ARM64 ArchFamily = '7'
|
|
I386 ArchFamily = '8'
|
|
MIPS64 ArchFamily = '0'
|
|
PPC64 ArchFamily = '9'
|
|
S390X ArchFamily = 'z'
|
|
)
|
|
|
|
// Arch represents an individual architecture.
|
|
type Arch struct {
|
|
Name string
|
|
Family ArchFamily
|
|
|
|
ByteOrder binary.ByteOrder
|
|
|
|
IntSize int
|
|
PtrSize int
|
|
RegSize int
|
|
|
|
MinLC int
|
|
}
|
|
|
|
// HasFamily reports whether a is a member of any of the specified
|
|
// architecture families.
|
|
func (a *Arch) InFamily(xs ...ArchFamily) bool {
|
|
for _, x := range xs {
|
|
if a.Family == x {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
var Arch386 = &Arch{
|
|
Name: "386",
|
|
Family: I386,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 4,
|
|
PtrSize: 4,
|
|
RegSize: 4,
|
|
MinLC: 1,
|
|
}
|
|
|
|
var ArchAMD64 = &Arch{
|
|
Name: "amd64",
|
|
Family: AMD64,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 1,
|
|
}
|
|
|
|
var ArchAMD64P32 = &Arch{
|
|
Name: "amd64p32",
|
|
Family: AMD64,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 4,
|
|
PtrSize: 4,
|
|
RegSize: 8,
|
|
MinLC: 1,
|
|
}
|
|
|
|
var ArchARM = &Arch{
|
|
Name: "arm",
|
|
Family: ARM,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 4,
|
|
PtrSize: 4,
|
|
RegSize: 4,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchARM64 = &Arch{
|
|
Name: "arm64",
|
|
Family: ARM64,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchMIPS64 = &Arch{
|
|
Name: "mips64",
|
|
Family: MIPS64,
|
|
ByteOrder: binary.BigEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchMIPS64LE = &Arch{
|
|
Name: "mips64le",
|
|
Family: MIPS64,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchPPC64 = &Arch{
|
|
Name: "ppc64",
|
|
Family: PPC64,
|
|
ByteOrder: binary.BigEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchPPC64LE = &Arch{
|
|
Name: "ppc64le",
|
|
Family: PPC64,
|
|
ByteOrder: binary.LittleEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 4,
|
|
}
|
|
|
|
var ArchS390X = &Arch{
|
|
Name: "s390x",
|
|
Family: S390X,
|
|
ByteOrder: binary.BigEndian,
|
|
IntSize: 8,
|
|
PtrSize: 8,
|
|
RegSize: 8,
|
|
MinLC: 2,
|
|
}
|