github.com/mdempsky/go@v0.0.0-20151201204031-5dd372bd1e70/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 ( 10 "runtime/internal/atomic" 11 "runtime/internal/sys" 12 "unsafe" 13 ) 14 15 var Fadd64 = fadd64 16 var Fsub64 = fsub64 17 var Fmul64 = fmul64 18 var Fdiv64 = fdiv64 19 var F64to32 = f64to32 20 var F32to64 = f32to64 21 var Fcmp64 = fcmp64 22 var Fintto64 = fintto64 23 var F64toint = f64toint 24 var Sqrt = sqrt 25 26 var Entersyscall = entersyscall 27 var Exitsyscall = exitsyscall 28 var LockedOSThread = lockedOSThread 29 var Xadduintptr = atomic.Xadduintptr 30 31 var FuncPC = funcPC 32 33 var Fastlog2 = fastlog2 34 35 type LFNode struct { 36 Next uint64 37 Pushcnt uintptr 38 } 39 40 func LFStackPush(head *uint64, node *LFNode) { 41 lfstackpush(head, (*lfnode)(unsafe.Pointer(node))) 42 } 43 44 func LFStackPop(head *uint64) *LFNode { 45 return (*LFNode)(unsafe.Pointer(lfstackpop(head))) 46 } 47 48 type ParFor struct { 49 body func(*ParFor, uint32) 50 done uint32 51 Nthr uint32 52 thrseq uint32 53 Cnt uint32 54 wait bool 55 } 56 57 func NewParFor(nthrmax uint32) *ParFor { 58 var desc *ParFor 59 systemstack(func() { 60 desc = (*ParFor)(unsafe.Pointer(parforalloc(nthrmax))) 61 }) 62 return desc 63 } 64 65 func ParForSetup(desc *ParFor, nthr, n uint32, wait bool, body func(*ParFor, uint32)) { 66 systemstack(func() { 67 parforsetup((*parfor)(unsafe.Pointer(desc)), nthr, n, wait, 68 *(*func(*parfor, uint32))(unsafe.Pointer(&body))) 69 }) 70 } 71 72 func ParForDo(desc *ParFor) { 73 systemstack(func() { 74 parfordo((*parfor)(unsafe.Pointer(desc))) 75 }) 76 } 77 78 func ParForIters(desc *ParFor, tid uint32) (uint32, uint32) { 79 desc1 := (*parfor)(unsafe.Pointer(desc)) 80 pos := desc1.thr[tid].pos 81 return uint32(pos), uint32(pos >> 32) 82 } 83 84 func GCMask(x interface{}) (ret []byte) { 85 systemstack(func() { 86 ret = getgcmask(x) 87 }) 88 return 89 } 90 91 func RunSchedLocalQueueTest() { 92 testSchedLocalQueue() 93 } 94 func RunSchedLocalQueueStealTest() { 95 testSchedLocalQueueSteal() 96 } 97 98 var StringHash = stringHash 99 var BytesHash = bytesHash 100 var Int32Hash = int32Hash 101 var Int64Hash = int64Hash 102 var EfaceHash = efaceHash 103 var IfaceHash = ifaceHash 104 var MemclrBytes = memclrBytes 105 106 var HashLoad = &hashLoad 107 108 // entry point for testing 109 func GostringW(w []uint16) (s string) { 110 systemstack(func() { 111 s = gostringw(&w[0]) 112 }) 113 return 114 } 115 116 var Gostringnocopy = gostringnocopy 117 var Maxstring = &maxstring 118 119 type Uintreg sys.Uintreg 120 121 var Open = open 122 var Close = closefd 123 var Read = read 124 var Write = write 125 126 func Envs() []string { return envs } 127 func SetEnvs(e []string) { envs = e } 128 129 var BigEndian = sys.BigEndian 130 131 // For benchmarking. 132 133 func BenchSetType(n int, x interface{}) { 134 e := *efaceOf(&x) 135 t := e._type 136 var size uintptr 137 var p unsafe.Pointer 138 switch t.kind & kindMask { 139 case kindPtr: 140 t = (*ptrtype)(unsafe.Pointer(t)).elem 141 size = t.size 142 p = e.data 143 case kindSlice: 144 slice := *(*struct { 145 ptr unsafe.Pointer 146 len, cap uintptr 147 })(e.data) 148 t = (*slicetype)(unsafe.Pointer(t)).elem 149 size = t.size * slice.len 150 p = slice.ptr 151 } 152 allocSize := roundupsize(size) 153 systemstack(func() { 154 for i := 0; i < n; i++ { 155 heapBitsSetType(uintptr(p), allocSize, size, t) 156 } 157 }) 158 } 159 160 const PtrSize = sys.PtrSize 161 162 var TestingAssertE2I2GC = &testingAssertE2I2GC 163 var TestingAssertE2T2GC = &testingAssertE2T2GC 164 165 var ForceGCPeriod = &forcegcperiod