Index: libgo/runtime/chan.c
===================================================================
--- libgo/runtime/chan.c	(revision 221440)
+++ libgo/runtime/chan.c	(working copy)
@@ -1,1186 +0,0 @@
-// AUTO-GENERATED by autogen.sh; DO NOT EDIT
-
-#include "runtime.h"
-#include "arch.h"
-#include "go-type.h"
-#include "race.h"
-#include "malloc.h"
-#include "chan.h"
-
-#line 13 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-uint32 runtime_Hchansize = sizeof ( Hchan ) ; 
-#line 15 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void dequeueg ( WaitQ* ) ; 
-static SudoG* dequeue ( WaitQ* ) ; 
-static void enqueue ( WaitQ* , SudoG* ) ; 
-static void racesync ( Hchan* , SudoG* ) ; 
-#line 20 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static Hchan* 
-makechan ( ChanType *t , int64 hint ) 
-{ 
-Hchan *c; 
-uintptr n; 
-const Type *elem; 
-#line 27 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-elem = t->__element_type; 
-#line 30 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( elem->__size >= ( 1<<16 ) ) 
-runtime_throw ( "makechan: invalid channel element type" ) ; 
-#line 33 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( hint < 0 || ( intgo ) hint != hint || ( elem->__size > 0 && ( uintptr ) hint > ( MaxMem - sizeof ( *c ) ) / elem->__size ) ) 
-runtime_panicstring ( "makechan: size out of range" ) ; 
-#line 36 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-n = sizeof ( *c ) ; 
-n = ROUND ( n , elem->__align ) ; 
-#line 40 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-c = ( Hchan* ) runtime_mallocgc ( sizeof ( *c ) + hint*elem->__size , ( uintptr ) t | TypeInfo_Chan , 0 ) ; 
-c->elemsize = elem->__size; 
-c->elemtype = elem; 
-c->dataqsiz = hint; 
-#line 45 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "makechan: chan=%p; elemsize=%D; dataqsiz=%D\n" , 
-c , ( int64 ) elem->__size , ( int64 ) c->dataqsiz ) ; 
-#line 49 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-return c; 
-} 
-Hchan* reflect_makechan(ChanType* t, uint64 size) __asm__ (GOSYM_PREFIX "reflect.makechan");
-Hchan* reflect_makechan(ChanType* t, uint64 size)
-{
-  Hchan* c;
-#line 52 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	c = makechan(t, size);
-return c;
-}
-
-#line 56 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-Hchan* 
-__go_new_channel ( ChanType *t , uintptr hint ) 
-{ 
-return makechan ( t , hint ) ; 
-} 
-#line 62 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-Hchan* 
-__go_new_channel_big ( ChanType *t , uint64 hint ) 
-{ 
-return makechan ( t , hint ) ; 
-} 
-#line 82 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static bool 
-chansend ( ChanType *t , Hchan *c , byte *ep , bool block , void *pc ) 
-{ 
-SudoG *sg; 
-SudoG mysg; 
-G* gp; 
-int64 t0; 
-G* g; 
-#line 91 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-g = runtime_g ( ) ; 
-#line 93 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) 
-runtime_racereadobjectpc ( ep , t->__element_type , runtime_getcallerpc ( &t ) , chansend ) ; 
-#line 96 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c == nil ) { 
-USED ( t ) ; 
-if ( !block ) 
-return false; 
-runtime_park ( nil , nil , "chan send (nil chan)" ) ; 
-return false; 
-} 
-#line 104 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( runtime_gcwaiting ( ) ) 
-runtime_gosched ( ) ; 
-#line 107 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) { 
-runtime_printf ( "chansend: chan=%p\n" , c ) ; 
-} 
-#line 111 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-t0 = 0; 
-mysg.releasetime = 0; 
-if ( runtime_blockprofilerate > 0 ) { 
-t0 = runtime_cputicks ( ) ; 
-mysg.releasetime = -1; 
-} 
-#line 118 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_lock ( c ) ; 
-if ( raceenabled ) 
-runtime_racereadpc ( c , pc , chansend ) ; 
-if ( c->closed ) 
-goto closed; 
-#line 124 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c->dataqsiz > 0 ) 
-goto asynch; 
-#line 127 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sg = dequeue ( &c->recvq ) ; 
-if ( sg != nil ) { 
-if ( raceenabled ) 
-racesync ( c , sg ) ; 
-runtime_unlock ( c ) ; 
-#line 133 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-gp = sg->g; 
-gp->param = sg; 
-if ( sg->elem != nil ) 
-runtime_memmove ( sg->elem , ep , c->elemsize ) ; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-return true; 
-} 
-#line 143 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( !block ) { 
-runtime_unlock ( c ) ; 
-return false; 
-} 
-#line 148 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-mysg.elem = ep; 
-mysg.g = g; 
-mysg.selectdone = nil; 
-g->param = nil; 
-enqueue ( &c->sendq , &mysg ) ; 
-runtime_parkunlock ( c , "chan send" ) ; 
-#line 155 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( g->param == nil ) { 
-runtime_lock ( c ) ; 
-if ( !c->closed ) 
-runtime_throw ( "chansend: spurious wakeup" ) ; 
-goto closed; 
-} 
-#line 162 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( mysg.releasetime > 0 ) 
-runtime_blockevent ( mysg.releasetime - t0 , 2 ) ; 
-#line 165 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-return true; 
-#line 167 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-asynch: 
-if ( c->closed ) 
-goto closed; 
-#line 171 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c->qcount >= c->dataqsiz ) { 
-if ( !block ) { 
-runtime_unlock ( c ) ; 
-return false; 
-} 
-mysg.g = g; 
-mysg.elem = nil; 
-mysg.selectdone = nil; 
-enqueue ( &c->sendq , &mysg ) ; 
-runtime_parkunlock ( c , "chan send" ) ; 
-#line 182 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_lock ( c ) ; 
-goto asynch; 
-} 
-#line 186 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) 
-runtime_racerelease ( chanbuf ( c , c->sendx ) ) ; 
-#line 189 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_memmove ( chanbuf ( c , c->sendx ) , ep , c->elemsize ) ; 
-if ( ++c->sendx == c->dataqsiz ) 
-c->sendx = 0; 
-c->qcount++; 
-#line 194 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sg = dequeue ( &c->recvq ) ; 
-if ( sg != nil ) { 
-gp = sg->g; 
-runtime_unlock ( c ) ; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} else 
-runtime_unlock ( c ) ; 
-if ( mysg.releasetime > 0 ) 
-runtime_blockevent ( mysg.releasetime - t0 , 2 ) ; 
-return true; 
-#line 207 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-closed: 
-runtime_unlock ( c ) ; 
-runtime_panicstring ( "send on closed channel" ) ; 
-return false; 
-} 
-#line 214 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static bool 
-chanrecv ( ChanType *t , Hchan* c , byte *ep , bool block , bool *received ) 
-{ 
-SudoG *sg; 
-SudoG mysg; 
-G *gp; 
-int64 t0; 
-G *g; 
-#line 223 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( runtime_gcwaiting ( ) ) 
-runtime_gosched ( ) ; 
-#line 228 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "chanrecv: chan=%p\n" , c ) ; 
-#line 231 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-g = runtime_g ( ) ; 
-#line 233 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c == nil ) { 
-USED ( t ) ; 
-if ( !block ) 
-return false; 
-runtime_park ( nil , nil , "chan receive (nil chan)" ) ; 
-return false; 
-} 
-#line 241 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-t0 = 0; 
-mysg.releasetime = 0; 
-if ( runtime_blockprofilerate > 0 ) { 
-t0 = runtime_cputicks ( ) ; 
-mysg.releasetime = -1; 
-} 
-#line 248 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_lock ( c ) ; 
-if ( c->dataqsiz > 0 ) 
-goto asynch; 
-#line 252 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c->closed ) 
-goto closed; 
-#line 255 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sg = dequeue ( &c->sendq ) ; 
-if ( sg != nil ) { 
-if ( raceenabled ) 
-racesync ( c , sg ) ; 
-runtime_unlock ( c ) ; 
-#line 261 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( ep != nil ) 
-runtime_memmove ( ep , sg->elem , c->elemsize ) ; 
-gp = sg->g; 
-gp->param = sg; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-#line 269 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( received != nil ) 
-*received = true; 
-return true; 
-} 
-#line 274 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( !block ) { 
-runtime_unlock ( c ) ; 
-return false; 
-} 
-#line 279 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-mysg.elem = ep; 
-mysg.g = g; 
-mysg.selectdone = nil; 
-g->param = nil; 
-enqueue ( &c->recvq , &mysg ) ; 
-runtime_parkunlock ( c , "chan receive" ) ; 
-#line 286 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( g->param == nil ) { 
-runtime_lock ( c ) ; 
-if ( !c->closed ) 
-runtime_throw ( "chanrecv: spurious wakeup" ) ; 
-goto closed; 
-} 
-#line 293 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( received != nil ) 
-*received = true; 
-if ( mysg.releasetime > 0 ) 
-runtime_blockevent ( mysg.releasetime - t0 , 2 ) ; 
-return true; 
-#line 299 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-asynch: 
-if ( c->qcount <= 0 ) { 
-if ( c->closed ) 
-goto closed; 
-#line 304 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( !block ) { 
-runtime_unlock ( c ) ; 
-if ( received != nil ) 
-*received = false; 
-return false; 
-} 
-mysg.g = g; 
-mysg.elem = nil; 
-mysg.selectdone = nil; 
-enqueue ( &c->recvq , &mysg ) ; 
-runtime_parkunlock ( c , "chan receive" ) ; 
-#line 316 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_lock ( c ) ; 
-goto asynch; 
-} 
-#line 320 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) 
-runtime_raceacquire ( chanbuf ( c , c->recvx ) ) ; 
-#line 323 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( ep != nil ) 
-runtime_memmove ( ep , chanbuf ( c , c->recvx ) , c->elemsize ) ; 
-runtime_memclr ( chanbuf ( c , c->recvx ) , c->elemsize ) ; 
-if ( ++c->recvx == c->dataqsiz ) 
-c->recvx = 0; 
-c->qcount--; 
-#line 330 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sg = dequeue ( &c->sendq ) ; 
-if ( sg != nil ) { 
-gp = sg->g; 
-runtime_unlock ( c ) ; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} else 
-runtime_unlock ( c ) ; 
-#line 340 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( received != nil ) 
-*received = true; 
-if ( mysg.releasetime > 0 ) 
-runtime_blockevent ( mysg.releasetime - t0 , 2 ) ; 
-return true; 
-#line 346 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-closed: 
-if ( ep != nil ) 
-runtime_memclr ( ep , c->elemsize ) ; 
-if ( received != nil ) 
-*received = false; 
-if ( raceenabled ) 
-runtime_raceacquire ( c ) ; 
-runtime_unlock ( c ) ; 
-if ( mysg.releasetime > 0 ) 
-runtime_blockevent ( mysg.releasetime - t0 , 2 ) ; 
-return true; 
-} 
-#line 361 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-void 
-__go_send_small ( ChanType *t , Hchan* c , uint64 val ) 
-{ 
-union 
-{ 
-byte b[sizeof ( uint64 ) ]; 
-uint64 v; 
-} u; 
-byte *v; 
-#line 371 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-u.v = val; 
-#ifndef WORDS_BIGENDIAN 
-v = u.b; 
-#else 
-v = u.b + sizeof ( uint64 ) - t->__element_type->__size; 
-#endif 
-chansend ( t , c , v , true , runtime_getcallerpc ( &t ) ) ; 
-} 
-#line 382 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-void 
-__go_send_big ( ChanType *t , Hchan* c , byte* v ) 
-{ 
-chansend ( t , c , v , true , runtime_getcallerpc ( &t ) ) ; 
-} 
-#line 390 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-void 
-__go_receive ( ChanType *t , Hchan* c , byte* v ) 
-{ 
-chanrecv ( t , c , v , true , nil ) ; 
-} 
-#line 396 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-_Bool runtime_chanrecv2 ( ChanType *t , Hchan* c , byte* v ) 
-__asm__ ( GOSYM_PREFIX "runtime.chanrecv2" ) ; 
-#line 399 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-_Bool 
-runtime_chanrecv2 ( ChanType *t , Hchan* c , byte* v ) 
-{ 
-bool received = false; 
-#line 404 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-chanrecv ( t , c , v , true , &received ) ; 
-return received; 
-} 
-bool runtime_selectnbsend(ChanType* t, Hchan* c, byte* elem) __asm__ (GOSYM_PREFIX "runtime.selectnbsend");
-bool runtime_selectnbsend(ChanType* t, Hchan* c, byte* elem)
-{
-  bool selected;
-#line 425 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	selected = chansend(t, c, elem, false, runtime_getcallerpc(&t));
-return selected;
-}
-bool runtime_selectnbrecv(ChanType* t, byte* elem, Hchan* c) __asm__ (GOSYM_PREFIX "runtime.selectnbrecv");
-bool runtime_selectnbrecv(ChanType* t, byte* elem, Hchan* c)
-{
-  bool selected;
-#line 446 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	selected = chanrecv(t, c, elem, false, nil);
-return selected;
-}
-bool runtime_selectnbrecv2(ChanType* t, byte* elem, bool* received, Hchan* c) __asm__ (GOSYM_PREFIX "runtime.selectnbrecv2");
-bool runtime_selectnbrecv2(ChanType* t, byte* elem, bool* received, Hchan* c)
-{
-  bool selected;
-#line 467 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	bool r;
-
-	selected = chanrecv(t, c, elem, false, received == nil ? nil : &r);
-	if(received != nil)
-		*received = r;
-return selected;
-}
-bool reflect_chansend(ChanType* t, Hchan* c, byte* elem, bool nb) __asm__ (GOSYM_PREFIX "reflect.chansend");
-bool reflect_chansend(ChanType* t, Hchan* c, byte* elem, bool nb)
-{
-  bool selected;
-#line 475 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	selected = chansend(t, c, elem, !nb, runtime_getcallerpc(&t));
-return selected;
-}
-struct reflect_chanrecv_ret {
-  bool selected;
-  bool received;
-};
-struct reflect_chanrecv_ret reflect_chanrecv(ChanType* t, Hchan* c, bool nb, byte* elem) __asm__ (GOSYM_PREFIX "reflect.chanrecv");
-struct reflect_chanrecv_ret reflect_chanrecv(ChanType* t, Hchan* c, bool nb, byte* elem)
-{
-  bool selected;
-  bool received;
-#line 479 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	received = false;
-	selected = chanrecv(t, c, elem, !nb, &received);
-  {
-    struct reflect_chanrecv_ret __ret;
-    __ret.selected = selected;
-    __ret.received = received;
-    return __ret;
-  }
-}
-
-#line 484 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static Select* newselect ( int32 ) ; 
-byte* runtime_newselect(int32 size) __asm__ (GOSYM_PREFIX "runtime.newselect");
-byte* runtime_newselect(int32 size)
-{
-  byte* sel;
-#line 486 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
- 	sel = (byte*)newselect(size);
-return sel;
-}
-
-#line 490 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static Select* 
-newselect ( int32 size ) 
-{ 
-int32 n; 
-Select *sel; 
-#line 496 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-n = 0; 
-if ( size > 1 ) 
-n = size-1; 
-#line 504 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sel = runtime_mal ( sizeof ( *sel ) + 
-n*sizeof ( sel->scase[0] ) + 
-size*sizeof ( sel->lockorder[0] ) + 
-size*sizeof ( sel->pollorder[0] ) ) ; 
-#line 509 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sel->tcase = size; 
-sel->ncase = 0; 
-sel->lockorder = ( void* ) ( sel->scase + size ) ; 
-sel->pollorder = ( void* ) ( sel->lockorder + size ) ; 
-#line 514 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "newselect s=%p size=%d\n" , sel , size ) ; 
-return sel; 
-} 
-#line 520 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void selectsend ( Select *sel , Hchan *c , int index , void *elem ) ; 
-void runtime_selectsend(Select* sel, Hchan* c, byte* elem, int32 index) __asm__ (GOSYM_PREFIX "runtime.selectsend");
-void runtime_selectsend(Select* sel, Hchan* c, byte* elem, int32 index)
-{
-#line 522 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	// nil cases do not compete
-	if(c != nil)
-		selectsend(sel, c, index, elem);
-}
-
-#line 528 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-selectsend ( Select *sel , Hchan *c , int index , void *elem ) 
-{ 
-int32 i; 
-Scase *cas; 
-#line 534 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-i = sel->ncase; 
-if ( i >= sel->tcase ) 
-runtime_throw ( "selectsend: too many cases" ) ; 
-sel->ncase = i+1; 
-cas = &sel->scase[i]; 
-#line 540 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-cas->index = index; 
-cas->chan = c; 
-cas->kind = CaseSend; 
-cas->sg.elem = elem; 
-#line 545 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "selectsend s=%p index=%d chan=%p\n" , 
-sel , cas->index , cas->chan ) ; 
-} 
-#line 551 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void selectrecv ( Select *sel , Hchan *c , int index , void *elem , bool* ) ; 
-void runtime_selectrecv(Select* sel, Hchan* c, byte* elem, int32 index) __asm__ (GOSYM_PREFIX "runtime.selectrecv");
-void runtime_selectrecv(Select* sel, Hchan* c, byte* elem, int32 index)
-{
-#line 553 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	// nil cases do not compete
-	if(c != nil)
-		selectrecv(sel, c, index, elem, nil);
-}
-void runtime_selectrecv2(Select* sel, Hchan* c, byte* elem, bool* received, int32 index) __asm__ (GOSYM_PREFIX "runtime.selectrecv2");
-void runtime_selectrecv2(Select* sel, Hchan* c, byte* elem, bool* received, int32 index)
-{
-#line 559 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	// nil cases do not compete
-	if(c != nil)
-		selectrecv(sel, c, index, elem, received);
-}
-
-#line 565 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-selectrecv ( Select *sel , Hchan *c , int index , void *elem , bool *received ) 
-{ 
-int32 i; 
-Scase *cas; 
-#line 571 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-i = sel->ncase; 
-if ( i >= sel->tcase ) 
-runtime_throw ( "selectrecv: too many cases" ) ; 
-sel->ncase = i+1; 
-cas = &sel->scase[i]; 
-cas->index = index; 
-cas->chan = c; 
-#line 579 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-cas->kind = CaseRecv; 
-cas->sg.elem = elem; 
-cas->receivedp = received; 
-#line 583 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "selectrecv s=%p index=%d chan=%p\n" , 
-sel , cas->index , cas->chan ) ; 
-} 
-#line 589 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void selectdefault ( Select* , int ) ; 
-void runtime_selectdefault(Select* sel, int32 index) __asm__ (GOSYM_PREFIX "runtime.selectdefault");
-void runtime_selectdefault(Select* sel, int32 index)
-{
-#line 591 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	selectdefault(sel, index);
-}
-
-#line 595 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-selectdefault ( Select *sel , int32 index ) 
-{ 
-int32 i; 
-Scase *cas; 
-#line 601 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-i = sel->ncase; 
-if ( i >= sel->tcase ) 
-runtime_throw ( "selectdefault: too many cases" ) ; 
-sel->ncase = i+1; 
-cas = &sel->scase[i]; 
-cas->index = index; 
-cas->chan = nil; 
-#line 609 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-cas->kind = CaseDefault; 
-#line 611 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "selectdefault s=%p index=%d\n" , 
-sel , cas->index ) ; 
-} 
-#line 616 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-sellock ( Select *sel ) 
-{ 
-uint32 i; 
-Hchan *c , *c0; 
-#line 622 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-c = nil; 
-for ( i=0; i<sel->ncase; i++ ) { 
-c0 = sel->lockorder[i]; 
-if ( c0 && c0 != c ) { 
-c = sel->lockorder[i]; 
-runtime_lock ( c ) ; 
-} 
-} 
-} 
-#line 632 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-selunlock ( Select *sel ) 
-{ 
-int32 i , n , r; 
-Hchan *c; 
-#line 646 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-n = ( int32 ) sel->ncase; 
-r = 0; 
-#line 649 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( n>0 && sel->lockorder[0] == nil ) 
-r = 1; 
-for ( i = n-1; i >= r; i-- ) { 
-c = sel->lockorder[i]; 
-if ( i>0 && sel->lockorder[i-1] == c ) 
-continue; 
-runtime_unlock ( c ) ; 
-} 
-} 
-#line 659 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static bool 
-selparkcommit ( G *gp , void *sel ) 
-{ 
-USED ( gp ) ; 
-selunlock ( sel ) ; 
-return true; 
-} 
-void runtime_block() __asm__ (GOSYM_PREFIX "runtime.block");
-void runtime_block()
-{
-#line 667 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	runtime_park(nil, nil, "select (no cases)");	// forever
-}
-
-#line 671 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static int selectgo ( Select** ) ; 
-int32 runtime_selectgo(Select* sel) __asm__ (GOSYM_PREFIX "runtime.selectgo");
-int32 runtime_selectgo(Select* sel)
-{
-  int32 ret;
-#line 675 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	return selectgo(&sel);
-return ret;
-}
-
-#line 679 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static int 
-selectgo ( Select **selp ) 
-{ 
-Select *sel; 
-uint32 o , i , j , k , done; 
-int64 t0; 
-Scase *cas , *dfl; 
-Hchan *c; 
-SudoG *sg; 
-G *gp; 
-int index; 
-G *g; 
-#line 692 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sel = *selp; 
-if ( runtime_gcwaiting ( ) ) 
-runtime_gosched ( ) ; 
-#line 696 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "select: sel=%p\n" , sel ) ; 
-#line 699 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-g = runtime_g ( ) ; 
-#line 701 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-t0 = 0; 
-if ( runtime_blockprofilerate > 0 ) { 
-t0 = runtime_cputicks ( ) ; 
-for ( i=0; i<sel->ncase; i++ ) 
-sel->scase[i].sg.releasetime = -1; 
-} 
-#line 717 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-for ( i=0; i<sel->ncase; i++ ) 
-sel->pollorder[i] = i; 
-for ( i=1; i<sel->ncase; i++ ) { 
-o = sel->pollorder[i]; 
-j = runtime_fastrand1 ( ) % ( i+1 ) ; 
-sel->pollorder[i] = sel->pollorder[j]; 
-sel->pollorder[j] = o; 
-} 
-#line 728 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-for ( i=0; i<sel->ncase; i++ ) { 
-j = i; 
-c = sel->scase[j].chan; 
-while ( j > 0 && sel->lockorder[k= ( j-1 ) /2] < c ) { 
-sel->lockorder[j] = sel->lockorder[k]; 
-j = k; 
-} 
-sel->lockorder[j] = c; 
-} 
-for ( i=sel->ncase; i-->0; ) { 
-c = sel->lockorder[i]; 
-sel->lockorder[i] = sel->lockorder[0]; 
-j = 0; 
-for ( ;; ) { 
-k = j*2+1; 
-if ( k >= i ) 
-break; 
-if ( k+1 < i && sel->lockorder[k] < sel->lockorder[k+1] ) 
-k++; 
-if ( c < sel->lockorder[k] ) { 
-sel->lockorder[j] = sel->lockorder[k]; 
-j = k; 
-continue; 
-} 
-break; 
-} 
-sel->lockorder[j] = c; 
-} 
-#line 763 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sellock ( sel ) ; 
-#line 765 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-loop: 
-#line 767 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-dfl = nil; 
-for ( i=0; i<sel->ncase; i++ ) { 
-o = sel->pollorder[i]; 
-cas = &sel->scase[o]; 
-c = cas->chan; 
-#line 773 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-switch ( cas->kind ) { 
-case CaseRecv: 
-if ( c->dataqsiz > 0 ) { 
-if ( c->qcount > 0 ) 
-goto asyncrecv; 
-} else { 
-sg = dequeue ( &c->sendq ) ; 
-if ( sg != nil ) 
-goto syncrecv; 
-} 
-if ( c->closed ) 
-goto rclose; 
-break; 
-#line 787 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-case CaseSend: 
-if ( raceenabled ) 
-runtime_racereadpc ( c , runtime_selectgo , chansend ) ; 
-if ( c->closed ) 
-goto sclose; 
-if ( c->dataqsiz > 0 ) { 
-if ( c->qcount < c->dataqsiz ) 
-goto asyncsend; 
-} else { 
-sg = dequeue ( &c->recvq ) ; 
-if ( sg != nil ) 
-goto syncsend; 
-} 
-break; 
-#line 802 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-case CaseDefault: 
-dfl = cas; 
-break; 
-} 
-} 
-#line 808 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( dfl != nil ) { 
-selunlock ( sel ) ; 
-cas = dfl; 
-goto retc; 
-} 
-#line 816 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-done = 0; 
-for ( i=0; i<sel->ncase; i++ ) { 
-o = sel->pollorder[i]; 
-cas = &sel->scase[o]; 
-c = cas->chan; 
-sg = &cas->sg; 
-sg->g = g; 
-sg->selectdone = &done; 
-#line 825 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-switch ( cas->kind ) { 
-case CaseRecv: 
-enqueue ( &c->recvq , sg ) ; 
-break; 
-#line 830 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-case CaseSend: 
-enqueue ( &c->sendq , sg ) ; 
-break; 
-} 
-} 
-#line 836 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-g->param = nil; 
-runtime_park ( selparkcommit , sel , "select" ) ; 
-#line 839 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sellock ( sel ) ; 
-sg = g->param; 
-#line 844 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-for ( i=0; i<sel->ncase; i++ ) { 
-cas = &sel->scase[i]; 
-if ( cas != ( Scase* ) sg ) { 
-c = cas->chan; 
-if ( cas->kind == CaseSend ) 
-dequeueg ( &c->sendq ) ; 
-else 
-dequeueg ( &c->recvq ) ; 
-} 
-} 
-#line 855 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( sg == nil ) 
-goto loop; 
-#line 858 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-cas = ( Scase* ) sg; 
-c = cas->chan; 
-#line 861 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c->dataqsiz > 0 ) 
-runtime_throw ( "selectgo: shouldn't happen" ) ; 
-#line 864 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( debug ) 
-runtime_printf ( "wait-return: sel=%p c=%p cas=%p kind=%d\n" , 
-sel , c , cas , cas->kind ) ; 
-#line 868 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( cas->kind == CaseRecv ) { 
-if ( cas->receivedp != nil ) 
-*cas->receivedp = true; 
-} 
-#line 873 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-if ( cas->kind == CaseRecv && cas->sg.elem != nil ) 
-runtime_racewriteobjectpc ( cas->sg.elem , c->elemtype , selectgo , chanrecv ) ; 
-else if ( cas->kind == CaseSend ) 
-runtime_racereadobjectpc ( cas->sg.elem , c->elemtype , selectgo , chansend ) ; 
-} 
-#line 880 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-selunlock ( sel ) ; 
-goto retc; 
-#line 883 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-asyncrecv: 
-#line 885 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-if ( cas->sg.elem != nil ) 
-runtime_racewriteobjectpc ( cas->sg.elem , c->elemtype , selectgo , chanrecv ) ; 
-runtime_raceacquire ( chanbuf ( c , c->recvx ) ) ; 
-} 
-if ( cas->receivedp != nil ) 
-*cas->receivedp = true; 
-if ( cas->sg.elem != nil ) 
-runtime_memmove ( cas->sg.elem , chanbuf ( c , c->recvx ) , c->elemsize ) ; 
-runtime_memclr ( chanbuf ( c , c->recvx ) , c->elemsize ) ; 
-if ( ++c->recvx == c->dataqsiz ) 
-c->recvx = 0; 
-c->qcount--; 
-sg = dequeue ( &c->sendq ) ; 
-if ( sg != nil ) { 
-gp = sg->g; 
-selunlock ( sel ) ; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} else { 
-selunlock ( sel ) ; 
-} 
-goto retc; 
-#line 910 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-asyncsend: 
-#line 912 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-runtime_racerelease ( chanbuf ( c , c->sendx ) ) ; 
-runtime_racereadobjectpc ( cas->sg.elem , c->elemtype , selectgo , chansend ) ; 
-} 
-runtime_memmove ( chanbuf ( c , c->sendx ) , cas->sg.elem , c->elemsize ) ; 
-if ( ++c->sendx == c->dataqsiz ) 
-c->sendx = 0; 
-c->qcount++; 
-sg = dequeue ( &c->recvq ) ; 
-if ( sg != nil ) { 
-gp = sg->g; 
-selunlock ( sel ) ; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} else { 
-selunlock ( sel ) ; 
-} 
-goto retc; 
-#line 932 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-syncrecv: 
-#line 934 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-if ( cas->sg.elem != nil ) 
-runtime_racewriteobjectpc ( cas->sg.elem , c->elemtype , selectgo , chanrecv ) ; 
-racesync ( c , sg ) ; 
-} 
-selunlock ( sel ) ; 
-if ( debug ) 
-runtime_printf ( "syncrecv: sel=%p c=%p o=%d\n" , sel , c , o ) ; 
-if ( cas->receivedp != nil ) 
-*cas->receivedp = true; 
-if ( cas->sg.elem != nil ) 
-runtime_memmove ( cas->sg.elem , sg->elem , c->elemsize ) ; 
-gp = sg->g; 
-gp->param = sg; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-goto retc; 
-#line 953 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-rclose: 
-#line 955 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-selunlock ( sel ) ; 
-if ( cas->receivedp != nil ) 
-*cas->receivedp = false; 
-if ( cas->sg.elem != nil ) 
-runtime_memclr ( cas->sg.elem , c->elemsize ) ; 
-if ( raceenabled ) 
-runtime_raceacquire ( c ) ; 
-goto retc; 
-#line 964 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-syncsend: 
-#line 966 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-runtime_racereadobjectpc ( cas->sg.elem , c->elemtype , selectgo , chansend ) ; 
-racesync ( c , sg ) ; 
-} 
-selunlock ( sel ) ; 
-if ( debug ) 
-runtime_printf ( "syncsend: sel=%p c=%p o=%d\n" , sel , c , o ) ; 
-if ( sg->elem != nil ) 
-runtime_memmove ( sg->elem , cas->sg.elem , c->elemsize ) ; 
-gp = sg->g; 
-gp->param = sg; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-#line 981 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-retc: 
-#line 983 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-index = cas->index; 
-if ( cas->sg.releasetime > 0 ) 
-runtime_blockevent ( cas->sg.releasetime - t0 , 2 ) ; 
-runtime_free ( sel ) ; 
-return index; 
-#line 989 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-sclose: 
-#line 991 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-selunlock ( sel ) ; 
-runtime_panicstring ( "send on closed channel" ) ; 
-return 0; 
-} 
-#line 997 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-typedef struct runtimeSelect runtimeSelect; 
-struct runtimeSelect 
-{ 
-uintptr dir; 
-ChanType *typ; 
-Hchan *ch; 
-byte *val; 
-} ; 
-#line 1007 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-enum SelectDir { 
-SelectSend = 1 , 
-SelectRecv , 
-SelectDefault , 
-} ; 
-struct reflect_rselect_ret {
-  intgo chosen;
-  bool recvOK;
-};
-struct reflect_rselect_ret reflect_rselect(Slice cases) __asm__ (GOSYM_PREFIX "reflect.rselect");
-struct reflect_rselect_ret reflect_rselect(Slice cases)
-{
-  intgo chosen;
-  bool recvOK;
-#line 1013 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	int32 i;
-	Select *sel;
-	runtimeSelect* rcase, *rc;
-
-	chosen = -1;
-	recvOK = false;
-
-	rcase = (runtimeSelect*)cases.__values;
-
-	sel = newselect(cases.__count);
-	for(i=0; i<cases.__count; i++) {
-		rc = &rcase[i];
-		switch(rc->dir) {
-		case SelectDefault:
-			selectdefault(sel, i);
-			break;
-		case SelectSend:
-			if(rc->ch == nil)
-				break;
-			selectsend(sel, rc->ch, i, rc->val);
-			break;
-		case SelectRecv:
-			if(rc->ch == nil)
-				break;
-			selectrecv(sel, rc->ch, i, rc->val, &recvOK);
-			break;
-		}
-	}
-
-	chosen = (intgo)(uintptr)selectgo(&sel);
-  {
-    struct reflect_rselect_ret __ret;
-    __ret.chosen = chosen;
-    __ret.recvOK = recvOK;
-    return __ret;
-  }
-}
-
-#line 1046 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void closechan ( Hchan *c , void *pc ) ; 
-void runtime_closechan(Hchan* c) __asm__ (GOSYM_PREFIX "runtime.closechan");
-void runtime_closechan(Hchan* c)
-{
-#line 1048 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	closechan(c, runtime_getcallerpc(&c));
-}
-void reflect_chanclose(Hchan* c) __asm__ (GOSYM_PREFIX "reflect.chanclose");
-void reflect_chanclose(Hchan* c)
-{
-#line 1052 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	closechan(c, runtime_getcallerpc(&c));
-}
-
-#line 1056 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-closechan ( Hchan *c , void *pc ) 
-{ 
-SudoG *sg; 
-G* gp; 
-#line 1062 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( c == nil ) 
-runtime_panicstring ( "close of nil channel" ) ; 
-#line 1065 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( runtime_gcwaiting ( ) ) 
-runtime_gosched ( ) ; 
-#line 1068 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_lock ( c ) ; 
-if ( c->closed ) { 
-runtime_unlock ( c ) ; 
-runtime_panicstring ( "close of closed channel" ) ; 
-} 
-#line 1074 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( raceenabled ) { 
-runtime_racewritepc ( c , pc , runtime_closechan ) ; 
-runtime_racerelease ( c ) ; 
-} 
-#line 1079 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-c->closed = true; 
-#line 1082 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-for ( ;; ) { 
-sg = dequeue ( &c->recvq ) ; 
-if ( sg == nil ) 
-break; 
-gp = sg->g; 
-gp->param = nil; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} 
-#line 1094 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-for ( ;; ) { 
-sg = dequeue ( &c->sendq ) ; 
-if ( sg == nil ) 
-break; 
-gp = sg->g; 
-gp->param = nil; 
-if ( sg->releasetime ) 
-sg->releasetime = runtime_cputicks ( ) ; 
-runtime_ready ( gp ) ; 
-} 
-#line 1105 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-runtime_unlock ( c ) ; 
-} 
-#line 1108 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-void 
-__go_builtin_close ( Hchan *c ) 
-{ 
-runtime_closechan ( c ) ; 
-} 
-intgo reflect_chanlen(Hchan* c) __asm__ (GOSYM_PREFIX "reflect.chanlen");
-intgo reflect_chanlen(Hchan* c)
-{
-  intgo len;
-#line 1114 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	if(c == nil)
-		len = 0;
-	else
-		len = c->qcount;
-return len;
-}
-
-#line 1121 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-intgo 
-__go_chan_len ( Hchan *c ) 
-{ 
-return reflect_chanlen ( c ) ; 
-} 
-intgo reflect_chancap(Hchan* c) __asm__ (GOSYM_PREFIX "reflect.chancap");
-intgo reflect_chancap(Hchan* c)
-{
-  intgo cap;
-#line 1127 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-
-	if(c == nil)
-		cap = 0;
-	else
-		cap = c->dataqsiz;
-return cap;
-}
-
-#line 1134 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-intgo 
-__go_chan_cap ( Hchan *c ) 
-{ 
-return reflect_chancap ( c ) ; 
-} 
-#line 1140 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static SudoG* 
-dequeue ( WaitQ *q ) 
-{ 
-SudoG *sgp; 
-#line 1145 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-loop: 
-sgp = q->first; 
-if ( sgp == nil ) 
-return nil; 
-q->first = sgp->link; 
-#line 1152 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( sgp->selectdone != nil ) { 
-#line 1154 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-if ( *sgp->selectdone != 0 || !runtime_cas ( sgp->selectdone , 0 , 1 ) ) 
-goto loop; 
-} 
-#line 1158 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-return sgp; 
-} 
-#line 1161 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-dequeueg ( WaitQ *q ) 
-{ 
-SudoG **l , *sgp , *prevsgp; 
-G *g; 
-#line 1167 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-g = runtime_g ( ) ; 
-prevsgp = nil; 
-for ( l=&q->first; ( sgp=*l ) != nil; l=&sgp->link , prevsgp=sgp ) { 
-if ( sgp->g == g ) { 
-*l = sgp->link; 
-if ( q->last == sgp ) 
-q->last = prevsgp; 
-break; 
-} 
-} 
-} 
-#line 1179 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-enqueue ( WaitQ *q , SudoG *sgp ) 
-{ 
-sgp->link = nil; 
-if ( q->first == nil ) { 
-q->first = sgp; 
-q->last = sgp; 
-return; 
-} 
-q->last->link = sgp; 
-q->last = sgp; 
-} 
-#line 1192 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/chan.goc"
-static void 
-racesync ( Hchan *c , SudoG *sg ) 
-{ 
-runtime_racerelease ( chanbuf ( c , 0 ) ) ; 
-runtime_raceacquireg ( sg->g , chanbuf ( c , 0 ) ) ; 
-runtime_racereleaseg ( sg->g , chanbuf ( c , 0 ) ) ; 
-runtime_raceacquire ( chanbuf ( c , 0 ) ) ; 
-} 
\ No newline at end of file
Index: libgo/runtime/cpuprof.c
===================================================================
--- libgo/runtime/cpuprof.c	(revision 221440)
+++ libgo/runtime/cpuprof.c	(working copy)
@@ -1,350 +0,0 @@
-// AUTO-GENERATED by autogen.sh; DO NOT EDIT
-
-#include "runtime.h"
-#include "arch.h"
-#include "malloc.h"
-#include "array.h"
-
-#line 57 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-typedef struct __go_open_array Slice; 
-#define array __values 
-#define len __count 
-#define cap __capacity 
-#line 62 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-enum 
-{ 
-HashSize = 1<<10 , 
-LogSize = 1<<17 , 
-Assoc = 4 , 
-MaxStack = 64 , 
-} ; 
-#line 70 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-typedef struct Profile Profile; 
-typedef struct Bucket Bucket; 
-typedef struct Entry Entry; 
-#line 74 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-struct Entry { 
-uintptr count; 
-uintptr depth; 
-uintptr stack[MaxStack]; 
-} ; 
-#line 80 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-struct Bucket { 
-Entry entry[Assoc]; 
-} ; 
-#line 84 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-struct Profile { 
-bool on; 
-Note wait; 
-uintptr count; 
-uintptr evicts; 
-uintptr lost; 
-uintptr totallost; 
-#line 93 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-Bucket hash[HashSize]; 
-#line 98 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-uintptr log[2][LogSize/2]; 
-uintptr nlog; 
-int32 toggle; 
-uint32 handoff; 
-#line 106 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-uint32 wtoggle; 
-bool wholding; 
-bool flushing; 
-bool eod_sent; 
-} ; 
-#line 112 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static Lock lk; 
-static Profile *prof; 
-#line 115 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static void tick ( uintptr* , int32 ) ; 
-static void add ( Profile* , uintptr* , int32 ) ; 
-static bool evict ( Profile* , Entry* ) ; 
-static bool flushlog ( Profile* ) ; 
-#line 120 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static uintptr eod[3] = { 0 , 1 , 0 } ; 
-#line 125 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static void 
-LostProfileData ( void ) 
-{ 
-} 
-#line 130 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-extern void runtime_SetCPUProfileRate ( intgo ) 
-__asm__ ( GOSYM_PREFIX "runtime.SetCPUProfileRate" ) ; 
-#line 135 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-void 
-runtime_SetCPUProfileRate ( intgo hz ) 
-{ 
-uintptr *p; 
-uintptr n; 
-#line 142 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( hz < 0 ) 
-hz = 0; 
-if ( hz > 1000000 ) 
-hz = 1000000; 
-#line 147 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-runtime_lock ( &lk ) ; 
-if ( hz > 0 ) { 
-if ( prof == nil ) { 
-prof = runtime_SysAlloc ( sizeof *prof , &mstats.other_sys ) ; 
-if ( prof == nil ) { 
-runtime_printf ( "runtime: cpu profiling cannot allocate memory\n" ) ; 
-runtime_unlock ( &lk ) ; 
-return; 
-} 
-} 
-if ( prof->on || prof->handoff != 0 ) { 
-runtime_printf ( "runtime: cannot set cpu profile rate until previous profile has finished.\n" ) ; 
-runtime_unlock ( &lk ) ; 
-return; 
-} 
-#line 163 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-prof->on = true; 
-p = prof->log[0]; 
-#line 167 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-*p++ = 0; 
-*p++ = 3; 
-*p++ = 0; 
-*p++ = 1000000 / hz; 
-*p++ = 0; 
-prof->nlog = p - prof->log[0]; 
-prof->toggle = 0; 
-prof->wholding = false; 
-prof->wtoggle = 0; 
-prof->flushing = false; 
-prof->eod_sent = false; 
-runtime_noteclear ( &prof->wait ) ; 
-#line 180 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-runtime_setcpuprofilerate ( tick , hz ) ; 
-} else if ( prof != nil && prof->on ) { 
-runtime_setcpuprofilerate ( nil , 0 ) ; 
-prof->on = false; 
-#line 187 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-for ( ;; ) { 
-n = prof->handoff; 
-if ( n&0x80000000 ) 
-runtime_printf ( "runtime: setcpuprofile(off) twice" ) ; 
-if ( runtime_cas ( &prof->handoff , n , n|0x80000000 ) ) 
-break; 
-} 
-if ( n == 0 ) { 
-#line 196 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-runtime_notewakeup ( &prof->wait ) ; 
-} 
-} 
-runtime_unlock ( &lk ) ; 
-} 
-#line 202 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static void 
-tick ( uintptr *pc , int32 n ) 
-{ 
-add ( prof , pc , n ) ; 
-} 
-#line 213 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static void 
-add ( Profile *p , uintptr *pc , int32 n ) 
-{ 
-int32 i , j; 
-uintptr h , x; 
-Bucket *b; 
-Entry *e; 
-#line 221 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( n > MaxStack ) 
-n = MaxStack; 
-#line 225 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-h = 0; 
-for ( i=0; i<n; i++ ) { 
-h = h<<8 | ( h>> ( 8* ( sizeof ( h ) -1 ) ) ) ; 
-x = pc[i]; 
-h += x*31 + x*7 + x*3; 
-} 
-p->count++; 
-#line 234 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-b = &p->hash[h%HashSize]; 
-for ( i=0; i<Assoc; i++ ) { 
-e = &b->entry[i]; 
-if ( e->depth != ( uintptr ) n ) 
-continue; 
-for ( j=0; j<n; j++ ) 
-if ( e->stack[j] != pc[j] ) 
-goto ContinueAssoc; 
-e->count++; 
-return; 
-ContinueAssoc:; 
-} 
-#line 248 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-e = &b->entry[0]; 
-for ( i=1; i<Assoc; i++ ) 
-if ( b->entry[i].count < e->count ) 
-e = &b->entry[i]; 
-if ( e->count > 0 ) { 
-if ( !evict ( p , e ) ) { 
-#line 255 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-p->lost++; 
-p->totallost++; 
-return; 
-} 
-p->evicts++; 
-} 
-#line 263 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-e->depth = n; 
-e->count = 1; 
-for ( i=0; i<n; i++ ) 
-e->stack[i] = pc[i]; 
-} 
-#line 275 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static bool 
-evict ( Profile *p , Entry *e ) 
-{ 
-int32 i , d , nslot; 
-uintptr *log , *q; 
-#line 281 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-d = e->depth; 
-nslot = d+2; 
-log = p->log[p->toggle]; 
-if ( p->nlog+nslot > nelem ( p->log[0] ) ) { 
-if ( !flushlog ( p ) ) 
-return false; 
-log = p->log[p->toggle]; 
-} 
-#line 290 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-q = log+p->nlog; 
-*q++ = e->count; 
-*q++ = d; 
-for ( i=0; i<d; i++ ) 
-*q++ = e->stack[i]; 
-p->nlog = q - log; 
-e->count = 0; 
-return true; 
-} 
-#line 304 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-static bool 
-flushlog ( Profile *p ) 
-{ 
-uintptr *log , *q; 
-#line 309 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( !runtime_cas ( &p->handoff , 0 , p->nlog ) ) 
-return false; 
-runtime_notewakeup ( &p->wait ) ; 
-#line 313 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-p->toggle = 1 - p->toggle; 
-log = p->log[p->toggle]; 
-q = log; 
-if ( p->lost > 0 ) { 
-*q++ = p->lost; 
-*q++ = 1; 
-*q++ = ( uintptr ) LostProfileData; 
-} 
-p->nlog = q - log; 
-return true; 
-} 
-#line 327 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-Slice 
-getprofile ( Profile *p ) 
-{ 
-uint32 i , j , n; 
-Slice ret; 
-Bucket *b; 
-Entry *e; 
-#line 335 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-ret.array = nil; 
-ret.len = 0; 
-ret.cap = 0; 
-#line 339 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( p == nil ) 
-return ret; 
-#line 342 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( p->wholding ) { 
-#line 345 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-for ( ;; ) { 
-n = p->handoff; 
-if ( n == 0 ) { 
-runtime_printf ( "runtime: phase error during cpu profile handoff\n" ) ; 
-return ret; 
-} 
-if ( n & 0x80000000 ) { 
-p->wtoggle = 1 - p->wtoggle; 
-p->wholding = false; 
-p->flushing = true; 
-goto flush; 
-} 
-if ( runtime_cas ( &p->handoff , n , 0 ) ) 
-break; 
-} 
-p->wtoggle = 1 - p->wtoggle; 
-p->wholding = false; 
-} 
-#line 364 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( p->flushing ) 
-goto flush; 
-#line 367 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( !p->on && p->handoff == 0 ) 
-return ret; 
-#line 371 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-runtime_notetsleepg ( &p->wait , -1 ) ; 
-runtime_noteclear ( &p->wait ) ; 
-#line 374 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-n = p->handoff; 
-if ( n == 0 ) { 
-runtime_printf ( "runtime: phase error during cpu profile wait\n" ) ; 
-return ret; 
-} 
-if ( n == 0x80000000 ) { 
-p->flushing = true; 
-goto flush; 
-} 
-n &= ~0x80000000; 
-#line 386 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-p->wholding = true; 
-#line 388 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-ret.array = ( byte* ) p->log[p->wtoggle]; 
-ret.len = n*sizeof ( uintptr ) ; 
-ret.cap = ret.len; 
-return ret; 
-#line 393 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-flush: 
-#line 398 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-for ( i=0; i<HashSize; i++ ) { 
-b = &p->hash[i]; 
-for ( j=0; j<Assoc; j++ ) { 
-e = &b->entry[j]; 
-if ( e->count > 0 && !evict ( p , e ) ) { 
-#line 404 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-goto breakflush; 
-} 
-} 
-} 
-breakflush: 
-#line 411 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( p->nlog > 0 ) { 
-#line 414 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-ret.array = ( byte* ) p->log[p->toggle]; 
-ret.len = p->nlog*sizeof ( uintptr ) ; 
-ret.cap = ret.len; 
-p->nlog = 0; 
-return ret; 
-} 
-#line 422 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-if ( !p->eod_sent ) { 
-#line 425 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-p->eod_sent = true; 
-ret.array = ( byte* ) eod; 
-ret.len = sizeof eod; 
-ret.cap = ret.len; 
-return ret; 
-} 
-#line 433 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-p->flushing = false; 
-if ( !runtime_cas ( &p->handoff , p->handoff , 0 ) ) 
-runtime_printf ( "runtime: profile flush racing with something\n" ) ; 
-return ret; 
-} 
-Slice runtime_CPUProfile() __asm__ (GOSYM_PREFIX "runtime.CPUProfile");
-Slice runtime_CPUProfile()
-{
-  Slice ret;
-#line 441 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/cpuprof.goc"
-
-	ret = getprofile(prof);
-return ret;
-}
Index: libgo/runtime/lfstack.c
===================================================================
--- libgo/runtime/lfstack.c	(revision 221440)
+++ libgo/runtime/lfstack.c	(working copy)
@@ -1,76 +0,0 @@
-// AUTO-GENERATED by autogen.sh; DO NOT EDIT
-
-#include "runtime.h"
-#include "arch.h"
-#if __SIZEOF_POINTER__ == 8
-# define PTR_BITS 47
-#else
-# define PTR_BITS 32
-#endif
-#define PTR_MASK ((1ull<<PTR_BITS)-1)
-#define CNT_MASK (0ull-1)
-#if __SIZEOF_POINTER__ == 8 && (defined(__sparc__) || (defined(__sun__) && defined(__amd64__)))
-#undef PTR_BITS
-#undef CNT_MASK
-#undef PTR_MASK
-#define PTR_BITS 0
-#define CNT_MASK 7
-#define PTR_MASK ((0ull-1)<<3)
-#endif
-
-#line 33 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-void 
-runtime_lfstackpush ( uint64 *head , LFNode *node ) 
-{ 
-uint64 old , new; 
-#line 38 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-if ( ( uintptr ) node != ( ( uintptr ) node&PTR_MASK ) ) { 
-runtime_printf ( "p=%p\n" , node ) ; 
-runtime_throw ( "runtime_lfstackpush: invalid pointer" ) ; 
-} 
-#line 43 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-node->pushcnt++; 
-new = ( uint64 ) ( uintptr ) node| ( ( ( uint64 ) node->pushcnt&CNT_MASK ) <<PTR_BITS ) ; 
-for ( ;; ) { 
-old = runtime_atomicload64 ( head ) ; 
-node->next = ( LFNode* ) ( uintptr ) ( old&PTR_MASK ) ; 
-if ( runtime_cas64 ( head , old , new ) ) 
-break; 
-} 
-} 
-#line 53 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-LFNode* 
-runtime_lfstackpop ( uint64 *head ) 
-{ 
-LFNode *node , *node2; 
-uint64 old , new; 
-#line 59 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-for ( ;; ) { 
-old = runtime_atomicload64 ( head ) ; 
-if ( old == 0 ) 
-return nil; 
-node = ( LFNode* ) ( uintptr ) ( old&PTR_MASK ) ; 
-node2 = runtime_atomicloadp ( &node->next ) ; 
-new = 0; 
-if ( node2 != nil ) 
-new = ( uint64 ) ( uintptr ) node2| ( ( ( uint64 ) node2->pushcnt&CNT_MASK ) <<PTR_BITS ) ; 
-if ( runtime_cas64 ( head , old , new ) ) 
-return node; 
-} 
-} 
-void runtime_lfstackpush_go(uint64* head, LFNode* node) __asm__ (GOSYM_PREFIX "runtime.lfstackpush_go");
-void runtime_lfstackpush_go(uint64* head, LFNode* node)
-{
-#line 73 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-
-	runtime_lfstackpush(head, node);
-}
-LFNode* runtime_lfstackpop_go(uint64* head) __asm__ (GOSYM_PREFIX "runtime.lfstackpop_go");
-LFNode* runtime_lfstackpop_go(uint64* head)
-{
-  LFNode* node;
-#line 77 "../../../trunk/libgo/runtime/../../../trunk/libgo/runtime/lfstack.goc"
-
-	node = runtime_lfstackpop(head);
-return node;
-}
