A+C: Peter Kleiweg (individual CLA)

R=golang-dev, bradfitz
CC=golang-dev
http://codereview.appspot.com/6260049
cmd/6g, cmd/8g: move panicindex calls out of line

The old code generated for a bounds check was
                CMP
                JLT ok
                CALL panicindex
        ok:
                ...

The new code is (once the linker finishes with it):
                CMP
                JGE panic
                ...
        panic:
                CALL panicindex

which moves the calls out of line, putting more useful
code in each cache line.  This matters especially in tight
loops, such as in Fannkuch.  The benefit is more modest
elsewhere, but real.

From test/bench/go1, amd64:

benchmark                old ns/op    new ns/op    delta
BenchmarkBinaryTree17   6096092000   6088808000   -0.12%
BenchmarkFannkuch11     6151404000   4020463000  -34.64%
BenchmarkGobDecode        28990050     28894630   -0.33%
BenchmarkGobEncode        12406310     12136730   -2.17%
BenchmarkGzip               179923       179903   -0.01%
BenchmarkGunzip              11219        11130   -0.79%
BenchmarkJSONEncode       86429350     86515900   +0.10%
BenchmarkJSONDecode      334593800    315728400   -5.64%
BenchmarkRevcomp25M     1219763000   1180767000   -3.20%
BenchmarkTemplate        492947600    483646800   -1.89%

And 386:

benchmark                old ns/op    new ns/op    delta
BenchmarkBinaryTree17   6354902000   6243000000   -1.76%
BenchmarkFannkuch11     8043769000   7326965000   -8.91%
BenchmarkGobDecode        19010800     18941230   -0.37%
BenchmarkGobEncode        14077500     13792460   -2.02%
BenchmarkGzip               194087       193619   -0.24%
BenchmarkGunzip              12495        12457   -0.30%
BenchmarkJSONEncode      125636400    125451400   -0.15%
BenchmarkJSONDecode      696648600    685032800   -1.67%
BenchmarkRevcomp25M     2058088000   2052545000   -0.27%
BenchmarkTemplate        602140000    589876800   -2.04%

To implement this, two new instruction forms:

        JLT target      // same as always
        JLT $0, target  // branch expected not taken
        JLT $1, target  // branch expected taken

The linker could also emit the prediction prefixes, but it
does not: expected taken branches are reversed so that the
expected case is not taken (as in example above), and
the default expectaton for such a jump is not taken
already.

R=golang-dev, gri, r, dave
CC=golang-dev
http://codereview.appspot.com/6248049
cmd/6l: Fixes for 64-bit Plan 9

Plan 9 versions for amd64 have 2 megabyte pages.
This also fixes the logic for 32-bit vs 64-bit Plan 9,
making 64-bit the default, and adds logic to generate
a symbols table.

R=golang-dev, rsc, rminnich, ality, 0intro
CC=golang-dev, john
http://codereview.appspot.com/6218046

Committer: Russ Cox <rsc@golang.org>
Emacs go-mode: fix Emacs freeze-up when copy/pasting from string or comment.

Fixes issue 3509.
Fixes issue 2767.

R=golang-dev, sameer
CC=golang-dev
http://codereview.appspot.com/6139066

Committer: Sameer Ajmani <sameer@golang.org>
undo CL 6248054 / 0f418a63cdf9

breaks public API document style

««« original CL description
net: fix comment on FileListener

R=golang-dev, bradfitz
CC=golang-dev
http://codereview.appspot.com/6248054
»»»

R=golang-dev, rsc
CC=golang-dev
http://codereview.appspot.com/6242066
crypto: housekeeping

Rename _Block to block, don't bother making it compute count.
Add benchmarks.

R=agl, agl
CC=golang-dev
http://codereview.appspot.com/6243053
net: fix comment on FileListener

R=rsc
CC=golang-dev
http://codereview.appspot.com/6242067
runtime: make go work on netbsd/386

R=golang-dev, rsc
CC=golang-dev
http://codereview.appspot.com/6254055
exp/types: disable test

It's broken and seems to be exp/types's fault.

Update issue 3682.

R=golang-dev, r
CC=golang-dev
http://codereview.appspot.com/6243068
test/bench/shootout/timing.log: update after recent compiler changes
Moving panic out of line speeds up fannkuch almost a factor of two.
Changes to bitwhacking code affect mandelbrot badly.

R=golang-dev, bradfitz, rsc, r
CC=golang-dev
http://codereview.appspot.com/6258056
runtime: replace runtime·rnd function with ROUND macro

It's sad to introduce a new macro, but rnd shows up consistently
in profiles, and the function call overwhelms the two arithmetic
instructions it performs.

R=r
CC=golang-dev
http://codereview.appspot.com/6260051
database/sql: use driver.ColumnConverter everywhere consistently

It was only being used for (*Stmt).Exec, not Query, and not for
the same two methods on *DB.

This unifies (*Stmt).Exec's old inline code into the old
subsetArgs function, renaming it in the process (changing the
old word "subset" to "driver", mostly converted earlier)

Fixes issue 3640

R=golang-dev, rsc
CC=golang-dev
http://codereview.appspot.com/6258045
time: fix deadlock in Sleep(0)
See time/sleep_test.go for repro.

R=golang-dev, r, rsc
CC=golang-dev, patrick.allen.higgins
http://codereview.appspot.com/6250072
merge unexpected branch
net/http: flush server response gracefully when ignoring request body

This prevents clients from seeing RSTs and missing the response
body.

TCP stacks vary. The included test failed on Darwin before but
passed on Linux.

R=golang-dev, rsc
CC=golang-dev
http://codereview.appspot.com/6256066
exp/types: properly read dotted identifiers

Fixes issue 3682.

R=rsc
CC=golang-dev
http://codereview.appspot.com/6256067
Emacs go-mode: don't indent the inside of strings.

Two fixes for indentation problems:

1. Properly recognize multi-line strings. These start with `, not ".

2. Don't indent a line if the beginning of the line is the end of a multi-line string. This happened for instance when inserting a closing bracket after a multi-line string.

R=sameer
CC=golang-dev
http://codereview.appspot.com/6157044

Committer: Sameer Ajmani <sameer@golang.org>
net/http: better comment in hasToken

R=golang-dev, rsc
CC=golang-dev
http://codereview.appspot.com/6249065
encoding/json: add round trip test in Unmarshal

Also convert table to use tagged literal.

R=golang-dev, bradfitz
CC=golang-dev
http://codereview.appspot.com/6258061
fmt: speed up 10-20%

The check for Stringer etc. can only fire if the test is not a builtin, so avoid
the expensive check if we know there's no chance.
Also put in a fast path for pad, which saves a more modest amount.

benchmark                      old ns/op    new ns/op    delta
BenchmarkSprintfEmpty                148          152   +2.70%
BenchmarkSprintfString               585          497  -15.04%
BenchmarkSprintfInt                  441          396  -10.20%
BenchmarkSprintfIntInt               718          603  -16.02%
BenchmarkSprintfPrefixedInt          676          621   -8.14%
BenchmarkSprintfFloat               1003          953   -4.99%
BenchmarkManyArgs                   2945         2312  -21.49%
BenchmarkScanInts                1704152      1734441   +1.78%
BenchmarkScanRecursiveInt        1837397      1828920   -0.46%

R=golang-dev, bradfitz
CC=golang-dev
http://codereview.appspot.com/6245068