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
