1. 27 Oct, 2017 1 commit
    • Artyom Pervukhin's avatar
      image/draw, image/color: optimize hot path sqDiff function · 7a8e8b2f
      Artyom Pervukhin authored
      Function sqDiff is called multiple times in the hot path (x, y loops) of
      drawPaletted from the image/draw package; number of sqDiff calls is
      between 4×width×height and 4×width×height×len(palette) for each
      drawPaletted call.
      
      Simplify this function by removing arguments comparison and relying
      instead on signed to unsigned integer conversion rules and properties of
      unsigned integer values operations guaranteed by the spec:
      
      > For unsigned integer values, the operations +, -, *, and << are
      > computed modulo 2n, where n is the bit width of the unsigned integer's
      > type. Loosely speaking, these unsigned integer operations discard high
      > bits upon overflow, and programs may rely on ``wrap around''.
      
      image/gif package benchmark that depends on the code updated shows
      throughput improvements:
      
      name               old time/op    new time/op    delta
      QuantizedEncode-4     788ms ± 2%     468ms ± 9%  -40.58%  (p=0.000 n=9+10)
      
      name               old speed      new speed      delta
      QuantizedEncode-4  1.56MB/s ± 2%  2.63MB/s ± 8%  +68.47%  (p=0.000 n=9+10)
      
      Closes #22375.
      
      Change-Id: Ic9a540e39ceb21e7741d308af1cfbe61b4ac347b
      Reviewed-on: https://go-review.googlesource.com/72373Reviewed-by: 's avatarNigel Tao <nigeltao@golang.org>
      7a8e8b2f
  2. 26 Oct, 2017 11 commits
    • Ian Lance Taylor's avatar
      test: add type alias test that caused gccgo to crash · 62229970
      Ian Lance Taylor authored
      Change-Id: I3b388e4ac05ace5b7768ade03df2bee5bcc26ba8
      Reviewed-on: https://go-review.googlesource.com/73790
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarThan McIntosh <thanm@google.com>
      62229970
    • isharipo's avatar
      obj/x86: re-organize code to make codegen easier · c35f239d
      isharipo authored
      1. Move AXXX constants (A-enumeration) from "a.out.go" to "aenum.go"
      2. Move VEX-encoded optabs from "asm6.go" to "vex_optabs.go"
      
      Also run "go generate" over aenum.go. This explains diff in "anames.go".
      
      Initialization of opindex is split into 2 loops:
      one for `vexOptab`, second for `optab`.
      
      Rationale:
      when VEX instructions are generated with current structure,
      asm6.go is modified, which can lead to merge conflicts and
      larger diffs than desired. Same for a.out.go.
      
      This change makes x86avxgen usage possible:
      https://go-review.googlesource.com/c/arch/+/66972
      
      Change-Id: Id9eefcf5ccf0a89440e5d01bcb80926a8163b41d
      Reviewed-on: https://go-review.googlesource.com/70630
      Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      c35f239d
    • Christopher Koch's avatar
      syscall: remove unnecessary use of unsafe.Pointer. · 186872f3
      Christopher Koch authored
      Change-Id: I43b32fbca8761d33927e7d0541bba123df0e0122
      Reviewed-on: https://go-review.googlesource.com/73556Reviewed-by: 's avatarTobias Klauser <tobias.klauser@gmail.com>
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      186872f3
    • Austin Clements's avatar
      runtime: "fix" non-preemptible loop in TestParallelRWMutexReaders · da95254d
      Austin Clements authored
      TestParallelRWMutexReaders has a non-preemptible loop in it that can
      deadlock if GC triggers. "Fix" it like we've fixed similar tests.
      
      Updates #10958.
      
      Change-Id: I13618f522f5ef0c864e7171ad2f655edececacd7
      Reviewed-on: https://go-review.googlesource.com/73710
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      da95254d
    • Russ Cox's avatar
      vendor/golang_org/x/net/route: refresh from upstream · 4d8d1383
      Russ Cox authored
      This picks up a few changes and should stop the macOS crashes.
      
      Fixes #22456.
      
      Change-Id: I7e0aae119a5564fcfaa16eeab7422bdd5ff0497b
      Reviewed-on: https://go-review.googlesource.com/73691
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      4d8d1383
    • Alberto Donizetti's avatar
      math/big: add (*Float).Sqrt · bd48d37e
      Alberto Donizetti authored
      This change adds a Square root method to the big.Float type, with
      signature
      
        (z *Float) Sqrt(x *Float) *Float
      
      Fixes #20460
      
      Change-Id: I050aaed0615fe0894e11c800744600648343c223
      Reviewed-on: https://go-review.googlesource.com/67830
      Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      bd48d37e
    • Kevin Burke's avatar
      net/smtp: fix spelling mistake · 577538a2
      Kevin Burke authored
      Change-Id: I3141076c0db7b70ea408c941a857ed1f82dcb2df
      Reviewed-on: https://go-review.googlesource.com/73557Reviewed-by: 's avatarAlberto Donizetti <alb.donizetti@gmail.com>
      577538a2
    • David Crawshaw's avatar
      cmd/link, plugin: always encode path · 6355d6c7
      David Crawshaw authored
      Both the linker and the plugin package were inconsistent
      about when they applied the path encoding defined in
      objabi.PathToPrefix. As a result, only some symbols from
      a package path that required encoding were being found.
      
      So always encoding the path.
      
      Fixes #22295
      
      Change-Id: Ife86c79ca20b2e9307008ed83885e193d32b7dc4
      Reviewed-on: https://go-review.googlesource.com/72390
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      6355d6c7
    • Ben Shi's avatar
      cmd/compile: optimize MOVBS/MOVBU/MOVHS/MOVHU on ARMv6 and ARMv7 · 78ea9a71
      Ben Shi authored
      MOVBS/MOVBU/MOVHS/MOVHU can be optimized with a single instruction
      on ARMv6 and ARMv7, instead of a pair of left/right shifts.
      
      The benchmark tests show big improvement in special cases and a little
      improvement in total.
      
      1. A special case gets about 29% improvement.
      name                     old time/op    new time/op    delta
      TypePro-4                  3.81ms ± 1%    2.71ms ± 1%  -28.97%  (p=0.000 n=26+25)
      The source code of this case can be found at
      https://github.com/benshi001/ugo1/blob/master/typepromotion_test.go
      
      2. There is a little improvement in the go1 benchmark, excluding the noise.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              42.1s ± 3%     42.1s ± 2%    ~     (p=0.883 n=28+30)
      Fannkuch11-4                24.3s ± 4%     24.7s ± 7%  +1.64%  (p=0.026 n=30+30)
      FmtFprintfEmpty-4           833ns ± 2%     835ns ± 2%    ~     (p=0.371 n=26+28)
      FmtFprintfString-4         1.36µs ± 3%    1.35µs ± 1%    ~     (p=0.202 n=26+23)
      FmtFprintfInt-4            1.42µs ± 3%    1.43µs ± 1%  +0.66%  (p=0.000 n=26+27)
      FmtFprintfIntInt-4         2.10µs ± 1%    2.10µs ± 2%    ~     (p=0.104 n=25+26)
      FmtFprintfPrefixedInt-4    2.37µs ± 2%    2.33µs ± 1%  -1.75%  (p=0.000 n=25+28)
      FmtFprintfFloat-4          4.50µs ± 0%    4.37µs ± 1%  -2.81%  (p=0.000 n=23+25)
      FmtManyArgs-4              8.08µs ± 0%    8.13µs ± 3%    ~     (p=0.160 n=23+26)
      GobDecode-4                 102ms ± 4%     103ms ± 4%  +1.08%  (p=0.001 n=28+26)
      GobEncode-4                96.0ms ± 2%    95.2ms ± 3%  -0.81%  (p=0.000 n=24+25)
      Gzip-4                      4.17s ± 3%     4.11s ± 2%  -1.45%  (p=0.000 n=25+25)
      Gunzip-4                    597ms ± 2%     594ms ± 2%  -0.57%  (p=0.000 n=24+26)
      HTTPClientServer-4          708µs ± 4%     708µs ± 4%    ~     (p=0.852 n=28+28)
      JSONEncode-4                241ms ± 1%     245ms ± 3%  +1.62%  (p=0.000 n=27+28)
      JSONDecode-4                906ms ± 3%     889ms ± 3%  -1.85%  (p=0.000 n=23+24)
      Mandelbrot200-4            41.8ms ± 1%    41.8ms ± 1%    ~     (p=0.929 n=25+24)
      GoParse-4                  47.1ms ± 2%    45.3ms ± 4%  -3.80%  (p=0.000 n=28+24)
      RegexpMatchEasy0_32-4      1.27µs ± 2%    1.28µs ± 1%  +0.77%  (p=0.000 n=26+28)
      RegexpMatchEasy0_1K-4      8.08µs ± 9%    7.83µs ±10%  -3.10%  (p=0.012 n=26+26)
      RegexpMatchEasy1_32-4      1.29µs ± 5%    1.29µs ± 2%    ~     (p=0.301 n=26+29)
      RegexpMatchEasy1_1K-4      10.5µs ± 4%    10.3µs ± 5%  -1.95%  (p=0.003 n=26+26)
      RegexpMatchMedium_32-4     1.94µs ± 1%    1.95µs ± 1%    ~     (p=0.251 n=24+27)
      RegexpMatchMedium_1K-4      502µs ± 2%     502µs ± 2%    ~     (p=0.336 n=25+28)
      RegexpMatchHard_32-4       26.7µs ± 1%    26.6µs ± 3%    ~     (p=0.454 n=27+26)
      RegexpMatchHard_1K-4        801µs ± 3%     799µs ± 2%    ~     (p=0.097 n=24+26)
      Revcomp-4                  73.5ms ± 5%    73.2ms ± 3%    ~     (p=0.240 n=26+26)
      Template-4                  1.07s ± 2%     1.05s ± 1%  -2.39%  (p=0.000 n=26+24)
      TimeParse-4                6.87µs ± 1%    6.85µs ± 1%    ~     (p=0.094 n=28+23)
      TimeFormat-4               13.4µs ± 1%    13.4µs ± 1%    ~     (p=0.664 n=25+29)
      [Geo mean]                  717µs          713µs       -0.54%
      
      name                     old speed      new speed      delta
      GobDecode-4              7.52MB/s ± 4%  7.44MB/s ± 4%  -1.10%  (p=0.001 n=28+26)
      GobEncode-4              7.99MB/s ± 2%  8.06MB/s ± 3%  +0.81%  (p=0.000 n=24+25)
      Gzip-4                   4.66MB/s ± 3%  4.72MB/s ± 2%  +1.43%  (p=0.000 n=25+25)
      Gunzip-4                 32.5MB/s ± 2%  32.7MB/s ± 2%  +0.56%  (p=0.001 n=24+26)
      JSONEncode-4             8.04MB/s ± 1%  7.92MB/s ± 3%  -1.59%  (p=0.000 n=27+28)
      JSONDecode-4             2.14MB/s ± 3%  2.18MB/s ± 3%  +1.90%  (p=0.000 n=23+24)
      GoParse-4                1.23MB/s ± 3%  1.28MB/s ± 4%  +4.23%  (p=0.000 n=30+24)
      RegexpMatchEasy0_32-4    25.2MB/s ± 2%  25.0MB/s ± 1%  -0.76%  (p=0.000 n=26+28)
      RegexpMatchEasy0_1K-4     127MB/s ± 8%   131MB/s ± 9%  +3.29%  (p=0.012 n=26+26)
      RegexpMatchEasy1_32-4    24.8MB/s ± 5%  24.8MB/s ± 2%    ~     (p=0.339 n=26+29)
      RegexpMatchEasy1_1K-4    97.9MB/s ± 4%  99.8MB/s ± 5%  +1.98%  (p=0.004 n=26+26)
      RegexpMatchMedium_32-4    514kB/s ± 3%   515kB/s ± 3%    ~     (p=0.391 n=28+28)
      RegexpMatchMedium_1K-4   2.04MB/s ± 2%  2.04MB/s ± 2%    ~     (p=0.517 n=25+28)
      RegexpMatchHard_32-4     1.20MB/s ± 3%  1.20MB/s ± 3%    ~     (p=0.203 n=28+28)
      RegexpMatchHard_1K-4     1.28MB/s ± 3%  1.28MB/s ± 2%    ~     (p=0.499 n=24+26)
      Revcomp-4                34.6MB/s ± 4%  34.7MB/s ± 3%    ~     (p=0.245 n=26+26)
      Template-4               1.81MB/s ± 2%  1.85MB/s ± 3%  +2.30%  (p=0.000 n=26+25)
      [Geo mean]               6.82MB/s       6.88MB/s       +0.84%
      
      fixes #20653
      
      Change-Id: Ief0d6e726e517e51ae511325b21ee72598e759ff
      Reviewed-on: https://go-review.googlesource.com/71992Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      78ea9a71
    • griesemer's avatar
      test: add test cases for method expressions with literal receiver types · c74712b3
      griesemer authored
      For #9060.
      
      Change-Id: Ibd0f047083f3c98cec96c655a3e2024df8e1d2a0
      Reviewed-on: https://go-review.googlesource.com/73554Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      c74712b3
    • Keith Randall's avatar
      cmd/compile: make sure not to use SP as an index register · 40649e69
      Keith Randall authored
      ...because that's an illegal addressing mode.
      
      I double-checked handling of this code, and 387 is the only
      place where this check is missing.
      
      Fixes #22429
      
      Change-Id: I2284fe729ea86251c6af2f04076ddf7a5e66367c
      Reviewed-on: https://go-review.googlesource.com/73551
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      40649e69
  3. 25 Oct, 2017 24 commits
    • Artyom Pervukhin's avatar
      image/draw: reduce drawPaletted allocations for special source cases · 088209bb
      Artyom Pervukhin authored
      drawPaletted has to discover R,G,B,A color values of each source image
      pixel in a given rectangle. Doing that by calling image.Image.At()
      method returning color.Color interface is quite taxing allocation-wise
      since interface values go through heap. Introduce special cases for some
      concrete source types by fetching color values using type-specific
      methods.
      
      name        old time/op    new time/op    delta
      Paletted-4    7.62ms ± 4%    3.72ms ± 3%   -51.20%  (p=0.008 n=5+5)
      
      name        old alloc/op   new alloc/op   delta
      Paletted-4     480kB ± 0%       0kB ± 0%   -99.99%  (p=0.000 n=4+5)
      
      name        old allocs/op  new allocs/op  delta
      Paletted-4      120k ± 0%        0k ± 0%  -100.00%  (p=0.008 n=5+5)
      
      Updates #15759.
      
      Change-Id: I0ce1770ff600ac80599541aaad4c2c826855c8fb
      Reviewed-on: https://go-review.googlesource.com/72370Reviewed-by: 's avatarNigel Tao <nigeltao@golang.org>
      088209bb
    • griesemer's avatar
      spec: match syntax for method expressions with implementations · f2d52519
      griesemer authored
      A method expression is of the form T.m where T is a type and m
      is a method of that type. The spec restricted T essentially to
      a type name. Both cmd/compile and go/types accepted any type
      syntactically, and a method expression was really just a form
      of a selector expression x.f where x denotes a type.
      
      This CL removes the spec syntax restriction from MethodExpr
      to match the actual implementation. It also moves MethodExpr
      from Operand to PrimaryExpr, because that's what it is.
      
      It still keeps the separate notion of MethodExpr even though
      it looks just like a selector expresion, since a MethodExpr
      must start with a type rather than a value, and the spec's
      syntax expresses this bit of semantics via distinct productions
      (e.g., conversions look like calls but also must start with
      a type).
      
      Fixes #9060.
      
      Change-Id: Idd84655b5b4f85d7ee53ebf749f73f0414a05f4a
      Reviewed-on: https://go-review.googlesource.com/73233Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      f2d52519
    • Matthew Dempsky's avatar
      cmd/compile: document function syntax representation · 4b1f2bb6
      Matthew Dempsky authored
      Not perfect, but it's a start.
      
      Change-Id: I3283385223a39ea73567b0130290bfe4de69d018
      Reviewed-on: https://go-review.googlesource.com/73552Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      4b1f2bb6
    • Joe Tsai's avatar
      archive/zip: restrict UTF-8 detection for comment and name fields · 78805c07
      Joe Tsai authored
      CL 39570 added support for automatically setting flag bit 11 to
      indicate that the filename and comment fields are encoded in UTF-8,
      which is (conventionally) the encoding using for most Go strings.
      
      However, the detection added is too lose for two reasons:
      * We need to ensure both fields are at least possibly UTF-8.
      That is, if any field is definitely not UTF-8, then we can't set the bit.
      * The utf8.ValidRune returns true for utf8.RuneError, which iterating
      over a Go string automatically returns for invalid UTF-8.
      Thus, we manually check for that value.
      
      Updates #22367
      Updates #10741
      
      Change-Id: Ie8aae388432e546e44c6bebd06a00434373ca99e
      Reviewed-on: https://go-review.googlesource.com/72791Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      78805c07
    • Adam Thomason's avatar
      cmd/go: add -shift to go vet's flag whitelist · 4aa28896
      Adam Thomason authored
      CL 40112 intended to allow full flag processing in go vet, but missed
      vet's -shift flag; this corrects the omission.
      
      Fixes #22442
      
      Change-Id: I47525018306bd8b9aa452fb378d0d45319f8cf11
      Reviewed-on: https://go-review.googlesource.com/73553
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      4aa28896
    • Michael Fraenkel's avatar
      io: flatten MultiWriter writers · 060d1a57
      Michael Fraenkel authored
      Replace any nested Writer that is a MultiWriter with its associated
      Writers.
      
      Fixes #22431
      
      Change-Id: Ida7c4c83926363c1780689e216cf0c5241a5b8eb
      Reviewed-on: https://go-review.googlesource.com/73470
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      060d1a57
    • Lynn Boger's avatar
      cmd/go: enable TestNoteReading on ppc64le · b4e207d7
      Lynn Boger authored
      This test was previously disabled when external linking was
      unsupported on ppc64le. It should still be disabled on ppc64
      since there is no cgo or external linking there, but I removed
      the if test for GOARCH=ppc64 since the initial test for cgo
      enabled will cause it to be skipped on ppc64.
      
      Fixes #22360
      
      Change-Id: I5a0e3e4a1bd71ac7bf0ed0c792f7b78fb4a5e100
      Reviewed-on: https://go-review.googlesource.com/73510
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      b4e207d7
    • Henry's avatar
      net/smtp: added Noop to Client · 8b8e57b7
      Henry authored
      This adds a Noop() function to the net/stmp client.
      
      It allows for testing if a connaction is still healthy.
      
      Fixes #22321
      
      Change-Id: I023b613b1536ea21274cc36d41f5720c9bbdecbc
      Reviewed-on: https://go-review.googlesource.com/71650
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      8b8e57b7
    • Lorenz Bauer's avatar
      net: make {TCP,Unix}Listener implement syscall.Conn · eed308de
      Lorenz Bauer authored
      This change adds the syscall.Conn interface to Listener types, with the caveat that only RawConn.Control is supported. Custom socket options can now be set safely.
      
      Updates #19435
      Fixes #22065
      
      Change-Id: I7e74780d00318dc54a923d1c628a18a36009acab
      Reviewed-on: https://go-review.googlesource.com/71651
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      eed308de
    • Daniel Theophanes's avatar
      database/sql: scan into *time.Time without reflection · ff4ee881
      Daniel Theophanes authored
      Previously scanning time.Time into a *time.Time required reflection.
      Now it does not. Scanning already checked if the source value was of
      type time.Time. The only addition was checking the destination was
      of type *time.Time.
      
      Existing tests already scan time.Time into *time.Time, so no new
      tests were added. Linked issue has performance justification.
      
      Fixes #22300
      
      Change-Id: I4eea461c78fad71ce76e7677c8503a1919666931
      Reviewed-on: https://go-review.googlesource.com/73232
      Run-TryBot: Daniel Theophanes <kardianos@gmail.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ff4ee881
    • Ian Lance Taylor's avatar
      os: add deadline methods for File type · 187957d3
      Ian Lance Taylor authored
      Add SetDeadline, SetReadDeadline, and SetWriteDeadline methods to os.File,
      just as they exist today for the net package.
      
      Fixes #22114
      
      Change-Id: I4d390d739169b991175baba676010897dc8568fa
      Reviewed-on: https://go-review.googlesource.com/71770
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      Reviewed-by: 's avatarJoe Tsai <thebrokentoaster@gmail.com>
      187957d3
    • Daniel Theophanes's avatar
      database/sql: ensure all driver interfaces are called under single lock · 1126d148
      Daniel Theophanes authored
      Russ pointed out in a previous CL golang.org/cl/65731 that not only
      was the locking incomplete, previous changes did not correctly
      lock driver calls in other sections. After inspecting
      driverConn, driverStmt, driverResult, Tx, and Rows structs
      where driver interfaces are stored, I discovered a few more places
      that failed to lock driver calls. The largest of these
      was the parameter type converter "driverArgs".
      
      driverArgs was typically called right before another call to the
      driver in a locked region, so I made the entire driverArgs expect
      a locked driver mutex and combined the region. This should not
      be a problem because the connection is pulled out of the connection
      pool either way so there shouldn't be contention.
      
      Fixes #21117
      
      Change-Id: I88d46f74dca25fb11a30f0bf8e79785a73133d23
      Reviewed-on: https://go-review.googlesource.com/71433
      Run-TryBot: Daniel Theophanes <kardianos@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      1126d148
    • Russ Cox's avatar
      runtime: avoid monotonic time zero on systems with low-res timers · 98658212
      Russ Cox authored
      Otherwise low-res timers cause problems at call sites that expect to
      be able to use 0 as meaning "no time set" and therefore expect that
      nanotime never returns 0 itself. For example, sched.lastpoll == 0
      means no last poll.
      
      Fixes #22394.
      
      Change-Id: Iea28acfddfff6f46bc90f041ec173e0fea591285
      Reviewed-on: https://go-review.googlesource.com/73410
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarAustin Clements <austin@google.com>
      98658212
    • Russ Cox's avatar
      doc: document Go 1.9.2 · eb7e8450
      Russ Cox authored
      Change-Id: I7d63e747e798d588bdcf2b79b6ecd21fce7bbc9c
      Reviewed-on: https://go-review.googlesource.com/73391
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarChris Broadfoot <cbro@golang.org>
      eb7e8450
    • Russ Cox's avatar
      doc: document Go 1.8.5 · 381b6807
      Russ Cox authored
      Change-Id: I9241e6acb65c337b961eed9cdeaf4c041b6326a3
      Reviewed-on: https://go-review.googlesource.com/73390
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarChris Broadfoot <cbro@golang.org>
      381b6807
    • Russ Cox's avatar
      cmd/go: explain fmt, fix, vet a bit more in go help · 321597ba
      Russ Cox authored
      Fixes #20918.
      
      Change-Id: I84306242084631bbe7a9adc839f92e72ac1a3e75
      Reviewed-on: https://go-review.googlesource.com/73331
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      321597ba
    • Wei Xiao's avatar
      bytes: add optimized Equal for arm64 · 78ddf274
      Wei Xiao authored
      Use SIMD instructions when comparing chunks bigger than 16 bytes.
      Benchmark results of bytes:
      
      name                 old time/op    new time/op    delta
      Equal/0-8              6.52ns ± 1%    5.51ns ± 0%   -15.43%  (p=0.000 n=8+9)
      Equal/1-8              11.5ns ± 0%    10.5ns ± 0%    -8.70%  (p=0.000 n=10+10)
      Equal/6-8              19.0ns ± 0%    13.5ns ± 0%   -28.95%  (p=0.000 n=10+10)
      Equal/9-8              31.0ns ± 0%    13.5ns ± 0%   -56.45%  (p=0.000 n=10+10)
      Equal/15-8             40.0ns ± 0%    15.5ns ± 0%   -61.25%  (p=0.000 n=10+10)
      Equal/16-8             41.5ns ± 0%    14.5ns ± 0%   -65.06%  (p=0.000 n=10+10)
      Equal/20-8             47.5ns ± 0%    17.0ns ± 0%   -64.21%  (p=0.000 n=10+10)
      Equal/32-8             65.6ns ± 0%    17.0ns ± 0%   -74.09%  (p=0.000 n=10+10)
      Equal/4K-8             6.17µs ± 0%    0.57µs ± 1%   -90.76%  (p=0.000 n=10+10)
      Equal/4M-8             6.41ms ± 0%    1.11ms ±14%   -82.71%  (p=0.000 n=8+10)
      Equal/64M-8             104ms ± 0%      33ms ± 0%   -68.64%  (p=0.000 n=10+10)
      EqualPort/1-8          13.0ns ± 0%    13.0ns ± 0%      ~     (all equal)
      EqualPort/6-8          22.0ns ± 0%    22.7ns ± 0%    +3.06%  (p=0.000 n=8+9)
      EqualPort/32-8         78.1ns ± 0%    78.1ns ± 0%      ~     (all equal)
      EqualPort/4K-8         7.54µs ± 0%    7.61µs ± 0%    +0.92%  (p=0.000 n=10+8)
      EqualPort/4M-8         8.16ms ± 2%    8.05ms ± 1%    -1.31%  (p=0.023 n=10+10)
      EqualPort/64M-8         142ms ± 0%     142ms ± 0%    +0.37%  (p=0.000 n=10+10)
      CompareBytesEqual-8    39.0ns ± 0%    41.6ns ± 2%    +6.67%  (p=0.000 n=9+10)
      
      name                 old speed      new speed      delta
      Equal/1-8            86.9MB/s ± 0%  95.2MB/s ± 0%    +9.53%  (p=0.000 n=8+8)
      Equal/6-8             315MB/s ± 0%   444MB/s ± 0%   +40.74%  (p=0.000 n=9+10)
      Equal/9-8             290MB/s ± 0%   666MB/s ± 0%  +129.63%  (p=0.000 n=8+10)
      Equal/15-8            375MB/s ± 0%   967MB/s ± 0%  +158.09%  (p=0.000 n=10+10)
      Equal/16-8            385MB/s ± 0%  1103MB/s ± 0%  +186.24%  (p=0.000 n=10+9)
      Equal/20-8            421MB/s ± 0%  1175MB/s ± 0%  +179.44%  (p=0.000 n=9+10)
      Equal/32-8            488MB/s ± 0%  1881MB/s ± 0%  +285.34%  (p=0.000 n=10+8)
      Equal/4K-8            664MB/s ± 0%  7181MB/s ± 1%  +981.32%  (p=0.000 n=10+10)
      Equal/4M-8            654MB/s ± 0%  3822MB/s ±16%  +484.15%  (p=0.000 n=8+10)
      Equal/64M-8           645MB/s ± 0%  2056MB/s ± 0%  +218.90%  (p=0.000 n=10+10)
      EqualPort/1-8        76.8MB/s ± 0%  76.7MB/s ± 0%    -0.09%  (p=0.023 n=10+10)
      EqualPort/6-8         272MB/s ± 0%   264MB/s ± 0%    -2.94%  (p=0.000 n=8+10)
      EqualPort/32-8        410MB/s ± 0%   410MB/s ± 0%    +0.01%  (p=0.004 n=9+10)
      EqualPort/4K-8        543MB/s ± 0%   538MB/s ± 0%    -0.91%  (p=0.000 n=9+9)
      EqualPort/4M-8        514MB/s ± 2%   521MB/s ± 1%    +1.31%  (p=0.023 n=10+10)
      EqualPort/64M-8       473MB/s ± 0%   472MB/s ± 0%    -0.37%  (p=0.000 n=10+10)
      
      Benchmark results of go1:
      
      name                     old time/op    new time/op    delta
      BinaryTree17-8              6.53s ± 0%     6.52s ± 2%    ~     (p=0.286 n=4+5)
      Fannkuch11-8                6.35s ± 1%     6.33s ± 0%    ~     (p=0.690 n=5+5)
      FmtFprintfEmpty-8           108ns ± 1%      99ns ± 1%  -8.31%  (p=0.008 n=5+5)
      FmtFprintfString-8          172ns ± 1%     188ns ± 0%  +9.43%  (p=0.016 n=5+4)
      FmtFprintfInt-8             207ns ± 0%     202ns ± 0%  -2.42%  (p=0.008 n=5+5)
      FmtFprintfIntInt-8          277ns ± 1%     271ns ± 1%  -2.02%  (p=0.008 n=5+5)
      FmtFprintfPrefixedInt-8     386ns ± 0%     380ns ± 0%  -1.55%  (p=0.008 n=5+5)
      FmtFprintfFloat-8           492ns ± 0%     494ns ± 1%    ~     (p=0.175 n=4+5)
      FmtManyArgs-8              1.32µs ± 1%    1.31µs ± 2%    ~     (p=0.651 n=5+5)
      GobDecode-8                16.8ms ± 2%    16.9ms ± 1%    ~     (p=0.310 n=5+5)
      GobEncode-8                14.1ms ± 1%    14.1ms ± 1%    ~     (p=1.000 n=5+5)
      Gzip-8                      788ms ± 0%     789ms ± 0%    ~     (p=0.548 n=5+5)
      Gunzip-8                   83.6ms ± 0%    83.6ms ± 0%    ~     (p=0.548 n=5+5)
      HTTPClientServer-8          120µs ± 0%     120µs ± 1%    ~     (p=0.690 n=5+5)
      JSONEncode-8               33.2ms ± 0%    33.6ms ± 0%  +1.20%  (p=0.008 n=5+5)
      JSONDecode-8                152ms ± 1%     146ms ± 1%  -3.70%  (p=0.008 n=5+5)
      Mandelbrot200-8            10.0ms ± 0%    10.0ms ± 0%    ~     (p=0.151 n=5+5)
      GoParse-8                  7.97ms ± 0%    8.06ms ± 0%  +1.15%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-8       233ns ± 1%     239ns ± 4%    ~     (p=0.135 n=5+5)
      RegexpMatchEasy0_1K-8      1.86µs ± 0%    1.86µs ± 0%    ~     (p=0.167 n=5+5)
      RegexpMatchEasy1_32-8       250ns ± 0%     263ns ± 1%  +5.28%  (p=0.008 n=5+5)
      RegexpMatchEasy1_1K-8      2.28µs ± 0%    2.13µs ± 0%  -6.64%  (p=0.000 n=4+5)
      RegexpMatchMedium_32-8      332ns ± 1%     319ns ± 0%  -3.97%  (p=0.008 n=5+5)
      RegexpMatchMedium_1K-8     85.5µs ± 2%    79.1µs ± 1%  -7.42%  (p=0.008 n=5+5)
      RegexpMatchHard_32-8       4.34µs ± 1%    4.42µs ± 7%    ~     (p=0.881 n=5+5)
      RegexpMatchHard_1K-8        130µs ± 1%     127µs ± 0%  -2.18%  (p=0.008 n=5+5)
      Revcomp-8                   1.35s ± 1%     1.34s ± 0%  -0.58%  (p=0.016 n=5+4)
      Template-8                  160ms ± 2%     158ms ± 1%    ~     (p=0.222 n=5+5)
      TimeParse-8                 795ns ± 2%     772ns ± 2%  -2.87%  (p=0.024 n=5+5)
      TimeFormat-8                782ns ± 0%     784ns ± 0%    ~     (p=0.198 n=5+5)
      
      name                     old speed      new speed      delta
      GobDecode-8              45.8MB/s ± 2%  45.5MB/s ± 1%    ~     (p=0.310 n=5+5)
      GobEncode-8              54.3MB/s ± 1%  54.4MB/s ± 1%    ~     (p=0.984 n=5+5)
      Gzip-8                   24.6MB/s ± 0%  24.6MB/s ± 0%    ~     (p=0.540 n=5+5)
      Gunzip-8                  232MB/s ± 0%   232MB/s ± 0%    ~     (p=0.548 n=5+5)
      JSONEncode-8             58.4MB/s ± 0%  57.7MB/s ± 0%  -1.19%  (p=0.008 n=5+5)
      JSONDecode-8             12.8MB/s ± 1%  13.3MB/s ± 1%  +3.85%  (p=0.008 n=5+5)
      GoParse-8                7.27MB/s ± 0%  7.18MB/s ± 0%  -1.13%  (p=0.008 n=5+5)
      RegexpMatchEasy0_32-8     137MB/s ± 1%   134MB/s ± 4%    ~     (p=0.151 n=5+5)
      RegexpMatchEasy0_1K-8     551MB/s ± 0%   550MB/s ± 0%    ~     (p=0.222 n=5+5)
      RegexpMatchEasy1_32-8     128MB/s ± 0%   121MB/s ± 1%  -5.09%  (p=0.008 n=5+5)
      RegexpMatchEasy1_1K-8     449MB/s ± 0%   481MB/s ± 0%  +7.12%  (p=0.016 n=4+5)
      RegexpMatchMedium_32-8   3.00MB/s ± 0%  3.13MB/s ± 0%  +4.33%  (p=0.016 n=4+5)
      RegexpMatchMedium_1K-8   12.0MB/s ± 2%  12.9MB/s ± 1%  +7.98%  (p=0.008 n=5+5)
      RegexpMatchHard_32-8     7.38MB/s ± 1%  7.25MB/s ± 7%    ~     (p=0.952 n=5+5)
      RegexpMatchHard_1K-8     7.88MB/s ± 1%  8.05MB/s ± 0%  +2.21%  (p=0.008 n=5+5)
      Revcomp-8                 188MB/s ± 1%   189MB/s ± 0%  +0.58%  (p=0.016 n=5+4)
      Template-8               12.2MB/s ± 2%  12.3MB/s ± 1%    ~     (p=0.183 n=5+5)
      
      Change-Id: I65e79f3f8f8b2914678311c4f1b0a2d98459e220
      Reviewed-on: https://go-review.googlesource.com/71110Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      78ddf274
    • Tobias Klauser's avatar
      runtime/internal/sys: use boolean constants for sys.BigEndian · 0c68b79e
      Tobias Klauser authored
      The BigEndian constant is only used in boolean context so assign it
      boolean constants.
      
      Change-Id: If19d61dd71cdfbffede1d98b401f11e6535fba59
      Reviewed-on: https://go-review.googlesource.com/73270
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      0c68b79e
    • Jason Wangsadinata's avatar
      container/ring: add examples for various Ring functions · bbafa21b
      Jason Wangsadinata authored
      Change-Id: I6b16cfcbe824f999c9b64df539deea567e327db7
      Reviewed-on: https://go-review.googlesource.com/73090Reviewed-by: 's avatarGabriel Aszalos <gabriel.aszalos@gmail.com>
      Reviewed-by: 's avatarJason Wangsadinata <jwangsadinata@gmail.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Gabriel Aszalos <gabriel.aszalos@gmail.com>
      bbafa21b
    • Sergey Semin's avatar
      log: Remove unnecessary else · 883e08a3
      Sergey Semin authored
      Change-Id: I868f5101dd44f427d6504a8dbb198c06107be00e
      Reviewed-on: https://go-review.googlesource.com/72380
      Run-TryBot: Gabriel Aszalos <gabriel.aszalos@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarJoe Tsai <thebrokentoaster@gmail.com>
      883e08a3
    • Russ Cox's avatar
      cmd/link: only adjust pagezero for iOS on darwin/arm64 · 4a5b99c3
      Russ Cox authored
      The new pagezero_size introduced by CL 72730 breaks
      on 32-bit systems, since it is 2³². Restrict the change to
      darwin/arm64, since it is intended for iOS only.
      
      We could plausibly allow GOARCH=amd64 as well, but
      without a compelling reason, changing the zero page size
      doesn't seem worth the risk.
      
      Change-Id: I5d6adcbaff8d0e5b169ff13512f188332cc7ed9a
      Reviewed-on: https://go-review.googlesource.com/73250
      Run-TryBot: Russ Cox <rsc@golang.org>
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      4a5b99c3
    • Joe Tsai's avatar
      encoding/csv: forbid certain Comma and Comment runes · e7fed7fa
      Joe Tsai authored
      The record delimiter (not configurable by user) is "\r\n" or "\n".
      It is insensible for the user to set Comma or Comment delimiters
      to be some character that conflicts with the record delimiter.
      Furthermore, it is insensible for Comma or Comment to be the same rune.
      Allowing this leaks implementation details to the user in regards to
      the evaluation order of which rune is checked for first.
      
      Fixes #22404
      
      Change-Id: I31e86abc9b3a8fb4584e090477795587740970ae
      Reviewed-on: https://go-review.googlesource.com/72793Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e7fed7fa
    • Russ Cox's avatar
      build: move final steps of make.bash, make.bat, make.rc into cmd/dist · aedb79f0
      Russ Cox authored
      This CL expands the job of "dist bootstrap" to be "finish make.bash".
      I need to change that logic in upcoming CLs related to cmd/go
      changes, and I'd rather not change it in three places in three different
      shell script languages.
      
      Change-Id: I545dc215e408289e4d0b28f7c2ffcd849d89ad3b
      Reviewed-on: https://go-review.googlesource.com/72870Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      aedb79f0
    • Ian Lance Taylor's avatar
      runtime: unify arm entry point code · d92aaa97
      Ian Lance Taylor authored
      Change-Id: Id51a2d63f7199b3ff71cedd415345ad20e5bd981
      Reviewed-on: https://go-review.googlesource.com/70791Reviewed-by: 's avatarAustin Clements <austin@google.com>
      d92aaa97
  4. 24 Oct, 2017 4 commits
    • Michael Hudson-Doyle's avatar
      cmd/link: shrink SymKind down to a uint8 · 253e605a
      Michael Hudson-Doyle authored
      Change-Id: I54c73afd4fb2ad4d5854d2568524f57542c64fe5
      Reviewed-on: https://go-review.googlesource.com/42182
      Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      253e605a
    • Michael Hudson-Doyle's avatar
      cmd/link: replace SSUB with an attribute bit · 1b8987f1
      Michael Hudson-Doyle authored
      There is some stuff I don't understand very well involved in SSUB, better words
      for the documentation gratefully accepted.
      
      As this is the last use of a bit in SMASK, kill that off too.
      
      Change-Id: Iddff1c9b2af02c9dfb12ac8e668d004e4642f997
      Reviewed-on: https://go-review.googlesource.com/42026
      Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1b8987f1
    • Brian Kessler's avatar
      math/big: implement Lehmer's GCD algorithm · 1643d4f3
      Brian Kessler authored
      Updates #15833
      
      Lehmer's GCD algorithm uses single precision calculations
      to simulate several steps of multiple precision calculations
      in Euclid's GCD algorithm which leads to a considerable
      speed up.  This implementation uses Collins' simplified
      testing condition on the single digit cosequences which
      requires only one quotient and avoids any possibility of
      overflow.
      
      name                          old time/op  new time/op  delta
      GCD10x10/WithoutXY-4          1.82µs ±24%  0.28µs ± 6%  -84.40%  (p=0.008 n=5+5)
      GCD10x10/WithXY-4             1.69µs ± 6%  1.71µs ± 6%     ~     (p=0.595 n=5+5)
      GCD10x100/WithoutXY-4         1.87µs ± 2%  0.56µs ± 4%  -70.13%  (p=0.008 n=5+5)
      GCD10x100/WithXY-4            2.61µs ± 2%  2.65µs ± 4%     ~     (p=0.635 n=5+5)
      GCD10x1000/WithoutXY-4        2.75µs ± 2%  1.48µs ± 1%  -46.06%  (p=0.008 n=5+5)
      GCD10x1000/WithXY-4           5.29µs ± 2%  5.25µs ± 2%     ~     (p=0.548 n=5+5)
      GCD10x10000/WithoutXY-4       10.7µs ± 2%  10.3µs ± 0%   -4.38%  (p=0.008 n=5+5)
      GCD10x10000/WithXY-4          22.3µs ± 6%  22.1µs ± 1%     ~     (p=1.000 n=5+5)
      GCD10x100000/WithoutXY-4      93.7µs ± 2%  99.4µs ± 2%   +6.09%  (p=0.008 n=5+5)
      GCD10x100000/WithXY-4          196µs ± 2%   199µs ± 2%     ~     (p=0.222 n=5+5)
      GCD100x100/WithoutXY-4        10.1µs ± 2%   2.5µs ± 2%  -74.84%  (p=0.008 n=5+5)
      GCD100x100/WithXY-4           21.4µs ± 2%  21.3µs ± 7%     ~     (p=0.548 n=5+5)
      GCD100x1000/WithoutXY-4       11.3µs ± 2%   4.4µs ± 4%  -60.87%  (p=0.008 n=5+5)
      GCD100x1000/WithXY-4          24.7µs ± 3%  23.9µs ± 1%     ~     (p=0.056 n=5+5)
      GCD100x10000/WithoutXY-4      26.6µs ± 1%  20.0µs ± 2%  -24.82%  (p=0.008 n=5+5)
      GCD100x10000/WithXY-4         78.7µs ± 2%  78.2µs ± 2%     ~     (p=0.690 n=5+5)
      GCD100x100000/WithoutXY-4      174µs ± 2%   171µs ± 1%     ~     (p=0.056 n=5+5)
      GCD100x100000/WithXY-4         563µs ± 4%   561µs ± 2%     ~     (p=1.000 n=5+5)
      GCD1000x1000/WithoutXY-4       120µs ± 5%    29µs ± 3%  -75.71%  (p=0.008 n=5+5)
      GCD1000x1000/WithXY-4          355µs ± 4%   358µs ± 2%     ~     (p=0.841 n=5+5)
      GCD1000x10000/WithoutXY-4      140µs ± 2%    49µs ± 2%  -65.07%  (p=0.008 n=5+5)
      GCD1000x10000/WithXY-4         626µs ± 3%   628µs ± 9%     ~     (p=0.690 n=5+5)
      GCD1000x100000/WithoutXY-4     340µs ± 4%   259µs ± 6%  -23.79%  (p=0.008 n=5+5)
      GCD1000x100000/WithXY-4       3.76ms ± 4%  3.82ms ± 5%     ~     (p=0.310 n=5+5)
      GCD10000x10000/WithoutXY-4    3.11ms ± 3%  0.54ms ± 2%  -82.74%  (p=0.008 n=5+5)
      GCD10000x10000/WithXY-4       7.96ms ± 3%  7.69ms ± 3%     ~     (p=0.151 n=5+5)
      GCD10000x100000/WithoutXY-4   3.88ms ± 1%  1.27ms ± 2%  -67.21%  (p=0.008 n=5+5)
      GCD10000x100000/WithXY-4      38.1ms ± 2%  38.8ms ± 1%     ~     (p=0.095 n=5+5)
      GCD100000x100000/WithoutXY-4   208ms ± 1%    25ms ± 4%  -88.07%  (p=0.008 n=5+5)
      GCD100000x100000/WithXY-4      533ms ± 5%   525ms ± 4%     ~     (p=0.548 n=5+5)
      
      Change-Id: Ic1e007eb807b93e75f4752e968e98c1f0cb90e43
      Reviewed-on: https://go-review.googlesource.com/59450
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      1643d4f3
    • Mark Pulford's avatar
      math: add RoundToEven function · a5c44f3e
      Mark Pulford authored
      Rounding ties to even is statistically useful for some applications.
      This implementation completes IEEE float64 rounding mode support (in
      addition to Round, Ceil, Floor, Trunc).
      
      This function avoids subtle faults found in ad-hoc implementations, and
      is simple enough to be inlined by the compiler.
      
      Fixes #21748
      
      Change-Id: I09415df2e42435f9e7dabe3bdc0148e9b9ebd609
      Reviewed-on: https://go-review.googlesource.com/61211Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      a5c44f3e