[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