// Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package runtime #include "runtime.h" #include "arch.h" #include "go-type.h" func GOMAXPROCS(n int) (ret int) { ret = runtime_gomaxprocsfunc(n); } func NumCPU() (ret int) { ret = runtime_ncpu; } func NumCgoCall() (ret int64) { M *mp; ret = 0; for(mp=runtime_atomicloadp(&runtime_allm); mp; mp=mp->alllink) ret += mp->ncgocall; } func newParFor(nthrmax uint32) (desc *ParFor) { desc = runtime_parforalloc(nthrmax); } func parForSetup(desc *ParFor, nthr uint32, n uint32, wait bool, body *byte) { runtime_parforsetup(desc, nthr, n, wait, (const FuncVal*) body); } func parForDo(desc *ParFor) { runtime_parfordo(desc); } func parForIters(desc *ParFor, tid uintptr) (start uintptr, end uintptr) { runtime_parforiters(desc, tid, &start, &end); } func typestring(e Eface) (s String) { s = *e.__type_descriptor->__reflection; } func golockedOSThread() (ret bool) { ret = runtime_lockedOSThread(); } func NumGoroutine() (ret int) { ret = runtime_gcount(); } func getgoroot() (out String) { out = runtime_getenv("GOROOT"); } func runtime_pprof.runtime_cyclesPerSecond() (res int64) { res = runtime_tickspersecond(); } func sync.runtime_procPin() (p int) { M *mp; mp = runtime_m(); // Disable preemption. mp->locks++; p = mp->p->id; } func sync.runtime_procUnpin() { runtime_m()->locks--; } func sync_atomic.runtime_procPin() (p int) { M *mp; mp = runtime_m(); // Disable preemption. mp->locks++; p = mp->p->id; } func sync_atomic.runtime_procUnpin() { runtime_m()->locks--; } extern Slice envs; func envs() (s Slice) { s = envs; } func setenvs(e Slice) { envs = e; }