1. 10 Feb, 2017 14 commits
    • David R. Jenni's avatar
      sort: optimize average calculation in symMerge and doPivot. · 78e6abd2
      David R. Jenni authored
      Change code of the form `i + (j-i)/2` to `int(uint(i+j) >> 1)`.
      
      The optimized average calculation uses fewer instructions to calculate
      the average without overflowing at the addition.
      
      Analogous to https://golang.org/cl/36332.
      
      name                 old time/op  new time/op  delta
      StableString1K-4     49.6µs ± 3%  49.1µs ± 8%    ~     (p=0.659 n=16+19)
      StableInt1K-4         160µs ±10%   148µs ± 5%  -7.29%  (p=0.000 n=20+16)
      StableInt1K_Slice-4   139µs ± 4%   136µs ± 3%  -2.52%  (p=0.000 n=20+16)
      StableInt64K-4       8.84ms ± 6%  8.57ms ± 5%  -3.07%  (p=0.001 n=20+19)
      Stable1e2-4           162µs ±19%   147µs ±16%  -8.79%  (p=0.002 n=20+20)
      Stable1e4-4          31.0ms ± 5%  30.6ms ± 5%    ~     (p=0.221 n=20+20)
      Stable1e6-4           6.37s ± 3%   6.27s ± 2%  -1.67%  (p=0.000 n=19+20)
      
      Change-Id: I1cea0bcb9ace8ef7e48b8fab772e41b4b2170da9
      Reviewed-on: https://go-review.googlesource.com/36570
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      78e6abd2
    • Ilya Tocar's avatar
      crypto/sha512: Add AVX2 version for AMD64 · 6ac8ccf4
      Ilya Tocar authored
      name          old time/op    new time/op     delta
      Hash8Bytes-6     913ns ± 0%      667ns ± 0%  -26.91%  (p=0.000 n=10+10)
      Hash1K-6        6.58µs ± 0%     4.23µs ± 0%  -35.69%  (p=0.000 n=10+9)
      Hash8K-6        45.9µs ± 0%     28.1µs ± 0%  -38.93%  (p=0.000 n=10+10)
      
      name          old speed      new speed       delta
      Hash8Bytes-6  8.76MB/s ± 0%  11.99MB/s ± 0%  +36.87%  (p=0.000 n=10+8)
      Hash1K-6       156MB/s ± 0%    242MB/s ± 0%  +55.49%  (p=0.000 n=10+9)
      Hash8K-6       178MB/s ± 0%    292MB/s ± 0%  +63.74%  (p=0.000 n=10+10)
      
      Change-Id: Ic9211d68b02935b2195995f264ec57d6bc36f713
      Reviewed-on: https://go-review.googlesource.com/36630
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      6ac8ccf4
    • Adam Langley's avatar
      crypto/x509: ignore CN if SAN extension present. · 630e93ed
      Adam Langley authored
      The code previously tested only whether DNS-name SANs were present in a
      certificate which is only approximately correct. In fact, /any/ SAN
      extension, including one with no DNS names, should cause the CN to be
      ignored.
      
      Change-Id: I3d9824918975be6d4817e7cbb48ed1b0c5a2fc8b
      Reviewed-on: https://go-review.googlesource.com/36696
      Run-TryBot: Adam Langley <agl@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      630e93ed
    • Michael Munday's avatar
      cmd/{asm,internal/obj/s390x}, math: remove emulated float instructions · a5246168
      Michael Munday authored
      The s390x port was based on the ppc64 port and, because of the way the
      port was done, inherited some instructions from it. ppc64 supports
      3-operand (4-operand for FMADD etc.) floating point instructions
      but s390x doesn't (the destination register is always an input) and
      so these were emulated.
      
      There is a bug in the emulation of FMADD whereby if the destination
      register is also a source for the multiplication it will be
      clobbered. This doesn't break any assembly code in the std lib but
      could affect future work.
      
      To fix this I have gone through the floating point instructions and
      removed all unnecessary 3-/4-operand emulation. The compiler doesn't
      need it and assembly writers don't need it, it's just a source of
      bugs.
      
      I've also deleted the FNMADD family of emulated instructions. They
      aren't used anywhere.
      
      Change-Id: Ic07cedcf141a6a3b43a0c84895460f6cfbf56c04
      Reviewed-on: https://go-review.googlesource.com/33350
      Run-TryBot: Michael Munday <munday@ca.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      a5246168
    • Alberto Donizetti's avatar
      math: check overflow in amd64 Exp implementation · f44e5870
      Alberto Donizetti authored
      Unlike the pure go implementation used by every other architecture,
      the amd64 asm implementation of Exp does not fail early if the
      argument is known to overflow. Make it fail early.
      
      Cost of the check is < 1ns (on an old Sandy Bridge machine):
      
      name   old time/op  new time/op  delta
      Exp-4  18.3ns ± 1%  18.7ns ± 1%  +2.08%  (p=0.000 n=18+20)
      
      Fixes #14932
      Fixes #18912
      
      Change-Id: I04b3f9b4ee853822cbdc97feade726fbe2907289
      Reviewed-on: https://go-review.googlesource.com/36271
      Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f44e5870
    • Tuo Shan's avatar
      encoding/json: clarify documention for Unmarshal into a pointer. · 4fafc843
      Tuo Shan authored
      Fixes #18730.
      
      Change-Id: If3ef28e62f7e449d4c8dc1dfd78f7d6f5a87ed26
      Reviewed-on: https://go-review.googlesource.com/36478Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      4fafc843
    • Daniel Theophanes's avatar
      database/sql: ensure driverConns are closed if not returned to pool · a335c344
      Daniel Theophanes authored
      Previously if a connection was requested but timed out during the
      request and when acquiring the db.Lock the connection request
      is fulfilled and the request is unable to be returned to the
      connection pool, then then driver connection would not be closed.
      
      No tests were added or modified because I was unable to determine
      how to trigger this situation without something invasive.
      
      Change-Id: I9d4dc680e3fdcf63d79d212174a5b8b313f363f1
      Reviewed-on: https://go-review.googlesource.com/36641Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      a335c344
    • Russ Cox's avatar
      runtime/pprof: merge internal/protopprof into pprof package · 9a754439
      Russ Cox authored
      These are very tightly coupled, and internal/protopprof is small.
      There's no point to having a separate package.
      
      Change-Id: I2c8aa49c9e18a7128657bf2b05323860151b5606
      Reviewed-on: https://go-review.googlesource.com/36711
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      9a754439
    • Nigel Tao's avatar
      image: fix the overlap check in Rectangle.Intersect. · 3a209281
      Nigel Tao authored
      This is a re-roll of a previous commit,
      a855da29, which was rolled back in
      14347ee4.
      
      It was rolled back because it broke a unit test in image/gif. The
      image/gif code was fixed by 9ef65dbe
      "image/gif: fix frame-inside-image bounds checking".
      
      The original commit message:
      
      image: fix the overlap check in Rectangle.Intersect.
      
      The doc comment for Rectangle.Intersect clearly states, "If the two
      rectangles do not overlap then the zero rectangle will be returned."
      Prior to this fix, calling Intersect on adjacent but non-overlapping
      rectangles would return an empty but non-zero rectangle.
      
      The fix essentially changes
      if r.Min.X > r.Max.X || r.Min.Y > r.Max.Y { etc }
      to
      if r.Min.X >= r.Max.X || r.Min.Y >= r.Max.Y { etc }
      (note that the > signs have become >= signs), but changing that line to:
      if r.Empty() { etc }
      seems clearer (and equivalent).
      
      Change-Id: I2e3af1f1686064a573b2e513b39246fe60c03631
      Reviewed-on: https://go-review.googlesource.com/36734Reviewed-by: default avatarRob Pike <r@golang.org>
      Run-TryBot: Nigel Tao <nigeltao@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      3a209281
    • Josh Bleecher Snyder's avatar
      cmd/compile: use constants directly for fast map access calls · 5faba305
      Josh Bleecher Snyder authored
      CL 35554 taught order.go to use static variables
      for constants that needed to be addressable for runtime routines.
      However, there is one class of runtime routines that
      do not actually need an addressable value: fast map access routines.
      This CL teaches order.go to avoid using static variables
      for addressability in those cases.
      Instead, it avoids introducing a temp at all,
      which the backend would just have to optimize away.
      
      Fixes #19015.
      
      Change-Id: I5ef780c604fac3fb48dabb23a344435e283cb832
      Reviewed-on: https://go-review.googlesource.com/36693Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      5faba305
    • Nigel Tao's avatar
      image/gif: fix frame-inside-image bounds checking. · 9ef65dbe
      Nigel Tao authored
      The semantics of the Go image.Rectangle type is that the In and
      Intersects methods treat empty rectangles specially. There are multiple
      valid representations of an empty image.Rectangle. One of them is the
      zero image.Rectangle but there are others. They're obviously not all
      equal in the == sense, so we shouldn't use != to check GIF's semantics.
      
      This change will allow us to re-roll
      a855da29 "image: fix the overlap check
      in Rectangle.Intersect" which was rolled back in
      14347ee4.
      
      Change-Id: Ie1a0d092510a7bb6170e61adbf334b21361ff9e6
      Reviewed-on: https://go-review.googlesource.com/36639
      Run-TryBot: Nigel Tao <nigeltao@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      9ef65dbe
    • Nathan Caza's avatar
      net/http: improve handling of errors in Dir.Open · ee60d39a
      Nathan Caza authored
      The current implementation fails to produce an "IsNotExist" error on some
      platforms (unix) for certain situations where it would be expected. This causes
      downstream consumers, like FileServer, to emit 500 errors instead of a 404 for
      some non-existant paths on certain platforms but not others.
      
      As an example, os.Open("/index.html/foo") on a unix-type system will return
      syscall.ENOTDIR, which os.IsNotExist cannot return true for (because the
      error code is ambiguous without context). On windows, this same example
      would result in os.IsNotExist returning true -- since the returned error is
      specific.
      
      This change alters Dir.Open to look up the tree for an "IsPermission" or
      "IsNotExist" error to return, or a non-directory, returning os.ErrNotExist in
      the last case. For all other error scenarios, the original error is returned.
      This ensures that downstream code, like FileServer, receive errors that behave
      the same across all platforms.
      
      Fixes #18984
      
      Change-Id: Id7d16591c24cd96afddb6d8ae135ac78da42ed37
      Reviewed-on: https://go-review.googlesource.com/36635Reviewed-by: default avatarYasuhiro MATSUMOTO <mattn.jp@gmail.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ee60d39a
    • Robert Griesemer's avatar
      spec: refer to "not defined type" rather than "unnamed type" in conversions · 866f63e8
      Robert Griesemer authored
      We missed this in https://golang.org/cl/36213.
      Thanks to Chris Hines for pointing it out.
      
      For #18130.
      
      Change-Id: I6279ab19966c4391c4b4458b21fd2527d3f949dd
      Reviewed-on: https://go-review.googlesource.com/36691Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      866f63e8
    • Robert Griesemer's avatar
      cmd/compile/internal/syntax: removed gcCompat code needed to pass orig. tests · 3fd3171c
      Robert Griesemer authored
      The gcCompat mode was introduced to match the new parser's node position
      setup exactly with the positions used by the original parser. Some of the
      gcCompat adjustments were required to satisfy syntax error test cases,
      and the rest were required to make toolstash cmp pass.
      
      This change removes the former gcCompat adjustments and instead adjusts
      the respective test cases as necessary. In some cases this makes the error
      lines consistent with the ones reported by gccgo.
      
      Where it has changed, the position associated with a given syntactic construct
      is the position (line/col number) of the left-most token belonging to the
      construct.
      
      Change-Id: I5b60c00c5999a895c4d6d6e9b383c6405ccf725c
      Reviewed-on: https://go-review.googlesource.com/36695
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      3fd3171c
  2. 09 Feb, 2017 25 commits
  3. 08 Feb, 2017 1 commit