cmd/dist: add -check-armv6k command to check for ARMv6K

so that our release note can reference a simple command to check if
the processor implements ARMv6K or not.

Updates #17082.

Change-Id: I9ca52051e5517394a7cd6b778fb822c3ee435f84
Reviewed-on: https://go-review.googlesource.com/33686
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Shenghou Ma 2016-11-29 23:29:49 -05:00 committed by Minux Ma
parent 9ea306a10c
commit 3a369a0f59
5 changed files with 27 additions and 0 deletions

View file

@ -393,6 +393,14 @@ func errprintf(format string, args ...interface{}) {
func main() {
os.Setenv("TERM", "dumb") // disable escape codes in clang errors
// provide -check-armv6k first, before checking for $GOROOT so that
// it is possible to run this check without having $GOROOT available.
if len(os.Args) > 1 && os.Args[1] == "-check-armv6k" {
useARMv6K() // might fail with SIGILL
println("ARMv6K supported.")
os.Exit(0)
}
slash = string(filepath.Separator)
gohostos = runtime.GOOS

View file

@ -25,3 +25,8 @@ func useVFPv1()
// useVFPv3 tries to execute one VFPv3 instruction on ARM.
// It will crash the current process if VFPv3 is missing.
func useVFPv3()
// useARMv6K tries to run ARMv6K instructions on ARM.
// It will crash the current process if it doesn't implement
// ARMv6K or above.
func useARMv6K()

View file

@ -22,3 +22,5 @@ func cansse2() bool { return C.supports_sse2() != 0 }
func useVFPv1() {}
func useVFPv3() {}
func useARMv6K() {}

View file

@ -15,3 +15,12 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0
TEXT ·useVFPv3(SB),NOSPLIT,$0
WORD $0xeeb70b00 // vmov.f64 d0, #112
RET
// try to run ARMv6K (or above) "ldrexd" instruction
TEXT ·useARMv6K(SB),NOSPLIT,$32
MOVW R13, R2
BIC $15, R13
WORD $0xe1bd0f9f // ldrexd r0, r1, [sp]
WORD $0xf57ff01f // clrex
MOVW R2, R13
RET

View file

@ -11,3 +11,6 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0
TEXT ·useVFPv3(SB),NOSPLIT,$0
RET
TEXT ·useARMv6K(SB),NOSPLIT,$0
RET