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