]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "cmd/compile: cleanup nodpc and nodfp"
authorMatthew Dempsky <mdempsky@google.com>
Thu, 8 Mar 2018 21:00:36 +0000 (21:00 +0000)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 8 Mar 2018 21:23:01 +0000 (21:23 +0000)
This reverts commit dcac984b97470c4f047f0d3d87b0af40f5246ed2.

Reason for revert: broke LR architectures (arm64, ppc64, s390x)

Change-Id: I531d311c9053e81503c8c78d6cf044b318fc828b
Reviewed-on: https://go-review.googlesource.com/99695
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/gc/builtin.go
src/cmd/compile/internal/gc/builtin/runtime.go
src/cmd/compile/internal/gc/esc.go
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/pgen.go
src/cmd/compile/internal/gc/racewalk.go
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/gc/universe.go
src/cmd/compile/internal/gc/walk.go

index d5fd11aa9074da6957eefd36bf8b7c2f8c8e4d41..3bb17673a5bb895a0962ec00ecd904db3aa37ada 100644 (file)
@@ -16,144 +16,144 @@ var runtimeDecls = [...]struct {
        {"throwinit", funcTag, 5},
        {"panicwrap", funcTag, 5},
        {"gopanic", funcTag, 7},
-       {"gorecover", funcTag, 9},
+       {"gorecover", funcTag, 10},
        {"goschedguarded", funcTag, 5},
-       {"printbool", funcTag, 11},
-       {"printfloat", funcTag, 13},
-       {"printint", funcTag, 15},
-       {"printhex", funcTag, 17},
-       {"printuint", funcTag, 17},
-       {"printcomplex", funcTag, 19},
-       {"printstring", funcTag, 21},
-       {"printpointer", funcTag, 22},
-       {"printiface", funcTag, 22},
-       {"printeface", funcTag, 22},
-       {"printslice", funcTag, 22},
+       {"printbool", funcTag, 12},
+       {"printfloat", funcTag, 14},
+       {"printint", funcTag, 16},
+       {"printhex", funcTag, 18},
+       {"printuint", funcTag, 18},
+       {"printcomplex", funcTag, 20},
+       {"printstring", funcTag, 22},
+       {"printpointer", funcTag, 23},
+       {"printiface", funcTag, 23},
+       {"printeface", funcTag, 23},
+       {"printslice", funcTag, 23},
        {"printnl", funcTag, 5},
        {"printsp", funcTag, 5},
        {"printlock", funcTag, 5},
        {"printunlock", funcTag, 5},
-       {"concatstring2", funcTag, 25},
-       {"concatstring3", funcTag, 26},
-       {"concatstring4", funcTag, 27},
-       {"concatstring5", funcTag, 28},
-       {"concatstrings", funcTag, 30},
-       {"cmpstring", funcTag, 32},
-       {"intstring", funcTag, 35},
-       {"slicebytetostring", funcTag, 37},
-       {"slicebytetostringtmp", funcTag, 38},
-       {"slicerunetostring", funcTag, 41},
-       {"stringtoslicebyte", funcTag, 42},
-       {"stringtoslicerune", funcTag, 45},
-       {"decoderune", funcTag, 46},
-       {"slicecopy", funcTag, 47},
-       {"slicestringcopy", funcTag, 48},
-       {"convI2I", funcTag, 49},
-       {"convT2E", funcTag, 50},
-       {"convT2E16", funcTag, 50},
-       {"convT2E32", funcTag, 50},
-       {"convT2E64", funcTag, 50},
-       {"convT2Estring", funcTag, 50},
-       {"convT2Eslice", funcTag, 50},
-       {"convT2Enoptr", funcTag, 50},
-       {"convT2I", funcTag, 50},
-       {"convT2I16", funcTag, 50},
-       {"convT2I32", funcTag, 50},
-       {"convT2I64", funcTag, 50},
-       {"convT2Istring", funcTag, 50},
-       {"convT2Islice", funcTag, 50},
-       {"convT2Inoptr", funcTag, 50},
-       {"assertE2I", funcTag, 49},
-       {"assertE2I2", funcTag, 51},
-       {"assertI2I", funcTag, 49},
-       {"assertI2I2", funcTag, 51},
-       {"panicdottypeE", funcTag, 52},
-       {"panicdottypeI", funcTag, 52},
-       {"panicnildottype", funcTag, 53},
-       {"ifaceeq", funcTag, 56},
-       {"efaceeq", funcTag, 56},
-       {"fastrand", funcTag, 58},
-       {"makemap64", funcTag, 60},
-       {"makemap", funcTag, 61},
-       {"makemap_small", funcTag, 62},
-       {"mapaccess1", funcTag, 63},
-       {"mapaccess1_fast32", funcTag, 64},
-       {"mapaccess1_fast64", funcTag, 64},
-       {"mapaccess1_faststr", funcTag, 64},
-       {"mapaccess1_fat", funcTag, 65},
-       {"mapaccess2", funcTag, 66},
-       {"mapaccess2_fast32", funcTag, 67},
-       {"mapaccess2_fast64", funcTag, 67},
-       {"mapaccess2_faststr", funcTag, 67},
-       {"mapaccess2_fat", funcTag, 68},
-       {"mapassign", funcTag, 63},
-       {"mapassign_fast32", funcTag, 64},
-       {"mapassign_fast32ptr", funcTag, 64},
-       {"mapassign_fast64", funcTag, 64},
-       {"mapassign_fast64ptr", funcTag, 64},
-       {"mapassign_faststr", funcTag, 64},
-       {"mapiterinit", funcTag, 69},
-       {"mapdelete", funcTag, 69},
-       {"mapdelete_fast32", funcTag, 70},
-       {"mapdelete_fast64", funcTag, 70},
-       {"mapdelete_faststr", funcTag, 70},
-       {"mapiternext", funcTag, 71},
-       {"makechan64", funcTag, 73},
-       {"makechan", funcTag, 74},
-       {"chanrecv1", funcTag, 76},
-       {"chanrecv2", funcTag, 77},
-       {"chansend1", funcTag, 79},
-       {"closechan", funcTag, 22},
-       {"writeBarrier", varTag, 81},
-       {"typedmemmove", funcTag, 82},
-       {"typedmemclr", funcTag, 83},
-       {"typedslicecopy", funcTag, 84},
-       {"selectnbsend", funcTag, 85},
-       {"selectnbrecv", funcTag, 86},
-       {"selectnbrecv2", funcTag, 88},
-       {"newselect", funcTag, 90},
-       {"selectsend", funcTag, 91},
-       {"selectrecv", funcTag, 92},
-       {"selectdefault", funcTag, 53},
-       {"selectgo", funcTag, 93},
+       {"concatstring2", funcTag, 26},
+       {"concatstring3", funcTag, 27},
+       {"concatstring4", funcTag, 28},
+       {"concatstring5", funcTag, 29},
+       {"concatstrings", funcTag, 31},
+       {"cmpstring", funcTag, 33},
+       {"intstring", funcTag, 36},
+       {"slicebytetostring", funcTag, 38},
+       {"slicebytetostringtmp", funcTag, 39},
+       {"slicerunetostring", funcTag, 42},
+       {"stringtoslicebyte", funcTag, 43},
+       {"stringtoslicerune", funcTag, 46},
+       {"decoderune", funcTag, 47},
+       {"slicecopy", funcTag, 49},
+       {"slicestringcopy", funcTag, 50},
+       {"convI2I", funcTag, 51},
+       {"convT2E", funcTag, 52},
+       {"convT2E16", funcTag, 52},
+       {"convT2E32", funcTag, 52},
+       {"convT2E64", funcTag, 52},
+       {"convT2Estring", funcTag, 52},
+       {"convT2Eslice", funcTag, 52},
+       {"convT2Enoptr", funcTag, 52},
+       {"convT2I", funcTag, 52},
+       {"convT2I16", funcTag, 52},
+       {"convT2I32", funcTag, 52},
+       {"convT2I64", funcTag, 52},
+       {"convT2Istring", funcTag, 52},
+       {"convT2Islice", funcTag, 52},
+       {"convT2Inoptr", funcTag, 52},
+       {"assertE2I", funcTag, 51},
+       {"assertE2I2", funcTag, 53},
+       {"assertI2I", funcTag, 51},
+       {"assertI2I2", funcTag, 53},
+       {"panicdottypeE", funcTag, 54},
+       {"panicdottypeI", funcTag, 54},
+       {"panicnildottype", funcTag, 55},
+       {"ifaceeq", funcTag, 58},
+       {"efaceeq", funcTag, 58},
+       {"fastrand", funcTag, 60},
+       {"makemap64", funcTag, 62},
+       {"makemap", funcTag, 63},
+       {"makemap_small", funcTag, 64},
+       {"mapaccess1", funcTag, 65},
+       {"mapaccess1_fast32", funcTag, 66},
+       {"mapaccess1_fast64", funcTag, 66},
+       {"mapaccess1_faststr", funcTag, 66},
+       {"mapaccess1_fat", funcTag, 67},
+       {"mapaccess2", funcTag, 68},
+       {"mapaccess2_fast32", funcTag, 69},
+       {"mapaccess2_fast64", funcTag, 69},
+       {"mapaccess2_faststr", funcTag, 69},
+       {"mapaccess2_fat", funcTag, 70},
+       {"mapassign", funcTag, 65},
+       {"mapassign_fast32", funcTag, 66},
+       {"mapassign_fast32ptr", funcTag, 66},
+       {"mapassign_fast64", funcTag, 66},
+       {"mapassign_fast64ptr", funcTag, 66},
+       {"mapassign_faststr", funcTag, 66},
+       {"mapiterinit", funcTag, 71},
+       {"mapdelete", funcTag, 71},
+       {"mapdelete_fast32", funcTag, 72},
+       {"mapdelete_fast64", funcTag, 72},
+       {"mapdelete_faststr", funcTag, 72},
+       {"mapiternext", funcTag, 73},
+       {"makechan64", funcTag, 75},
+       {"makechan", funcTag, 76},
+       {"chanrecv1", funcTag, 78},
+       {"chanrecv2", funcTag, 79},
+       {"chansend1", funcTag, 81},
+       {"closechan", funcTag, 23},
+       {"writeBarrier", varTag, 83},
+       {"typedmemmove", funcTag, 84},
+       {"typedmemclr", funcTag, 85},
+       {"typedslicecopy", funcTag, 86},
+       {"selectnbsend", funcTag, 87},
+       {"selectnbrecv", funcTag, 88},
+       {"selectnbrecv2", funcTag, 90},
+       {"newselect", funcTag, 91},
+       {"selectsend", funcTag, 92},
+       {"selectrecv", funcTag, 93},
+       {"selectdefault", funcTag, 55},
+       {"selectgo", funcTag, 94},
        {"block", funcTag, 5},
-       {"makeslice", funcTag, 95},
-       {"makeslice64", funcTag, 96},
-       {"growslice", funcTag, 97},
-       {"memmove", funcTag, 98},
-       {"memclrNoHeapPointers", funcTag, 99},
-       {"memclrHasPointers", funcTag, 99},
-       {"memequal", funcTag, 100},
-       {"memequal8", funcTag, 101},
-       {"memequal16", funcTag, 101},
-       {"memequal32", funcTag, 101},
-       {"memequal64", funcTag, 101},
-       {"memequal128", funcTag, 101},
-       {"int64div", funcTag, 102},
-       {"uint64div", funcTag, 103},
-       {"int64mod", funcTag, 102},
-       {"uint64mod", funcTag, 103},
-       {"float64toint64", funcTag, 104},
-       {"float64touint64", funcTag, 105},
-       {"float64touint32", funcTag, 106},
-       {"int64tofloat64", funcTag, 107},
-       {"uint64tofloat64", funcTag, 108},
-       {"uint32tofloat64", funcTag, 109},
-       {"complex128div", funcTag, 110},
-       {"racefuncenter", funcTag, 111},
+       {"makeslice", funcTag, 96},
+       {"makeslice64", funcTag, 97},
+       {"growslice", funcTag, 98},
+       {"memmove", funcTag, 99},
+       {"memclrNoHeapPointers", funcTag, 100},
+       {"memclrHasPointers", funcTag, 100},
+       {"memequal", funcTag, 101},
+       {"memequal8", funcTag, 102},
+       {"memequal16", funcTag, 102},
+       {"memequal32", funcTag, 102},
+       {"memequal64", funcTag, 102},
+       {"memequal128", funcTag, 102},
+       {"int64div", funcTag, 103},
+       {"uint64div", funcTag, 104},
+       {"int64mod", funcTag, 103},
+       {"uint64mod", funcTag, 104},
+       {"float64toint64", funcTag, 105},
+       {"float64touint64", funcTag, 106},
+       {"float64touint32", funcTag, 107},
+       {"int64tofloat64", funcTag, 108},
+       {"uint64tofloat64", funcTag, 109},
+       {"uint32tofloat64", funcTag, 110},
+       {"complex128div", funcTag, 111},
+       {"racefuncenter", funcTag, 112},
        {"racefuncexit", funcTag, 5},
-       {"raceread", funcTag, 111},
-       {"racewrite", funcTag, 111},
-       {"racereadrange", funcTag, 112},
-       {"racewriterange", funcTag, 112},
-       {"msanread", funcTag, 112},
-       {"msanwrite", funcTag, 112},
-       {"support_popcnt", varTag, 10},
-       {"support_sse41", varTag, 10},
+       {"raceread", funcTag, 112},
+       {"racewrite", funcTag, 112},
+       {"racereadrange", funcTag, 113},
+       {"racewriterange", funcTag, 113},
+       {"msanread", funcTag, 113},
+       {"msanwrite", funcTag, 113},
+       {"support_popcnt", varTag, 11},
+       {"support_sse41", varTag, 11},
 }
 
 func runtimeTypes() []*types.Type {
-       var typs [113]*types.Type
+       var typs [114]*types.Type
        typs[0] = types.Bytetype
        typs[1] = types.NewPtr(typs[0])
        typs[2] = types.Types[TANY]
@@ -162,110 +162,111 @@ func runtimeTypes() []*types.Type {
        typs[5] = functype(nil, nil, nil)
        typs[6] = types.Types[TINTER]
        typs[7] = functype(nil, []*Node{anonfield(typs[6])}, nil)
-       typs[8] = types.Types[TUINTPTR]
-       typs[9] = functype(nil, []*Node{anonfield(typs[8])}, []*Node{anonfield(typs[6])})
-       typs[10] = types.Types[TBOOL]
-       typs[11] = functype(nil, []*Node{anonfield(typs[10])}, nil)
-       typs[12] = types.Types[TFLOAT64]
-       typs[13] = functype(nil, []*Node{anonfield(typs[12])}, nil)
-       typs[14] = types.Types[TINT64]
-       typs[15] = functype(nil, []*Node{anonfield(typs[14])}, nil)
-       typs[16] = types.Types[TUINT64]
-       typs[17] = functype(nil, []*Node{anonfield(typs[16])}, nil)
-       typs[18] = types.Types[TCOMPLEX128]
-       typs[19] = functype(nil, []*Node{anonfield(typs[18])}, nil)
-       typs[20] = types.Types[TSTRING]
-       typs[21] = functype(nil, []*Node{anonfield(typs[20])}, nil)
-       typs[22] = functype(nil, []*Node{anonfield(typs[2])}, nil)
-       typs[23] = types.NewArray(typs[0], 32)
-       typs[24] = types.NewPtr(typs[23])
-       typs[25] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[20]), anonfield(typs[20])}, []*Node{anonfield(typs[20])})
-       typs[26] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20])}, []*Node{anonfield(typs[20])})
-       typs[27] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20])}, []*Node{anonfield(typs[20])})
-       typs[28] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20]), anonfield(typs[20])}, []*Node{anonfield(typs[20])})
-       typs[29] = types.NewSlice(typs[20])
-       typs[30] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[29])}, []*Node{anonfield(typs[20])})
-       typs[31] = types.Types[TINT]
-       typs[32] = functype(nil, []*Node{anonfield(typs[20]), anonfield(typs[20])}, []*Node{anonfield(typs[31])})
-       typs[33] = types.NewArray(typs[0], 4)
-       typs[34] = types.NewPtr(typs[33])
-       typs[35] = functype(nil, []*Node{anonfield(typs[34]), anonfield(typs[14])}, []*Node{anonfield(typs[20])})
-       typs[36] = types.NewSlice(typs[0])
-       typs[37] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[36])}, []*Node{anonfield(typs[20])})
-       typs[38] = functype(nil, []*Node{anonfield(typs[36])}, []*Node{anonfield(typs[20])})
-       typs[39] = types.Runetype
-       typs[40] = types.NewSlice(typs[39])
-       typs[41] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[40])}, []*Node{anonfield(typs[20])})
-       typs[42] = functype(nil, []*Node{anonfield(typs[24]), anonfield(typs[20])}, []*Node{anonfield(typs[36])})
-       typs[43] = types.NewArray(typs[39], 32)
-       typs[44] = types.NewPtr(typs[43])
-       typs[45] = functype(nil, []*Node{anonfield(typs[44]), anonfield(typs[20])}, []*Node{anonfield(typs[40])})
-       typs[46] = functype(nil, []*Node{anonfield(typs[20]), anonfield(typs[31])}, []*Node{anonfield(typs[39]), anonfield(typs[31])})
-       typs[47] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2]), anonfield(typs[8])}, []*Node{anonfield(typs[31])})
-       typs[48] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[31])})
-       typs[49] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2])})
-       typs[50] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, []*Node{anonfield(typs[2])})
-       typs[51] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2]), anonfield(typs[10])})
-       typs[52] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[1])}, nil)
-       typs[53] = functype(nil, []*Node{anonfield(typs[1])}, nil)
-       typs[54] = types.NewPtr(typs[8])
-       typs[55] = types.Types[TUNSAFEPTR]
-       typs[56] = functype(nil, []*Node{anonfield(typs[54]), anonfield(typs[55]), anonfield(typs[55])}, []*Node{anonfield(typs[10])})
-       typs[57] = types.Types[TUINT32]
-       typs[58] = functype(nil, nil, []*Node{anonfield(typs[57])})
-       typs[59] = types.NewMap(typs[2], typs[2])
-       typs[60] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[14]), anonfield(typs[3])}, []*Node{anonfield(typs[59])})
-       typs[61] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[31]), anonfield(typs[3])}, []*Node{anonfield(typs[59])})
-       typs[62] = functype(nil, nil, []*Node{anonfield(typs[59])})
-       typs[63] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[3])}, []*Node{anonfield(typs[3])})
-       typs[64] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[2])}, []*Node{anonfield(typs[3])})
-       typs[65] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3])})
-       typs[66] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[3])}, []*Node{anonfield(typs[3]), anonfield(typs[10])})
-       typs[67] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[2])}, []*Node{anonfield(typs[3]), anonfield(typs[10])})
-       typs[68] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3]), anonfield(typs[10])})
-       typs[69] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[3])}, nil)
-       typs[70] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[59]), anonfield(typs[2])}, nil)
-       typs[71] = functype(nil, []*Node{anonfield(typs[3])}, nil)
-       typs[72] = types.NewChan(typs[2], types.Cboth)
-       typs[73] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[14])}, []*Node{anonfield(typs[72])})
-       typs[74] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[31])}, []*Node{anonfield(typs[72])})
-       typs[75] = types.NewChan(typs[2], types.Crecv)
-       typs[76] = functype(nil, []*Node{anonfield(typs[75]), anonfield(typs[3])}, nil)
-       typs[77] = functype(nil, []*Node{anonfield(typs[75]), anonfield(typs[3])}, []*Node{anonfield(typs[10])})
-       typs[78] = types.NewChan(typs[2], types.Csend)
-       typs[79] = functype(nil, []*Node{anonfield(typs[78]), anonfield(typs[3])}, nil)
-       typs[80] = types.NewArray(typs[0], 3)
-       typs[81] = tostruct([]*Node{namedfield("enabled", typs[10]), namedfield("pad", typs[80]), namedfield("needed", typs[10]), namedfield("cgo", typs[10]), namedfield("alignme", typs[16])})
-       typs[82] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3]), anonfield(typs[3])}, nil)
-       typs[83] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, nil)
-       typs[84] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[31])})
-       typs[85] = functype(nil, []*Node{anonfield(typs[78]), anonfield(typs[3])}, []*Node{anonfield(typs[10])})
-       typs[86] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[75])}, []*Node{anonfield(typs[10])})
-       typs[87] = types.NewPtr(typs[10])
-       typs[88] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[87]), anonfield(typs[75])}, []*Node{anonfield(typs[10])})
-       typs[89] = types.Types[TINT32]
-       typs[90] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[14]), anonfield(typs[89])}, nil)
-       typs[91] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[78]), anonfield(typs[3])}, nil)
-       typs[92] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[75]), anonfield(typs[3]), anonfield(typs[87])}, nil)
-       typs[93] = functype(nil, []*Node{anonfield(typs[1])}, []*Node{anonfield(typs[31])})
-       typs[94] = types.NewSlice(typs[2])
-       typs[95] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[31]), anonfield(typs[31])}, []*Node{anonfield(typs[94])})
-       typs[96] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[14]), anonfield(typs[14])}, []*Node{anonfield(typs[94])})
-       typs[97] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[94]), anonfield(typs[31])}, []*Node{anonfield(typs[94])})
-       typs[98] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[8])}, nil)
-       typs[99] = functype(nil, []*Node{anonfield(typs[55]), anonfield(typs[8])}, nil)
-       typs[100] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[8])}, []*Node{anonfield(typs[10])})
-       typs[101] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3])}, []*Node{anonfield(typs[10])})
-       typs[102] = functype(nil, []*Node{anonfield(typs[14]), anonfield(typs[14])}, []*Node{anonfield(typs[14])})
-       typs[103] = functype(nil, []*Node{anonfield(typs[16]), anonfield(typs[16])}, []*Node{anonfield(typs[16])})
-       typs[104] = functype(nil, []*Node{anonfield(typs[12])}, []*Node{anonfield(typs[14])})
-       typs[105] = functype(nil, []*Node{anonfield(typs[12])}, []*Node{anonfield(typs[16])})
-       typs[106] = functype(nil, []*Node{anonfield(typs[12])}, []*Node{anonfield(typs[57])})
-       typs[107] = functype(nil, []*Node{anonfield(typs[14])}, []*Node{anonfield(typs[12])})
-       typs[108] = functype(nil, []*Node{anonfield(typs[16])}, []*Node{anonfield(typs[12])})
-       typs[109] = functype(nil, []*Node{anonfield(typs[57])}, []*Node{anonfield(typs[12])})
-       typs[110] = functype(nil, []*Node{anonfield(typs[18]), anonfield(typs[18])}, []*Node{anonfield(typs[18])})
-       typs[111] = functype(nil, []*Node{anonfield(typs[8])}, nil)
-       typs[112] = functype(nil, []*Node{anonfield(typs[8]), anonfield(typs[8])}, nil)
+       typs[8] = types.Types[TINT32]
+       typs[9] = types.NewPtr(typs[8])
+       typs[10] = functype(nil, []*Node{anonfield(typs[9])}, []*Node{anonfield(typs[6])})
+       typs[11] = types.Types[TBOOL]
+       typs[12] = functype(nil, []*Node{anonfield(typs[11])}, nil)
+       typs[13] = types.Types[TFLOAT64]
+       typs[14] = functype(nil, []*Node{anonfield(typs[13])}, nil)
+       typs[15] = types.Types[TINT64]
+       typs[16] = functype(nil, []*Node{anonfield(typs[15])}, nil)
+       typs[17] = types.Types[TUINT64]
+       typs[18] = functype(nil, []*Node{anonfield(typs[17])}, nil)
+       typs[19] = types.Types[TCOMPLEX128]
+       typs[20] = functype(nil, []*Node{anonfield(typs[19])}, nil)
+       typs[21] = types.Types[TSTRING]
+       typs[22] = functype(nil, []*Node{anonfield(typs[21])}, nil)
+       typs[23] = functype(nil, []*Node{anonfield(typs[2])}, nil)
+       typs[24] = types.NewArray(typs[0], 32)
+       typs[25] = types.NewPtr(typs[24])
+       typs[26] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])})
+       typs[27] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])})
+       typs[28] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])})
+       typs[29] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])})
+       typs[30] = types.NewSlice(typs[21])
+       typs[31] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[30])}, []*Node{anonfield(typs[21])})
+       typs[32] = types.Types[TINT]
+       typs[33] = functype(nil, []*Node{anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[32])})
+       typs[34] = types.NewArray(typs[0], 4)
+       typs[35] = types.NewPtr(typs[34])
+       typs[36] = functype(nil, []*Node{anonfield(typs[35]), anonfield(typs[15])}, []*Node{anonfield(typs[21])})
+       typs[37] = types.NewSlice(typs[0])
+       typs[38] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[37])}, []*Node{anonfield(typs[21])})
+       typs[39] = functype(nil, []*Node{anonfield(typs[37])}, []*Node{anonfield(typs[21])})
+       typs[40] = types.Runetype
+       typs[41] = types.NewSlice(typs[40])
+       typs[42] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[41])}, []*Node{anonfield(typs[21])})
+       typs[43] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21])}, []*Node{anonfield(typs[37])})
+       typs[44] = types.NewArray(typs[40], 32)
+       typs[45] = types.NewPtr(typs[44])
+       typs[46] = functype(nil, []*Node{anonfield(typs[45]), anonfield(typs[21])}, []*Node{anonfield(typs[41])})
+       typs[47] = functype(nil, []*Node{anonfield(typs[21]), anonfield(typs[32])}, []*Node{anonfield(typs[40]), anonfield(typs[32])})
+       typs[48] = types.Types[TUINTPTR]
+       typs[49] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2]), anonfield(typs[48])}, []*Node{anonfield(typs[32])})
+       typs[50] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[32])})
+       typs[51] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2])})
+       typs[52] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, []*Node{anonfield(typs[2])})
+       typs[53] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2]), anonfield(typs[11])})
+       typs[54] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[1])}, nil)
+       typs[55] = functype(nil, []*Node{anonfield(typs[1])}, nil)
+       typs[56] = types.NewPtr(typs[48])
+       typs[57] = types.Types[TUNSAFEPTR]
+       typs[58] = functype(nil, []*Node{anonfield(typs[56]), anonfield(typs[57]), anonfield(typs[57])}, []*Node{anonfield(typs[11])})
+       typs[59] = types.Types[TUINT32]
+       typs[60] = functype(nil, nil, []*Node{anonfield(typs[59])})
+       typs[61] = types.NewMap(typs[2], typs[2])
+       typs[62] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15]), anonfield(typs[3])}, []*Node{anonfield(typs[61])})
+       typs[63] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32]), anonfield(typs[3])}, []*Node{anonfield(typs[61])})
+       typs[64] = functype(nil, nil, []*Node{anonfield(typs[61])})
+       typs[65] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[3])}, []*Node{anonfield(typs[3])})
+       typs[66] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[2])}, []*Node{anonfield(typs[3])})
+       typs[67] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3])})
+       typs[68] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[3])}, []*Node{anonfield(typs[3]), anonfield(typs[11])})
+       typs[69] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[2])}, []*Node{anonfield(typs[3]), anonfield(typs[11])})
+       typs[70] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3]), anonfield(typs[11])})
+       typs[71] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[3])}, nil)
+       typs[72] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[61]), anonfield(typs[2])}, nil)
+       typs[73] = functype(nil, []*Node{anonfield(typs[3])}, nil)
+       typs[74] = types.NewChan(typs[2], types.Cboth)
+       typs[75] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15])}, []*Node{anonfield(typs[74])})
+       typs[76] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32])}, []*Node{anonfield(typs[74])})
+       typs[77] = types.NewChan(typs[2], types.Crecv)
+       typs[78] = functype(nil, []*Node{anonfield(typs[77]), anonfield(typs[3])}, nil)
+       typs[79] = functype(nil, []*Node{anonfield(typs[77]), anonfield(typs[3])}, []*Node{anonfield(typs[11])})
+       typs[80] = types.NewChan(typs[2], types.Csend)
+       typs[81] = functype(nil, []*Node{anonfield(typs[80]), anonfield(typs[3])}, nil)
+       typs[82] = types.NewArray(typs[0], 3)
+       typs[83] = tostruct([]*Node{namedfield("enabled", typs[11]), namedfield("pad", typs[82]), namedfield("needed", typs[11]), namedfield("cgo", typs[11]), namedfield("alignme", typs[17])})
+       typs[84] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3]), anonfield(typs[3])}, nil)
+       typs[85] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, nil)
+       typs[86] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[32])})
+       typs[87] = functype(nil, []*Node{anonfield(typs[80]), anonfield(typs[3])}, []*Node{anonfield(typs[11])})
+       typs[88] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[77])}, []*Node{anonfield(typs[11])})
+       typs[89] = types.NewPtr(typs[11])
+       typs[90] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[89]), anonfield(typs[77])}, []*Node{anonfield(typs[11])})
+       typs[91] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15]), anonfield(typs[8])}, nil)
+       typs[92] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[80]), anonfield(typs[3])}, nil)
+       typs[93] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[77]), anonfield(typs[3]), anonfield(typs[89])}, nil)
+       typs[94] = functype(nil, []*Node{anonfield(typs[1])}, []*Node{anonfield(typs[32])})
+       typs[95] = types.NewSlice(typs[2])
+       typs[96] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32]), anonfield(typs[32])}, []*Node{anonfield(typs[95])})
+       typs[97] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15]), anonfield(typs[15])}, []*Node{anonfield(typs[95])})
+       typs[98] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[95]), anonfield(typs[32])}, []*Node{anonfield(typs[95])})
+       typs[99] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[48])}, nil)
+       typs[100] = functype(nil, []*Node{anonfield(typs[57]), anonfield(typs[48])}, nil)
+       typs[101] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[48])}, []*Node{anonfield(typs[11])})
+       typs[102] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3])}, []*Node{anonfield(typs[11])})
+       typs[103] = functype(nil, []*Node{anonfield(typs[15]), anonfield(typs[15])}, []*Node{anonfield(typs[15])})
+       typs[104] = functype(nil, []*Node{anonfield(typs[17]), anonfield(typs[17])}, []*Node{anonfield(typs[17])})
+       typs[105] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[15])})
+       typs[106] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[17])})
+       typs[107] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[59])})
+       typs[108] = functype(nil, []*Node{anonfield(typs[15])}, []*Node{anonfield(typs[13])})
+       typs[109] = functype(nil, []*Node{anonfield(typs[17])}, []*Node{anonfield(typs[13])})
+       typs[110] = functype(nil, []*Node{anonfield(typs[59])}, []*Node{anonfield(typs[13])})
+       typs[111] = functype(nil, []*Node{anonfield(typs[19]), anonfield(typs[19])}, []*Node{anonfield(typs[19])})
+       typs[112] = functype(nil, []*Node{anonfield(typs[48])}, nil)
+       typs[113] = functype(nil, []*Node{anonfield(typs[48]), anonfield(typs[48])}, nil)
        return typs[:]
 }
index 483f112473407b3e13d6d09cf26392d3eea78f53..bda9d1d03cb21299cb7eae975d1087148e8e204c 100644 (file)
@@ -22,7 +22,7 @@ func throwinit()
 func panicwrap()
 
 func gopanic(interface{})
-func gorecover(uintptr) interface{}
+func gorecover(*int32) interface{}
 func goschedguarded()
 
 func printbool(bool)
index 2dc5f0e12ed96869ff6c81ac090587fef69b08cf..48945e2868f4003a33a81e03b741ab66ba050953 100644 (file)
@@ -2025,6 +2025,10 @@ func addrescapes(n *Node) {
                // Nothing to do.
 
        case ONAME:
+               if n == nodfp {
+                       break
+               }
+
                // if this is a tmpname (PAUTO), it was tagged by tmpname as not escaping.
                // on PPARAM it means something different.
                if n.Class() == PAUTO && n.Esc == EscNever {
index 1cdef781b94da66656b498c793314bce20b20a29..d6db7acc5923a7dcf6512f3a5b38d5883197959d 100644 (file)
@@ -232,6 +232,8 @@ var writearchive bool
 
 var Nacl bool
 
+var nodfp *Node
+
 var disable_checknil int
 
 var autogeneratedPos src.XPos
index f33f9dd99e2bd5f0090da565217b204c9197ecd1..e920f698b7d83f25b40414db445591950a2eee53 100644 (file)
@@ -131,7 +131,12 @@ func (s *ssafn) AllocFrame(f *ssa.Func) {
                for _, v := range b.Values {
                        if n, ok := v.Aux.(*Node); ok {
                                switch n.Class() {
-                               case PAUTO, PPARAM, PPARAMOUT:
+                               case PPARAM, PPARAMOUT:
+                                       // Don't modify nodfp; it is a global.
+                                       if n != nodfp {
+                                               n.Name.SetUsed(true)
+                                       }
+                               case PAUTO:
                                        n.Name.SetUsed(true)
                                }
                        }
index 4490ca8bc47904151ccb0c698c85730b60a7bc73..4b92ce9e0edeed947c9bacfcc8063c9203c30245 100644 (file)
@@ -64,11 +64,21 @@ func instrument(fn *Node) {
        }
 
        if flag_race {
-               lno := lineno
+               // nodpc is the PC of the caller as extracted by
+               // getcallerpc. We use -widthptr(FP) for x86.
+               // BUG: this will not work on arm.
+               nodpc := *nodfp
+               nodpc.Type = types.Types[TUINTPTR]
+               nodpc.Xoffset = int64(-Widthptr)
+               savedLineno := lineno
                lineno = src.NoXPos
-               fn.Func.Enter.Prepend(mkcall("racefuncenter", nil, nil, callerPC))
-               fn.Func.Exit.Append(mkcall("racefuncexit", nil, nil))
-               lineno = lno
+               nd := mkcall("racefuncenter", nil, nil, &nodpc)
+
+               fn.Func.Enter.Prepend(nd)
+               nd = mkcall("racefuncexit", nil, nil)
+               fn.Func.Exit.Append(nd)
+               fn.Func.Dcl = append(fn.Func.Dcl, &nodpc)
+               lineno = savedLineno
        }
 
        if Debug['W'] != 0 {
index f1f7f3cd7dec2b12945e410eb25e0ca8a75e04b1..c6ecc263d83df23d0fcf5e63282a7203078e3be7 100644 (file)
@@ -1471,12 +1471,6 @@ func (s *state) expr(n *Node) *ssa.Value {
                        sym := funcsym(n.Sym).Linksym()
                        return s.entryNewValue1A(ssa.OpAddr, types.NewPtr(n.Type), sym, s.sb)
                }
-               switch n {
-               case callerSP:
-                       return s.newValue0(ssa.OpGetCallerSP, n.Type)
-               case callerPC:
-                       return s.newValue0(ssa.OpGetCallerPC, n.Type)
-               }
                if s.canSSA(n) {
                        return s.variable(n, n.Type)
                }
@@ -3474,6 +3468,10 @@ func (s *state) addr(n *Node, bounded bool) *ssa.Value {
                        if v != nil {
                                return v
                        }
+                       if n == nodfp {
+                               // Special arg that points to the frame pointer (Used by ORECOVER).
+                               return s.entryNewValue1A(ssa.OpAddr, t, n, s.sp)
+                       }
                        s.Fatalf("addr of undeclared ONAME %v. declared: %v", n, s.decladdrs)
                        return nil
                case PAUTO:
index 1cf517d4624e196a23fab3e603600558beb6a08e..a255ae08c0f92dd9045863a6097f41dd5631b2e3 100644 (file)
@@ -466,19 +466,8 @@ func finishUniverse() {
                s1.Block = s.Block
        }
 
-       callerSP = newname(lookup(".sp"))
-       callerSP.Type = types.Types[TUINTPTR]
-       callerSP.SetClass(PPARAM)
-       callerSP.Name.SetUsed(true)
-
-       callerPC = newname(lookup(".pc"))
-       callerPC.Type = types.Types[TUINTPTR]
-       callerPC.SetClass(PPARAM)
-       callerPC.Name.SetUsed(true)
+       nodfp = newname(lookup(".fp"))
+       nodfp.Type = types.Types[TINT32]
+       nodfp.SetClass(PPARAM)
+       nodfp.Name.SetUsed(true)
 }
-
-var (
-       // Pseudo variables that represent the caller's SP and PC, respectively.
-       callerSP *Node
-       callerPC *Node
-)
index 3a5b12353ad23f4a68c4001fa1721fec145cce51..a2dfdb5abc3d4812361be3a3e9e1cd27a8a18b37 100644 (file)
@@ -604,7 +604,7 @@ opswitch:
                n = mkcall("gopanic", nil, init, n.Left)
 
        case ORECOVER:
-               n = mkcall("gorecover", n.Type, init, callerSP)
+               n = mkcall("gorecover", n.Type, init, nod(OADDR, nodfp, nil))
 
        case OCLOSUREVAR, OCFUNC:
                n.SetAddable(true)