github.com/axw/llgo@v0.0.0-20160805011314-95b5fe4dca20/third_party/gofrontend/libgo/runtime/runtime1.goc (about)

     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.
     4  
     5  package runtime
     6  #include "runtime.h"
     7  #include "arch.h"
     8  #include "go-type.h"
     9  
    10  func GOMAXPROCS(n int) (ret int) {
    11  	ret = runtime_gomaxprocsfunc(n);
    12  }
    13  
    14  func NumCPU() (ret int) {
    15  	ret = runtime_ncpu;
    16  }
    17  
    18  func NumCgoCall() (ret int64) {
    19  	M *mp;
    20  
    21  	ret = 0;
    22  	for(mp=runtime_atomicloadp(&runtime_allm); mp; mp=mp->alllink)
    23  		ret += mp->ncgocall;
    24  }
    25  
    26  func newParFor(nthrmax uint32) (desc *ParFor) {
    27  	desc = runtime_parforalloc(nthrmax);
    28  }
    29  
    30  func parForSetup(desc *ParFor, nthr uint32, n uint32, wait bool, body *byte) {
    31  	runtime_parforsetup(desc, nthr, n, wait, (const FuncVal*) body);
    32  }
    33  
    34  func parForDo(desc *ParFor) {
    35  	runtime_parfordo(desc);
    36  }
    37  
    38  func parForIters(desc *ParFor, tid uintptr) (start uintptr, end uintptr) {
    39  	runtime_parforiters(desc, tid, &start, &end);
    40  }
    41  
    42  func typestring(e Eface) (s String) {
    43  	s = *e.__type_descriptor->__reflection;
    44  }
    45  
    46  func golockedOSThread() (ret bool) {
    47  	ret = runtime_lockedOSThread();
    48  }
    49  
    50  func NumGoroutine() (ret int) {
    51  	ret = runtime_gcount();
    52  }
    53  
    54  func getgoroot() (out String) {
    55  	out = runtime_getenv("GOROOT");
    56  }
    57  
    58  func runtime_pprof.runtime_cyclesPerSecond() (res int64) {
    59  	res = runtime_tickspersecond();
    60  }
    61  
    62  func sync.runtime_procPin() (p int) {
    63  	M *mp;
    64  
    65  	mp = runtime_m();
    66  	// Disable preemption.
    67  	mp->locks++;
    68  	p = mp->p->id;
    69  }
    70  
    71  func sync.runtime_procUnpin() {
    72  	runtime_m()->locks--;
    73  }
    74  
    75  func sync_atomic.runtime_procPin() (p int) {
    76  	M *mp;
    77  
    78  	mp = runtime_m();
    79  	// Disable preemption.
    80  	mp->locks++;
    81  	p = mp->p->id;
    82  }
    83  
    84  func sync_atomic.runtime_procUnpin() {
    85  	runtime_m()->locks--;
    86  }
    87  
    88  extern Slice envs;
    89  
    90  func envs() (s Slice) {
    91  	s = envs;
    92  }
    93  
    94  func setenvs(e Slice) {
    95  	envs = e;
    96  }