| #!/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 |
| ;; |
| riscv64) |
| family=RISCV64 |
| pcquantum=2 |
| ;; |
| 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 |