Commit 3a369a0f authored by Shenghou Ma's avatar Shenghou Ma Committed by Minux Ma

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: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 9ea306a1
...@@ -393,6 +393,14 @@ func errprintf(format string, args ...interface{}) { ...@@ -393,6 +393,14 @@ func errprintf(format string, args ...interface{}) {
func main() { func main() {
os.Setenv("TERM", "dumb") // disable escape codes in clang errors 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) slash = string(filepath.Separator)
gohostos = runtime.GOOS gohostos = runtime.GOOS
......
...@@ -25,3 +25,8 @@ func useVFPv1() ...@@ -25,3 +25,8 @@ func useVFPv1()
// useVFPv3 tries to execute one VFPv3 instruction on ARM. // useVFPv3 tries to execute one VFPv3 instruction on ARM.
// It will crash the current process if VFPv3 is missing. // It will crash the current process if VFPv3 is missing.
func useVFPv3() 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()
...@@ -22,3 +22,5 @@ func cansse2() bool { return C.supports_sse2() != 0 } ...@@ -22,3 +22,5 @@ func cansse2() bool { return C.supports_sse2() != 0 }
func useVFPv1() {} func useVFPv1() {}
func useVFPv3() {} func useVFPv3() {}
func useARMv6K() {}
...@@ -15,3 +15,12 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0 ...@@ -15,3 +15,12 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0
TEXT ·useVFPv3(SB),NOSPLIT,$0 TEXT ·useVFPv3(SB),NOSPLIT,$0
WORD $0xeeb70b00 // vmov.f64 d0, #112 WORD $0xeeb70b00 // vmov.f64 d0, #112
RET 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
...@@ -11,3 +11,6 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0 ...@@ -11,3 +11,6 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0
TEXT ·useVFPv3(SB),NOSPLIT,$0 TEXT ·useVFPv3(SB),NOSPLIT,$0
RET RET
TEXT ·useARMv6K(SB),NOSPLIT,$0
RET
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment