Commit 5ce6d3e0 authored by Keith Randall's avatar Keith Randall

undo CL 105260044 / afd6f214cc81

The go:nosplit change wasn't the problem, reinstating.

««« original CL description
undo CL 93380044 / 7f0999348917

Partial undo, just of go:nosplit annotation.  Somehow it
is breaking the windows builders.

TBR=bradfitz

««« original CL description
runtime: implement string ops in Go

Also implement go:nosplit annotation.  Not really needed
for now, but we'll definitely need it for other conversions.

benchmark                 old ns/op     new ns/op     delta
BenchmarkRuneIterate      534           474           -11.24%
BenchmarkRuneIterate2     535           470           -12.15%

LGTM=bradfitz
R=golang-codereviews, dave, bradfitz, minux
CC=golang-codereviews
https://golang.org/cl/93380044
»»»

TBR=bradfitz
CC=golang-codereviews
https://golang.org/cl/105260044
»»»

TBR=bradfitz
R=bradfitz, golang-codereviews
CC=golang-codereviews
https://golang.org/cl/103490043
parent f2147cd7
......@@ -649,7 +649,7 @@ typefmt(Fmt *fp, Type *t)
if(t->funarg) {
fmtstrcpy(fp, "(");
if(fmtmode == FTypeId || fmtmode == FErr) { // no argument names on function signature, and no "noescape" tags
if(fmtmode == FTypeId || fmtmode == FErr) { // no argument names on function signature, and no "noescape"/"nosplit" tags
for(t1=t->type; t1!=T; t1=t1->down)
if(t1->down)
fmtprint(fp, "%hT, ", t1);
......
......@@ -269,6 +269,7 @@ struct Node
uchar colas; // OAS resulting from :=
uchar diag; // already printed error about this
uchar noescape; // func arguments do not escape
uchar nosplit; // func should not execute on separate stack
uchar builtin; // built-in name, like len or close
uchar walkdef;
uchar typecheck;
......@@ -980,6 +981,7 @@ EXTERN char* flag_installsuffix;
EXTERN int flag_race;
EXTERN int flag_largemodel;
EXTERN int noescape;
EXTERN int nosplit;
EXTERN int debuglive;
EXTERN Link* ctxt;
......
......@@ -1311,6 +1311,7 @@ xfndcl:
$$->nbody = $3;
$$->endlineno = lineno;
$$->noescape = noescape;
$$->nosplit = nosplit;
funcbody($$);
}
......@@ -1495,6 +1496,7 @@ xdcl_list:
testdclstack();
nointerface = 0;
noescape = 0;
nosplit = 0;
}
vardcl_list:
......
......@@ -1592,6 +1592,10 @@ go:
noescape = 1;
goto out;
}
if(strcmp(lexbuf, "go:nosplit") == 0) {
nosplit = 1;
goto out;
}
out:
return c;
......
......@@ -229,6 +229,8 @@ compile(Node *fn)
ptxt->TEXTFLAG |= WRAPPER;
if(fn->needctxt)
ptxt->TEXTFLAG |= NEEDCTXT;
if(fn->nosplit)
ptxt->TEXTFLAG |= NOSPLIT;
// Clumsy but important.
// See test/recover.go for test cases and src/pkg/reflect/value.go
......
......@@ -3828,6 +3828,7 @@ yyreduce:
(yyval.node)->nbody = (yyvsp[(3) - (3)].list);
(yyval.node)->endlineno = lineno;
(yyval.node)->noescape = noescape;
(yyval.node)->nosplit = nosplit;
funcbody((yyval.node));
}
break;
......@@ -4037,6 +4038,7 @@ yyreduce:
testdclstack();
nointerface = 0;
noescape = 0;
nosplit = 0;
}
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment