Skip to content

Commit

Permalink
cmd/dist: add -check-armv6k command to check for ARMv6K
Browse files Browse the repository at this point in the history
so that our release note can reference a simple command to check if
the processor implements ARMv6K or not.

Updates golang#17082.

Change-Id: I9ca52051e5517394a7cd6b778fb822c3ee435f84
Reviewed-on: https://go-review.googlesource.com/33686
Run-TryBot: Minux Ma <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Brad Fitzpatrick <[email protected]>
  • Loading branch information
minux committed Dec 1, 2016
1 parent 9ea306a commit 3a369a0
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/cmd/dist/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions src/cmd/dist/util_gc.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
2 changes: 2 additions & 0 deletions src/cmd/dist/util_gccgo.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ func cansse2() bool { return C.supports_sse2() != 0 }
func useVFPv1() {}

func useVFPv3() {}

func useARMv6K() {}
9 changes: 9 additions & 0 deletions src/cmd/dist/vfp_arm.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 3 additions & 0 deletions src/cmd/dist/vfp_default.s
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ TEXT ·useVFPv1(SB),NOSPLIT,$0

TEXT ·useVFPv3(SB),NOSPLIT,$0
RET

TEXT ·useARMv6K(SB),NOSPLIT,$0
RET

0 comments on commit 3a369a0

Please sign in to comment.