2016-07-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
[official-gcc.git] / libgo / runtime / runtime1.goc
blobcd9d3017b51df52880539bca75660e4bafa89c84
1 // Copyright 2010 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.
5 package runtime
6 #include "runtime.h"
7 #include "arch.h"
8 #include "go-type.h"
10 func GOMAXPROCS(n int) (ret int) {
11         ret = runtime_gomaxprocsfunc(n);
14 func NumCPU() (ret int) {
15         ret = runtime_ncpu;
18 func NumCgoCall() (ret int64) {
19         M *mp;
21         ret = 0;
22         for(mp=runtime_atomicloadp(&runtime_allm); mp; mp=mp->alllink)
23                 ret += mp->ncgocall;
26 func newParFor(nthrmax uint32) (desc *ParFor) {
27         desc = runtime_parforalloc(nthrmax);
30 func parForSetup(desc *ParFor, nthr uint32, n uint32, wait bool, body *byte) {
31         runtime_parforsetup(desc, nthr, n, wait, (const FuncVal*) body);
34 func parForDo(desc *ParFor) {
35         runtime_parfordo(desc);
38 func parForIters(desc *ParFor, tid uintptr) (start uintptr, end uintptr) {
39         runtime_parforiters(desc, tid, &start, &end);
42 func typestring(e Eface) (s String) {
43         s = *e.__type_descriptor->__reflection;
46 func golockedOSThread() (ret bool) {
47         ret = runtime_lockedOSThread();
50 func NumGoroutine() (ret int) {
51         ret = runtime_gcount();
54 func getgoroot() (out String) {
55         out = runtime_getenv("GOROOT");
58 func runtime_pprof.runtime_cyclesPerSecond() (res int64) {
59         res = runtime_tickspersecond();
62 func sync.runtime_procPin() (p int) {
63         M *mp;
65         mp = runtime_m();
66         // Disable preemption.
67         mp->locks++;
68         p = mp->p->id;
71 func sync.runtime_procUnpin() {
72         runtime_m()->locks--;
75 func sync_atomic.runtime_procPin() (p int) {
76         M *mp;
78         mp = runtime_m();
79         // Disable preemption.
80         mp->locks++;
81         p = mp->p->id;
84 func sync_atomic.runtime_procUnpin() {
85         runtime_m()->locks--;
88 extern Slice envs;
90 func envs() (s Slice) {
91         s = envs;
94 func setenvs(e Slice) {
95         envs = e;