239 lines
4.0 KiB
Bash
239 lines
4.0 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
# Copyright 2018 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.
|
||
|
|
||
|
# Code in Makefile.am will invoke this script with two arguments.
|
||
|
# The first is a GOARCH value. The second is a keyword.
|
||
|
# The script will print the value of that keyword for that GOARCH.
|
||
|
# Keywords:
|
||
|
# - bigendian: true or false
|
||
|
# - cachelinesize: the cache line size in bytes
|
||
|
# (for performance only; it's not essential to get this right)
|
||
|
# - defaultphyspagesize: the default physical page size in bytes
|
||
|
# (not currently used, but maybe some day)
|
||
|
# - family: the processor family, from ALLGOARCHFAMILY in configure.ac
|
||
|
# - hugepagesize: size of a huge page in bytes
|
||
|
# (used only to decide when to use madvise with MADV_[NO]HUGEPAGE)
|
||
|
# (set to 0 if there are no huge pages)
|
||
|
# - int64align: alignment of int64 type in bytes
|
||
|
# - maxalign: maximum alignment of values of Go types in bytes
|
||
|
# - minframesize: size of smallest possible function frame in bytes
|
||
|
# (not currently used, may never be used)
|
||
|
# - pcquantum: minimum size of a single instruction in bytes
|
||
|
# - ptrsize: size of a pointer in bytes
|
||
|
|
||
|
if test $# -ne 2; then
|
||
|
echo 1>&2 "usage: goarch <goarch> <keyword>"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
goarch=$1
|
||
|
keyword=$2
|
||
|
|
||
|
# Default values
|
||
|
bigendian=false
|
||
|
cachelinesize=64
|
||
|
defaultphyspagesize=4096
|
||
|
family=unknown
|
||
|
hugepagesize=0
|
||
|
int64align=8
|
||
|
maxalign=8
|
||
|
minframesize=0
|
||
|
pcquantum=1
|
||
|
ptrsize=8
|
||
|
|
||
|
case $goarch in
|
||
|
386)
|
||
|
family=I386
|
||
|
hugepagesize="1 << 21"
|
||
|
int64align=4
|
||
|
maxalign=4
|
||
|
ptrsize=4
|
||
|
;;
|
||
|
alpha)
|
||
|
family=ALPHA
|
||
|
defaultphyspagesize=8192
|
||
|
pcquantum=4
|
||
|
;;
|
||
|
amd64 | amd64p32)
|
||
|
family=AMD64
|
||
|
hugepagesize="1 << 21"
|
||
|
;;
|
||
|
arm | armbe)
|
||
|
family=ARM
|
||
|
cachelinesize=32
|
||
|
minframesize=4
|
||
|
pcquantum=4
|
||
|
ptrsize=4
|
||
|
case $goarch in
|
||
|
*be)
|
||
|
bigendian=true
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
arm64 | arm64be)
|
||
|
family=ARM64
|
||
|
cachelinesize=32
|
||
|
defaultphyspagesize=65536
|
||
|
minframesize=8
|
||
|
pcquantum=4
|
||
|
case $goarch in
|
||
|
*be)
|
||
|
bigendian=true
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
ia64)
|
||
|
family=IA64
|
||
|
cachelinesize=128
|
||
|
defaultphyspagesize=65536
|
||
|
;;
|
||
|
m68k)
|
||
|
family=M68K
|
||
|
bigendian=true
|
||
|
cachelinesize=16
|
||
|
int64align=2
|
||
|
maxalign=2
|
||
|
pcquantum=4
|
||
|
ptrsize=4
|
||
|
;;
|
||
|
mips | mipsle | mips64p32 | mips64p32le)
|
||
|
family=MIPS
|
||
|
bigendian=true
|
||
|
cachelinesize=32
|
||
|
defaultphyspagesize=16384
|
||
|
minframesize=4
|
||
|
pcquantum=4
|
||
|
ptrsize=4
|
||
|
case $goarch in
|
||
|
*le)
|
||
|
bigendian=false
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
mips64 | mips64le)
|
||
|
family=MIPS64
|
||
|
bigendian=true
|
||
|
cachelinesize=32
|
||
|
defaultphyspagesize=16384
|
||
|
minframesize=8
|
||
|
pcquantum=4
|
||
|
case $goarch in
|
||
|
*le)
|
||
|
bigendian=false
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
ppc)
|
||
|
family=PPC
|
||
|
bigendian=true
|
||
|
defaultphyspagesize=65536
|
||
|
minframesize=32
|
||
|
pcquantum=4
|
||
|
ptrsize=4
|
||
|
;;
|
||
|
ppc64 | ppc64le)
|
||
|
family=PPC64
|
||
|
bigendian=true
|
||
|
defaultphyspagesize=65536
|
||
|
minframesize=32
|
||
|
pcquantum=4
|
||
|
case $goarch in
|
||
|
*le)
|
||
|
bigendian=false
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
s390)
|
||
|
family=S390
|
||
|
bigendian=true
|
||
|
cachelinesize=256
|
||
|
minframesize=4
|
||
|
pcquantum=2
|
||
|
ptrsize=4
|
||
|
;;
|
||
|
s390x)
|
||
|
family=S390X
|
||
|
bigendian=true
|
||
|
cachelinesize=256
|
||
|
minframesize=8
|
||
|
pcquantum=2
|
||
|
;;
|
||
|
sh | shbe)
|
||
|
family=SH
|
||
|
cachelinesize=16
|
||
|
int64align=4
|
||
|
minframesize=4
|
||
|
pcquantum=2
|
||
|
ptrsize=4
|
||
|
case $goarch in
|
||
|
*be)
|
||
|
bigendian=true
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
sparc)
|
||
|
family=SPARC
|
||
|
bigendian=true
|
||
|
defaultphyspagesize=8192
|
||
|
pcquantum=4
|
||
|
ptrsize=4
|
||
|
;;
|
||
|
sparc64)
|
||
|
family=SPARC64
|
||
|
bigendian=true
|
||
|
defaultphyspagesize=8192
|
||
|
pcquantum=4
|
||
|
;;
|
||
|
*)
|
||
|
echo 1>&2 "unrecognized goarch value \"$goarch\""
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
if test "$family" = "unknown"; then
|
||
|
echo 1>&2 "internal error: no family for goarch value \"$goarch\""
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
case $keyword in
|
||
|
bigendian)
|
||
|
echo $bigendian
|
||
|
;;
|
||
|
cachelinesize)
|
||
|
echo $cachelinesize
|
||
|
;;
|
||
|
defaultphyspagesize)
|
||
|
echo $defaultphyspagesize
|
||
|
;;
|
||
|
family)
|
||
|
echo $family
|
||
|
;;
|
||
|
hugepagesize)
|
||
|
echo $hugepagesize
|
||
|
;;
|
||
|
int64align)
|
||
|
echo $int64align
|
||
|
;;
|
||
|
maxalign)
|
||
|
echo $maxalign
|
||
|
;;
|
||
|
minframesize)
|
||
|
echo $minframesize
|
||
|
;;
|
||
|
pcquantum)
|
||
|
echo $pcquantum
|
||
|
;;
|
||
|
ptrsize)
|
||
|
echo $ptrsize
|
||
|
;;
|
||
|
*)
|
||
|
echo 1>&2 "unrecognized keyword \"$keyword\""
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
exit 0
|