github.com/reiver/go@v0.0.0-20150109200633-1d0c7792f172/src/runtime/export_test.go (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  // Export guts for testing.
     6  
     7  package runtime
     8  
     9  import "unsafe"
    10  
    11  var Fadd64 = fadd64
    12  var Fsub64 = fsub64
    13  var Fmul64 = fmul64
    14  var Fdiv64 = fdiv64
    15  var F64to32 = f64to32
    16  var F32to64 = f32to64
    17  var Fcmp64 = fcmp64
    18  var Fintto64 = fintto64
    19  var F64toint = f64toint
    20  
    21  var Entersyscall = entersyscall
    22  var Exitsyscall = exitsyscall
    23  var LockedOSThread = lockedOSThread
    24  
    25  type LFNode struct {
    26  	Next    uint64
    27  	Pushcnt uintptr
    28  }
    29  
    30  func LFStackPush(head *uint64, node *LFNode) {
    31  	lfstackpush(head, (*lfnode)(unsafe.Pointer(node)))
    32  }
    33  
    34  func LFStackPop(head *uint64) *LFNode {
    35  	return (*LFNode)(unsafe.Pointer(lfstackpop(head)))
    36  }
    37  
    38  type ParFor struct {
    39  	body    *byte
    40  	done    uint32
    41  	Nthr    uint32
    42  	nthrmax uint32
    43  	thrseq  uint32
    44  	Cnt     uint32
    45  	Ctx     *byte
    46  	wait    bool
    47  }
    48  
    49  func NewParFor(nthrmax uint32) *ParFor {
    50  	var desc *ParFor
    51  	systemstack(func() {
    52  		desc = (*ParFor)(unsafe.Pointer(parforalloc(nthrmax)))
    53  	})
    54  	return desc
    55  }
    56  
    57  func ParForSetup(desc *ParFor, nthr, n uint32, ctx *byte, wait bool, body func(*ParFor, uint32)) {
    58  	systemstack(func() {
    59  		parforsetup((*parfor)(unsafe.Pointer(desc)), nthr, n, unsafe.Pointer(ctx), wait,
    60  			*(*func(*parfor, uint32))(unsafe.Pointer(&body)))
    61  	})
    62  }
    63  
    64  func ParForDo(desc *ParFor) {
    65  	systemstack(func() {
    66  		parfordo((*parfor)(unsafe.Pointer(desc)))
    67  	})
    68  }
    69  
    70  func ParForIters(desc *ParFor, tid uint32) (uint32, uint32) {
    71  	desc1 := (*parfor)(unsafe.Pointer(desc))
    72  	pos := desc_thr_index(desc1, tid).pos
    73  	return uint32(pos), uint32(pos >> 32)
    74  }
    75  
    76  func GCMask(x interface{}) (ret []byte) {
    77  	e := (*eface)(unsafe.Pointer(&x))
    78  	s := (*slice)(unsafe.Pointer(&ret))
    79  	systemstack(func() {
    80  		var len uintptr
    81  		getgcmask(e.data, e._type, &s.array, &len)
    82  		s.len = uint(len)
    83  		s.cap = s.len
    84  	})
    85  	return
    86  }
    87  
    88  func RunSchedLocalQueueTest() {
    89  	systemstack(testSchedLocalQueue)
    90  }
    91  func RunSchedLocalQueueStealTest() {
    92  	systemstack(testSchedLocalQueueSteal)
    93  }
    94  
    95  var StringHash = stringHash
    96  var BytesHash = bytesHash
    97  var Int32Hash = int32Hash
    98  var Int64Hash = int64Hash
    99  var EfaceHash = efaceHash
   100  var IfaceHash = ifaceHash
   101  var MemclrBytes = memclrBytes
   102  
   103  var HashLoad = &hashLoad
   104  
   105  // For testing.
   106  func GogoBytes() int32 {
   107  	return _RuntimeGogoBytes
   108  }
   109  
   110  // entry point for testing
   111  func GostringW(w []uint16) (s string) {
   112  	systemstack(func() {
   113  		s = gostringw(&w[0])
   114  	})
   115  	return
   116  }
   117  
   118  var Gostringnocopy = gostringnocopy
   119  var Maxstring = &maxstring
   120  
   121  type Uintreg uintreg