blob: b02e36a73ab461b973a789ee3fbb24c03850a48c [file] [log] [blame]
Russ Cox7d516072014-12-05 16:17:09 -05001// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package runtime
6
7import "unsafe"
8
Ben Shi69261ec2017-02-27 07:56:57 +00009var hardDiv bool // TODO: set if a hardware divider is available
10
Russ Cox7d516072014-12-05 16:17:09 -050011func lwp_mcontext_init(mc *mcontextt, stk unsafe.Pointer, mp *m, gp *g, fn uintptr) {
12 // Machine dependent mcontext initialisation for LWP.
13 mc.__gregs[_REG_R15] = uint32(funcPC(lwp_tramp))
14 mc.__gregs[_REG_R13] = uint32(uintptr(stk))
15 mc.__gregs[_REG_R0] = uint32(uintptr(unsafe.Pointer(mp)))
16 mc.__gregs[_REG_R1] = uint32(uintptr(unsafe.Pointer(gp)))
17 mc.__gregs[_REG_R2] = uint32(fn)
18}
19
20func checkgoarm() {
Russ Cox4a190812015-08-07 11:48:52 -040021 // TODO(minux): FP checks like in os_linux_arm.go.
22
23 // osinit not called yet, so ncpu not set: must use getncpu directly.
24 if getncpu() > 1 && goarm < 7 {
25 print("runtime: this system has multiple CPUs and must use\n")
26 print("atomic synchronization instructions. Recompile using GOARM=7.\n")
27 exit(1)
28 }
Russ Cox7d516072014-12-05 16:17:09 -050029}
30
31//go:nosplit
32func cputicks() int64 {
Josh Bleecher Snyder2b74de32016-06-28 09:22:46 -070033 // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand().
Russ Cox7d516072014-12-05 16:17:09 -050034 // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler.
Josh Bleecher Snyder2b74de32016-06-28 09:22:46 -070035 // TODO: need more entropy to better seed fastrand.
Russ Cox7d516072014-12-05 16:17:09 -050036 return nanotime()
37}