[dev.cc] cmd/internal/gc, cmd/new6g etc: convert from cmd/gc, cmd/6g etc

First draft of converted Go compiler, using rsc.io/c2go rev 83d795a.

Change-Id: I29f4c7010de07d2ff1947bbca9865879d83c32c3
Reviewed-on: https://go-review.googlesource.com/4851
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/internal/gc/go.go b/src/cmd/internal/gc/go.go
new file mode 100644
index 0000000..ff1a429
--- /dev/null
+++ b/src/cmd/internal/gc/go.go
@@ -0,0 +1,1179 @@
+// Copyright 2009 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 gc
+
+import (
+	"bytes"
+	"cmd/internal/obj"
+	"encoding/binary"
+)
+
+// Copyright 2009 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.
+
+// avoid <ctype.h>
+
+// The parser's maximum stack size.
+// We have to use a #define macro here since yacc
+// or bison will check for its definition and use
+// a potentially smaller value if it is undefined.
+const (
+	NHUNK    = 50000
+	BUFSIZ   = 8192
+	NSYMB    = 500
+	NHASH    = 1024
+	STRINGSZ = 200
+	MAXALIGN = 7
+	UINF     = 100
+	PRIME1   = 3
+	AUNK     = 100
+	AMEM     = 0 + iota - 9
+	AMEM0
+	AMEM8
+	AMEM16
+	AMEM32
+	AMEM64
+	AMEM128
+	ANOEQ
+	ANOEQ0
+	ANOEQ8
+	ANOEQ16
+	ANOEQ32
+	ANOEQ64
+	ANOEQ128
+	ASTRING
+	AINTER
+	ANILINTER
+	ASLICE
+	AFLOAT32
+	AFLOAT64
+	ACPLX64
+	ACPLX128
+	BADWIDTH        = -1000000000
+	MaxStackVarSize = 10 * 1024 * 1024
+)
+
+/*
+ * note this is the representation
+ * of the compilers string literals,
+ * it is not the runtime representation
+ */
+type Strlit struct {
+	S string
+}
+
+const (
+	Mpscale = 29
+	Mpprec  = 16
+	Mpnorm  = Mpprec - 1
+	Mpbase  = 1 << Mpscale
+	Mpsign  = Mpbase >> 1
+	Mpmask  = Mpbase - 1
+	Mpdebug = 0
+)
+
+type Mpint struct {
+	A   [Mpprec]int
+	Neg uint8
+	Ovf uint8
+}
+
+type Mpflt struct {
+	Val Mpint
+	Exp int16
+}
+
+type Mpcplx struct {
+	Real Mpflt
+	Imag Mpflt
+}
+
+type Val struct {
+	Ctype int16
+	U     struct {
+		Reg  int16
+		Bval int16
+		Xval *Mpint
+		Fval *Mpflt
+		Cval *Mpcplx
+		Sval *Strlit
+	}
+}
+
+type Array struct {
+	length   int32
+	size     int32
+	capacity int32
+	data     string
+}
+
+type Bvec struct {
+	n int32
+	b []uint32
+}
+
+type Pkg struct {
+	Name     string
+	Path     *Strlit
+	Pathsym  *Sym
+	Prefix   string
+	Link     *Pkg
+	Imported uint8
+	Exported int8
+	Direct   int8
+	Safe     bool
+}
+
+type Sym struct {
+	Lexical    uint16
+	Flags      uint8
+	Sym        uint8
+	Link       *Sym
+	Npkg       int32
+	Uniqgen    uint32
+	Importdef  *Pkg
+	Linkname   string
+	Pkg        *Pkg
+	Name       string
+	Def        *Node
+	Label      *Label
+	Block      int32
+	Lastlineno int32
+	Origpkg    *Pkg
+	Lsym       *obj.LSym
+}
+
+type Node struct {
+	Left           *Node
+	Right          *Node
+	Ntest          *Node
+	Nincr          *Node
+	Ninit          *NodeList
+	Nbody          *NodeList
+	Nelse          *NodeList
+	List           *NodeList
+	Rlist          *NodeList
+	Op             uint8
+	Nointerface    bool
+	Ullman         uint8
+	Addable        uint8
+	Trecur         uint8
+	Etype          uint8
+	Bounded        uint8
+	Class          uint8
+	Method         uint8
+	Embedded       uint8
+	Colas          uint8
+	Diag           uint8
+	Noescape       bool
+	Nosplit        bool
+	Builtin        uint8
+	Nowritebarrier bool
+	Walkdef        uint8
+	Typecheck      uint8
+	Local          uint8
+	Dodata         uint8
+	Initorder      uint8
+	Used           uint8
+	Isddd          uint8
+	Readonly       uint8
+	Implicit       uint8
+	Addrtaken      uint8
+	Assigned       uint8
+	Captured       uint8
+	Byval          uint8
+	Dupok          uint8
+	Wrapper        uint8
+	Reslice        uint8
+	Likely         int8
+	Hasbreak       uint8
+	Needzero       uint8
+	Needctxt       uint8
+	Esc            uint
+	Funcdepth      int
+	Type           *Type
+	Orig           *Node
+	Nname          *Node
+	Shortname      *Node
+	Enter          *NodeList
+	Exit           *NodeList
+	Cvars          *NodeList
+	Dcl            *NodeList
+	Inl            *NodeList
+	Inldcl         *NodeList
+	Val            Val
+	Ntype          *Node
+	Defn           *Node
+	Pack           *Node
+	Curfn          *Node
+	Paramfld       *Type
+	Decldepth      int
+	Heapaddr       *Node
+	Outerexpr      *Node
+	Stackparam     *Node
+	Alloc          *Node
+	Outer          *Node
+	Closure        *Node
+	Top            int
+	Inlvar         *Node
+	Pkg            *Pkg
+	Initplan       *InitPlan
+	Escflowsrc     *NodeList
+	Escretval      *NodeList
+	Escloopdepth   int
+	Sym            *Sym
+	Vargen         int32
+	Lineno         int32
+	Endlineno      int32
+	Xoffset        int64
+	Stkdelta       int64
+	Ostk           int32
+	Iota           int32
+	Walkgen        uint32
+	Esclevel       int32
+	Opt            interface{}
+}
+
+type NodeList struct {
+	N    *Node
+	Next *NodeList
+	End  *NodeList
+}
+
+type Type struct {
+	Etype       uint8
+	Nointerface uint8
+	Noalg       uint8
+	Chan        uint8
+	Trecur      uint8
+	Printed     uint8
+	Embedded    uint8
+	Siggen      uint8
+	Funarg      uint8
+	Copyany     uint8
+	Local       uint8
+	Deferwidth  uint8
+	Broke       uint8
+	Isddd       uint8
+	Align       uint8
+	Haspointers uint8
+	Nod         *Node
+	Orig        *Type
+	Lineno      int
+	Thistuple   int
+	Outtuple    int
+	Intuple     int
+	Outnamed    uint8
+	Method      *Type
+	Xmethod     *Type
+	Sym         *Sym
+	Vargen      int32
+	Nname       *Node
+	Argwid      int64
+	Type        *Type
+	Width       int64
+	Down        *Type
+	Outer       *Type
+	Note        *Strlit
+	Bound       int64
+	Bucket      *Type
+	Hmap        *Type
+	Hiter       *Type
+	Map         *Type
+	Maplineno   int32
+	Embedlineno int32
+	Copyto      *NodeList
+	Lastfn      *Node
+}
+
+type Label struct {
+	Used     uint8
+	Sym      *Sym
+	Def      *Node
+	Use      *NodeList
+	Link     *Label
+	Gotopc   *obj.Prog
+	Labelpc  *obj.Prog
+	Breakpc  *obj.Prog
+	Continpc *obj.Prog
+}
+
+type InitEntry struct {
+	Xoffset int64
+	Key     *Node
+	Expr    *Node
+}
+
+type InitPlan struct {
+	Lit  int64
+	Zero int64
+	Expr int64
+	E    []InitEntry
+}
+
+const (
+	EscUnknown = iota
+	EscHeap
+	EscScope
+	EscNone
+	EscReturn
+	EscNever
+	EscBits           = 3
+	EscMask           = (1 << EscBits) - 1
+	EscContentEscapes = 1 << EscBits
+	EscReturnBits     = EscBits + 1
+)
+
+/*
+ * Every node has a walkgen field.
+ * If you want to do a traversal of a node graph that
+ * might contain duplicates and want to avoid
+ * visiting the same nodes twice, increment walkgen
+ * before starting.  Then before processing a node, do
+ *
+ *	if(n->walkgen == walkgen)
+ *		return;
+ *	n->walkgen = walkgen;
+ *
+ * Such a walk cannot call another such walk recursively,
+ * because of the use of the global walkgen.
+ */
+var walkgen uint32
+
+const (
+	SymExport   = 1 << 0
+	SymPackage  = 1 << 1
+	SymExported = 1 << 2
+	SymUniq     = 1 << 3
+	SymSiggen   = 1 << 4
+	SymAsm      = 1 << 5
+	SymAlgGen   = 1 << 6
+)
+
+var dclstack *Sym
+
+type Iter struct {
+	Done  int
+	Tfunc *Type
+	T     *Type
+	An    **Node
+	N     *Node
+}
+
+// Node ops.
+const (
+	OXXX = iota
+	ONAME
+	ONONAME
+	OTYPE
+	OPACK
+	OLITERAL
+	OADD
+	OSUB
+	OOR
+	OXOR
+	OADDSTR
+	OADDR
+	OANDAND
+	OAPPEND
+	OARRAYBYTESTR
+	OARRAYBYTESTRTMP
+	OARRAYRUNESTR
+	OSTRARRAYBYTE
+	OSTRARRAYBYTETMP
+	OSTRARRAYRUNE
+	OAS
+	OAS2
+	OAS2FUNC
+	OAS2RECV
+	OAS2MAPR
+	OAS2DOTTYPE
+	OASOP
+	OCALL
+	OCALLFUNC
+	OCALLMETH
+	OCALLINTER
+	OCALLPART
+	OCAP
+	OCLOSE
+	OCLOSURE
+	OCMPIFACE
+	OCMPSTR
+	OCOMPLIT
+	OMAPLIT
+	OSTRUCTLIT
+	OARRAYLIT
+	OPTRLIT
+	OCONV
+	OCONVIFACE
+	OCONVNOP
+	OCOPY
+	ODCL
+	ODCLFUNC
+	ODCLFIELD
+	ODCLCONST
+	ODCLTYPE
+	ODELETE
+	ODOT
+	ODOTPTR
+	ODOTMETH
+	ODOTINTER
+	OXDOT
+	ODOTTYPE
+	ODOTTYPE2
+	OEQ
+	ONE
+	OLT
+	OLE
+	OGE
+	OGT
+	OIND
+	OINDEX
+	OINDEXMAP
+	OKEY
+	OPARAM
+	OLEN
+	OMAKE
+	OMAKECHAN
+	OMAKEMAP
+	OMAKESLICE
+	OMUL
+	ODIV
+	OMOD
+	OLSH
+	ORSH
+	OAND
+	OANDNOT
+	ONEW
+	ONOT
+	OCOM
+	OPLUS
+	OMINUS
+	OOROR
+	OPANIC
+	OPRINT
+	OPRINTN
+	OPAREN
+	OSEND
+	OSLICE
+	OSLICEARR
+	OSLICESTR
+	OSLICE3
+	OSLICE3ARR
+	ORECOVER
+	ORECV
+	ORUNESTR
+	OSELRECV
+	OSELRECV2
+	OIOTA
+	OREAL
+	OIMAG
+	OCOMPLEX
+	OBLOCK
+	OBREAK
+	OCASE
+	OXCASE
+	OCONTINUE
+	ODEFER
+	OEMPTY
+	OFALL
+	OXFALL
+	OFOR
+	OGOTO
+	OIF
+	OLABEL
+	OPROC
+	ORANGE
+	ORETURN
+	OSELECT
+	OSWITCH
+	OTYPESW
+	OTCHAN
+	OTMAP
+	OTSTRUCT
+	OTINTER
+	OTFUNC
+	OTARRAY
+	ODDD
+	ODDDARG
+	OINLCALL
+	OEFACE
+	OITAB
+	OSPTR
+	OCLOSUREVAR
+	OCFUNC
+	OCHECKNIL
+	OVARKILL
+	OREGISTER
+	OINDREG
+	OCMP
+	ODEC
+	OINC
+	OEXTEND
+	OHMUL
+	OLROT
+	ORROTC
+	ORETJMP
+	OEND
+)
+
+const (
+	Txxx = iota
+	TINT8
+	TUINT8
+	TINT16
+	TUINT16
+	TINT32
+	TUINT32
+	TINT64
+	TUINT64
+	TINT
+	TUINT
+	TUINTPTR
+	TCOMPLEX64
+	TCOMPLEX128
+	TFLOAT32
+	TFLOAT64
+	TBOOL
+	TPTR32
+	TPTR64
+	TFUNC
+	TARRAY
+	T_old_DARRAY
+	TSTRUCT
+	TCHAN
+	TMAP
+	TINTER
+	TFORW
+	TFIELD
+	TANY
+	TSTRING
+	TUNSAFEPTR
+	TIDEAL
+	TNIL
+	TBLANK
+	TFUNCARGS
+	TCHANARGS
+	TINTERMETH
+	NTYPE
+)
+
+const (
+	CTxxx = iota
+	CTINT
+	CTRUNE
+	CTFLT
+	CTCPLX
+	CTSTR
+	CTBOOL
+	CTNIL
+)
+
+const (
+	Cxxx  = 0
+	Crecv = 1 << 0
+	Csend = 1 << 1
+	Cboth = Crecv | Csend
+)
+
+// declaration context
+const (
+	Pxxx = iota
+	PEXTERN
+	PAUTO
+	PPARAM
+	PPARAMOUT
+	PPARAMREF
+	PFUNC
+	PDISCARD
+	PHEAP = 1 << 7
+)
+
+const (
+	Etop      = 1 << 1
+	Erv       = 1 << 2
+	Etype     = 1 << 3
+	Ecall     = 1 << 4
+	Efnstruct = 1 << 5
+	Eiota     = 1 << 6
+	Easgn     = 1 << 7
+	Eindir    = 1 << 8
+	Eaddr     = 1 << 9
+	Eproc     = 1 << 10
+	Ecomplit  = 1 << 11
+)
+
+const (
+	BITS = 3
+	NVAR = BITS * 64
+)
+
+type Bits struct {
+	b [BITS]uint64
+}
+
+var zbits Bits
+
+type Var struct {
+	offset     int64
+	node       *Node
+	nextinnode *Var
+	width      int
+	id         int
+	name       int8
+	etype      int8
+	addr       int8
+}
+
+var var_ [NVAR]Var
+
+type Typedef struct {
+	Name   string
+	Etype  int
+	Sameas int
+}
+
+type Sig struct {
+	name   string
+	pkg    *Pkg
+	isym   *Sym
+	tsym   *Sym
+	type_  *Type
+	mtype  *Type
+	offset int32
+	link   *Sig
+}
+
+type Io struct {
+	infile     string
+	bin        *obj.Biobuf
+	ilineno    int32
+	nlsemi     int
+	eofnl      int
+	last       int
+	peekc      int
+	peekc1     int
+	cp         string
+	importsafe bool
+}
+
+type Dlist struct {
+	field *Type
+}
+
+type Idir struct {
+	link *Idir
+	dir  string
+}
+
+/*
+ * argument passing to/from
+ * smagic and umagic
+ */
+type Magic struct {
+	W   int
+	S   int
+	Bad int
+	Sd  int64
+	Sm  int64
+	Ud  uint64
+	Um  uint64
+	Ua  int
+}
+
+/*
+ * note this is the runtime representation
+ * of the compilers arrays.
+ *
+ * typedef	struct
+ * {				// must not move anything
+ *	uchar	array[8];	// pointer to data
+ *	uchar	nel[4];		// number of elements
+ *	uchar	cap[4];		// allocated number of elements
+ * } Array;
+ */
+var Array_array int // runtime offsetof(Array,array) - same for String
+
+var Array_nel int // runtime offsetof(Array,nel) - same for String
+
+var Array_cap int // runtime offsetof(Array,cap)
+
+var sizeof_Array int // runtime sizeof(Array)
+
+/*
+ * note this is the runtime representation
+ * of the compilers strings.
+ *
+ * typedef	struct
+ * {				// must not move anything
+ *	uchar	array[8];	// pointer to data
+ *	uchar	nel[4];		// number of elements
+ * } String;
+ */
+var sizeof_String int // runtime sizeof(String)
+
+var dotlist [10]Dlist // size is max depth of embeddeds
+
+var curio Io
+
+var pushedio Io
+
+var lexlineno int32
+
+var lineno int32
+
+var prevlineno int32
+
+var pragcgobuf string
+
+var infile string
+
+var outfile string
+
+var bout *obj.Biobuf
+
+var nerrors int
+
+var nsavederrors int
+
+var nsyntaxerrors int
+
+var decldepth int
+
+var safemode int
+
+var nolocalimports int
+
+var namebuf string
+
+var lexbuf bytes.Buffer
+var strbuf bytes.Buffer
+
+func DBG(...interface{}) {}
+
+var litbuf string
+
+var Debug [256]int
+
+var debugstr string
+
+var Debug_checknil int
+
+var hash [NHASH]*Sym
+
+var importmyname *Sym // my name for package
+
+var localpkg *Pkg // package being compiled
+
+var importpkg *Pkg // package being imported
+
+var structpkg *Pkg // package that declared struct, during import
+
+var builtinpkg *Pkg // fake package for builtins
+
+var gostringpkg *Pkg // fake pkg for Go strings
+
+var itabpkg *Pkg // fake pkg for itab cache
+
+var Runtimepkg *Pkg // package runtime
+
+var racepkg *Pkg // package runtime/race
+
+var stringpkg *Pkg // fake package for C strings
+
+var typepkg *Pkg // fake package for runtime type info (headers)
+
+var typelinkpkg *Pkg // fake package for runtime type info (data)
+
+var weaktypepkg *Pkg // weak references to runtime type info
+
+var unsafepkg *Pkg // package unsafe
+
+var trackpkg *Pkg // fake package for field tracking
+
+var rawpkg *Pkg // fake package for raw symbol names
+
+var phash [128]*Pkg
+
+var Tptr int // either TPTR32 or TPTR64
+
+var myimportpath string
+
+var idirs *Idir
+
+var localimport string
+
+var asmhdr string
+
+var Types [NTYPE]*Type
+
+var idealstring *Type
+
+var idealbool *Type
+
+var bytetype *Type
+
+var runetype *Type
+
+var errortype *Type
+
+var Simtype [NTYPE]uint8
+
+var Isptr [NTYPE]uint8
+
+var isforw [NTYPE]uint8
+
+var Isint [NTYPE]uint8
+
+var Isfloat [NTYPE]uint8
+
+var Iscomplex [NTYPE]uint8
+
+var Issigned [NTYPE]uint8
+
+var issimple [NTYPE]uint8
+
+var okforeq [NTYPE]uint8
+
+var okforadd [NTYPE]uint8
+
+var okforand [NTYPE]uint8
+
+var okfornone [NTYPE]uint8
+
+var okforcmp [NTYPE]uint8
+
+var okforbool [NTYPE]uint8
+
+var okforcap [NTYPE]uint8
+
+var okforlen [NTYPE]uint8
+
+var okforarith [NTYPE]uint8
+
+var okforconst [NTYPE]uint8
+
+var okfor [OEND][]byte
+
+var iscmp [OEND]uint8
+
+var Minintval [NTYPE]*Mpint
+
+var Maxintval [NTYPE]*Mpint
+
+var minfltval [NTYPE]*Mpflt
+
+var maxfltval [NTYPE]*Mpflt
+
+var xtop *NodeList
+
+var externdcl *NodeList
+
+var exportlist *NodeList
+
+var importlist *NodeList // imported functions and methods with inlinable bodies
+
+var funcsyms *NodeList
+
+var dclcontext int // PEXTERN/PAUTO
+
+var incannedimport int
+
+var statuniqgen int // name generator for static temps
+
+var loophack int
+
+var iota_ int32
+
+var lastconst *NodeList
+
+var lasttype *Node
+
+var Maxarg int64
+
+var Stksize int64 // stack size for current frame
+
+var stkptrsize int64 // prefix of stack containing pointers
+
+var blockgen int32 // max block number
+
+var block int32 // current block number
+
+var Hasdefer int // flag that curfn has defer statetment
+
+var Curfn *Node
+
+var Widthptr int
+
+var Widthint int
+
+var Widthreg int
+
+var typesw *Node
+
+var nblank *Node
+
+var Use_sse int
+
+var thunk int32
+
+var Funcdepth int
+
+var typecheckok int
+
+var compiling_runtime int
+
+var compiling_wrappers int
+
+var inl_nonlocal int
+
+var use_writebarrier int
+
+var pure_go int
+
+var flag_installsuffix string
+
+var flag_race int
+
+var flag_largemodel int
+
+var noescape bool
+
+var nosplit bool
+
+var nowritebarrier bool
+
+var debuglive int
+
+var Ctxt *obj.Link
+
+var nointerface bool
+
+var writearchive int
+
+var bstdout obj.Biobuf
+
+var Nacl bool
+
+/*
+ *	y.tab.c
+ */
+
+/*
+ *	align.c
+ */
+
+/*
+ *	array.c
+ */
+
+/*
+ *	bits.c
+ */
+
+/*
+ *	mparith1.c
+ */
+
+/*
+ *	mparith2.c
+ */
+
+/*
+ *	mparith3.c
+ */
+
+/*
+ *	obj.c
+ */
+
+/*
+ *	order.c
+ */
+
+/*
+ *	range.c
+ */
+
+/*
+ *	reflect.c
+ */
+
+/*
+ *	select.c
+ */
+
+/*
+ *	sinit.c
+ */
+
+/*
+ *	subr.c
+ */
+
+/*
+ *	swt.c
+ */
+
+/*
+ *	typecheck.c
+ */
+
+/*
+ *	unsafe.c
+ */
+
+/*
+ *	walk.c
+ */
+
+/*
+ *	thearch-specific ggen.c/gsubr.c/gobj.c/pgen.c/plive.c
+ */
+var continpc *obj.Prog
+
+var breakpc *obj.Prog
+
+var Pc *obj.Prog
+
+var firstpc *obj.Prog
+
+var nodfp *Node
+
+var Disable_checknil int
+
+var zerosize int64
+
+/*
+ *	racewalk.c
+ */
+
+/*
+ *	flow.c
+ */
+type Flow struct {
+	Prog   *obj.Prog
+	P1     *Flow
+	P2     *Flow
+	P2link *Flow
+	S1     *Flow
+	S2     *Flow
+	Link   *Flow
+	Active int32
+	Id     int32
+	Rpo    int32
+	Loop   uint16
+	Refset uint8
+	Data   interface{}
+}
+
+type Graph struct {
+	Start *Flow
+	Num   int
+	Rpo   []*Flow
+}
+
+/*
+ *	interface to back end
+ */
+type ProgInfo struct {
+	Flags    uint32
+	Reguse   uint64
+	Regset   uint64
+	Regindex uint64
+}
+
+const (
+	Pseudo     = 1 << 1
+	OK         = 1 << 2
+	SizeB      = 1 << 3
+	SizeW      = 1 << 4
+	SizeL      = 1 << 5
+	SizeQ      = 1 << 6
+	SizeF      = 1 << 7
+	SizeD      = 1 << 8
+	LeftAddr   = 1 << 9
+	LeftRead   = 1 << 10
+	LeftWrite  = 1 << 11
+	RegRead    = 1 << 12
+	CanRegRead = 1 << 13
+	RightAddr  = 1 << 14
+	RightRead  = 1 << 15
+	RightWrite = 1 << 16
+	Move       = 1 << 17
+	Conv       = 1 << 18
+	Cjmp       = 1 << 19
+	Break      = 1 << 20
+	Call       = 1 << 21
+	Jump       = 1 << 22
+	Skip       = 1 << 23
+	SetCarry   = 1 << 24
+	UseCarry   = 1 << 25
+	KillCarry  = 1 << 26
+	ShiftCX    = 1 << 27
+	ImulAXDX   = 1 << 28
+	PostInc    = 1 << 29
+)
+
+type Arch struct {
+	ByteOrder      binary.ByteOrder
+	Thechar        int
+	Thestring      string
+	Thelinkarch    *obj.LinkArch
+	Typedefs       []Typedef
+	REGSP          int
+	REGCTXT        int
+	MAXWIDTH       int64
+	Anyregalloc    func() int
+	Betypeinit     func()
+	Bgen           func(*Node, bool, int, *obj.Prog)
+	Cgen           func(*Node, *Node)
+	Cgen_call      func(*Node, int)
+	Cgen_callinter func(*Node, *Node, int)
+	Cgen_ret       func(*Node)
+	Clearfat       func(*Node)
+	Defframe       func(*obj.Prog)
+	Excise         func(*Flow)
+	Expandchecks   func(*obj.Prog)
+	Gclean         func()
+	Ginit          func()
+	Gins           func(int, *Node, *Node) *obj.Prog
+	Ginscall       func(*Node, int)
+	Igen           func(*Node, *Node, *Node)
+	Linkarchinit   func()
+	Peep           func(*obj.Prog)
+	Proginfo       func(*ProgInfo, *obj.Prog)
+	Regalloc       func(*Node, *Type, *Node)
+	Regfree        func(*Node)
+	Regtyp         func(*obj.Addr) int
+	Sameaddr       func(*obj.Addr, *obj.Addr) int
+	Smallindir     func(*obj.Addr, *obj.Addr) int
+	Stackaddr      func(*obj.Addr) int
+	Excludedregs   func() uint64
+	RtoB           func(int) uint64
+	FtoB           func(int) uint64
+	BtoR           func(uint64) int
+	BtoF           func(uint64) int
+	Optoas         func(int, *Type) int
+	Doregbits      func(int) uint64
+	Regnames       func(*int) []string
+}
+
+var pcloc int32
+
+var Thearch Arch
+
+var Newproc *Node
+
+var Deferproc *Node
+
+var Deferreturn *Node
+
+var Panicindex *Node
+
+var panicslice *Node
+
+var throwreturn *Node