1. 24 Oct, 2018 3 commits
    • Filippo Valsorda's avatar
      crypto/tls: replace custom *block with standard buffers · ab51b1d6
      Filippo Valsorda authored
      The crypto/tls record layer used a custom buffer implementation with its
      own semantics, freelist, and offset management. Replace it all with
      per-task bytes.Buffer, bytes.Reader and byte slices, along with a
      refactor of all the encrypt and decrypt code.
      
      The main quirk of *block was to do a best-effort read past the record
      boundary, so that if a closeNotify was waiting it would be peeked and
      surfaced along with the last Read. Address that with atLeastReader and
      ReadFrom to avoid a useless copy (instead of a LimitReader or CopyN).
      
      There was also an optimization to split blocks along record boundary
      lines without having to copy in and out the data. Replicate that by
      aliasing c.input into consumed c.rawInput (after an in-place decrypt
      operation). This is safe because c.rawInput is not used until c.input is
      drained.
      
      The benchmarks are noisy but look like an improvement across the board,
      which is a nice side effect :)
      
      name                                       old time/op   new time/op   delta
      HandshakeServer/RSA-8                        817µs ± 2%    797µs ± 2%  -2.52%  (p=0.000 n=10+9)
      HandshakeServer/ECDHE-P256-RSA-8             984µs ±11%    897µs ± 0%  -8.89%  (p=0.000 n=10+9)
      HandshakeServer/ECDHE-P256-ECDSA-P256-8      206µs ±10%    199µs ± 3%    ~     (p=0.113 n=10+9)
      HandshakeServer/ECDHE-X25519-ECDSA-P256-8    204µs ± 3%    202µs ± 1%  -1.06%  (p=0.013 n=10+9)
      HandshakeServer/ECDHE-P521-ECDSA-P521-8     15.5ms ± 0%   15.6ms ± 1%    ~     (p=0.095 n=9+10)
      Throughput/MaxPacket/1MB-8                  5.35ms ±19%   5.39ms ±36%    ~     (p=1.000 n=9+10)
      Throughput/MaxPacket/2MB-8                  9.20ms ±15%   8.30ms ± 8%  -9.79%  (p=0.035 n=10+9)
      Throughput/MaxPacket/4MB-8                  13.8ms ± 7%   13.6ms ± 8%    ~     (p=0.315 n=10+10)
      Throughput/MaxPacket/8MB-8                  25.1ms ± 3%   23.2ms ± 2%  -7.66%  (p=0.000 n=10+9)
      Throughput/MaxPacket/16MB-8                 46.9ms ± 1%   43.0ms ± 3%  -8.29%  (p=0.000 n=9+10)
      Throughput/MaxPacket/32MB-8                 88.9ms ± 2%   82.3ms ± 2%  -7.40%  (p=0.000 n=9+9)
      Throughput/MaxPacket/64MB-8                  175ms ± 2%    164ms ± 4%  -6.18%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/1MB-8              5.79ms ±26%   5.82ms ±22%    ~     (p=0.912 n=10+10)
      Throughput/DynamicPacket/2MB-8              9.23ms ±14%   9.50ms ±23%    ~     (p=0.971 n=10+10)
      Throughput/DynamicPacket/4MB-8              14.5ms ±11%   13.8ms ± 6%  -4.66%  (p=0.019 n=10+10)
      Throughput/DynamicPacket/8MB-8              25.6ms ± 4%   23.5ms ± 3%  -8.33%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/16MB-8             47.3ms ± 3%   44.6ms ± 7%  -5.65%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/32MB-8             91.9ms ±14%   85.0ms ± 4%  -7.55%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8              177ms ± 2%    168ms ± 4%  -4.97%  (p=0.000 n=8+10)
      Latency/MaxPacket/200kbps-8                  694ms ± 0%    694ms ± 0%    ~     (p=0.315 n=10+9)
      Latency/MaxPacket/500kbps-8                  279ms ± 0%    279ms ± 0%    ~     (p=0.447 n=9+10)
      Latency/MaxPacket/1000kbps-8                 140ms ± 0%    140ms ± 0%    ~     (p=0.661 n=9+10)
      Latency/MaxPacket/2000kbps-8                71.1ms ± 0%   71.1ms ± 0%  +0.05%  (p=0.019 n=9+9)
      Latency/MaxPacket/5000kbps-8                30.4ms ± 7%   30.5ms ± 4%    ~     (p=0.720 n=9+10)
      Latency/DynamicPacket/200kbps-8              134ms ± 0%    134ms ± 0%    ~     (p=0.075 n=10+10)
      Latency/DynamicPacket/500kbps-8             54.8ms ± 0%   54.8ms ± 0%    ~     (p=0.631 n=10+10)
      Latency/DynamicPacket/1000kbps-8            28.5ms ± 0%   28.5ms ± 0%    ~     (p=1.000 n=8+8)
      Latency/DynamicPacket/2000kbps-8            15.7ms ±12%   16.1ms ± 0%    ~     (p=0.109 n=10+7)
      Latency/DynamicPacket/5000kbps-8            8.20ms ±26%   8.17ms ±13%    ~     (p=1.000 n=9+9)
      
      name                                       old speed     new speed     delta
      Throughput/MaxPacket/1MB-8                 193MB/s ±14%  202MB/s ±30%    ~     (p=0.897 n=8+10)
      Throughput/MaxPacket/2MB-8                 230MB/s ±14%  249MB/s ±17%    ~     (p=0.089 n=10+10)
      Throughput/MaxPacket/4MB-8                 304MB/s ± 6%  309MB/s ± 7%    ~     (p=0.315 n=10+10)
      Throughput/MaxPacket/8MB-8                 334MB/s ± 3%  362MB/s ± 2%  +8.29%  (p=0.000 n=10+9)
      Throughput/MaxPacket/16MB-8                358MB/s ± 1%  390MB/s ± 3%  +9.08%  (p=0.000 n=9+10)
      Throughput/MaxPacket/32MB-8                378MB/s ± 2%  408MB/s ± 2%  +8.00%  (p=0.000 n=9+9)
      Throughput/MaxPacket/64MB-8                384MB/s ± 2%  410MB/s ± 4%  +6.61%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/1MB-8             178MB/s ±24%  182MB/s ±24%    ~     (p=0.604 n=9+10)
      Throughput/DynamicPacket/2MB-8             228MB/s ±13%  225MB/s ±20%    ~     (p=0.971 n=10+10)
      Throughput/DynamicPacket/4MB-8             291MB/s ±10%  305MB/s ± 6%  +4.83%  (p=0.019 n=10+10)
      Throughput/DynamicPacket/8MB-8             327MB/s ± 4%  357MB/s ± 3%  +9.08%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/16MB-8            355MB/s ± 3%  376MB/s ± 6%  +6.07%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/32MB-8            366MB/s ±12%  395MB/s ± 4%  +7.91%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8            380MB/s ± 2%  400MB/s ± 4%  +5.26%  (p=0.000 n=8+10)
      
      Note that this reduced the buffer for the first read from 1024 to 5+512,
      so it triggered the issue described at #24198 when using a synchronous
      net.Pipe: the first server flight was not being consumed entirely by the
      first read anymore, causing a deadlock as both the client and the server
      were trying to send (the client a reply to the ServerHello, the server
      the rest of the buffer). Fixed by rebasing on top of CL 142817.
      
      Change-Id: Ie31b0a572b2ad37878469877798d5c6a5276f931
      Reviewed-on: https://go-review.googlesource.com/c/142818
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      ab51b1d6
    • Daniel Martí's avatar
      text/template: recover panics during function calls · 202e9031
      Daniel Martí authored
      There's precedent in handling panics that happen in functions called
      from the standard library. For example, if a fmt.Formatter
      implementation fails, fmt will absorb the panic into the output text.
      
      Recovering panics is useful, because otherwise one would have to wrap
      some Template.Execute calls with a recover. For example, if there's a
      chance that the callbacks may panic, or if part of the input data is nil
      when it shouldn't be.
      
      In particular, it's a common confusion amongst new Go developers that
      one can call a method on a nil receiver. Expecting text/template to
      error on such a call, they encounter a long and confusing panic if the
      method expects the receiver to be non-nil.
      
      To achieve this, introduce safeCall, which takes care of handling error
      returns as well as recovering panics. Handling panics in the "call"
      function isn't strictly necessary, as that func itself is run via
      evalCall. However, this makes the code more consistent, and can allow
      for better context in panics via the "call" function.
      
      Finally, add some test cases with a mix of funcs, methods, and func
      fields that panic.
      
      Fixes #28242.
      
      Change-Id: Id67be22cc9ebaedeb4b17fa84e677b4b6e09ec67
      Reviewed-on: https://go-review.googlesource.com/c/143097
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      202e9031
    • Martin Möhrmann's avatar
      internal/cpu: add options and warnings for required cpu features · 980340ad
      Martin Möhrmann authored
      Updates #27218
      
      Change-Id: I8603f3a639cdd9ee201c4f1566692e5b88877fc4
      Reviewed-on: https://go-review.googlesource.com/c/144107
      Run-TryBot: Martin Möhrmann <martisch@uos.de>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      980340ad
  2. 23 Oct, 2018 24 commits
  3. 22 Oct, 2018 13 commits
    • Ian Lance Taylor's avatar
      cmd/go: update private copy of goosList · cc558fed
      Ian Lance Taylor authored
      This copies the change to goosList in CL 138115 to the private copy in
      cmd/go.
      
      The change introducing the private copy was apparently not made with
      Gerrit, but can be seen at
      https://github.com/golang/vgo/commit/08359e782fb601567c57f56beb540841c2416d92.
      That change says "This is adapted from code in go/build and the rest
      of cmd/go. At some point, we should deduplicate them."
      
      Doing another copy for now, rather than something more complex
      involving cmd/dist, pending that deduplication.
      
      Change-Id: I9b6e1f63a3a68c002b60a9a97aa367c5cc7801c9
      Reviewed-on: https://go-review.googlesource.com/c/143759
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      cc558fed
    • Clément Chigot's avatar
      cmd/cgo: add AIX operating system · ce4ef9ad
      Clément Chigot authored
      This commit adds AIX operating system to cmd/cgo package for ppc64
      architecture.
      
      It doesn't fully adapt cgo tool to AIX. But it allows to use
      go tool cgo -godefs which is really usefull for others packages.
      
      Update: #25893
      
      Change-Id: I38e289cf0122d143ba100986d08229b51b03ddfc
      Reviewed-on: https://go-review.googlesource.com/c/138731
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      ce4ef9ad
    • Rob Pike's avatar
      encoding/gob: delete out of memory test · 956af978
      Rob Pike authored
      Now that the library allows much larger data, it can kill
      machines with less memory.
      
      Fixes #28321
      
      Change-Id: I98e1a5fdf812fd75adfb22bf01542423de405fe2
      Reviewed-on: https://go-review.googlesource.com/c/143817Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarDmitri Shuralyov <dmitshur@golang.org>
      956af978
    • Robert Griesemer's avatar
      go/types: report error for invalid use of ... in parameter lists · 553237aa
      Robert Griesemer authored
      The parser accepts ...T types in parameter lists whereever a type
      is permitted; this matches the syntax and allows for more tolerant
      parsing and error recovery.
      
      go/types on the other hand assumed that the parser would report
      those errors and assumed any outstanding such errors would be due
      to otherwise manipulated ASTs leading to invalid ASTs.
      
      go/types further assumed that a parameter list (a, b, c ...int)
      was permitted (a couple of tests used such parameter lists).
      
      With this CL, go/types now correctly refuses invalid parameter lists.
      
      Fixes #28281.
      
      Change-Id: Ib788255f7b7819fdb972c7801bb153a53ce2ddf7
      Reviewed-on: https://go-review.googlesource.com/c/143857
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      553237aa
    • Clément Chigot's avatar
      cmd/go: add AIX operating system · 9258c3f9
      Clément Chigot authored
      This commit adds AIX operating system to cmd/go package for ppc64
      architecture.
      
      Updates: #25893
      
      Change-Id: I2605d10a7833fa2eb197f6db4a52d5919cf93614
      Reviewed-on: https://go-review.googlesource.com/c/138732
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      9258c3f9
    • Genevieve Luyt's avatar
      doc: use the new log functions · b917bdd3
      Genevieve Luyt authored
      The log interface was changed in https://golang.org/cl/2419042.
      
      Change-Id: I3eaddd8a5cfcae961db16555fb1b0ce6770b6334
      Reviewed-on: https://go-review.googlesource.com/c/143777Reviewed-by: 's avatarRob Pike <r@golang.org>
      b917bdd3
    • Robert Griesemer's avatar
      cmd/compile: s/eqtype/types.Identical/ (fix build) · ddf83eeb
      Robert Griesemer authored
      TBR=khr
      
      Change-Id: Ia5a08f1acd9f37c466829754990733330264f546
      Reviewed-on: https://go-review.googlesource.com/c/143758Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      ddf83eeb
    • Robert Griesemer's avatar
      go/types: copy embedded methods unchanged when completing interfaces · e9b39417
      Robert Griesemer authored
      The existing code adjusted the receivers of embedded interface methods
      to match the embedding interface type. That required cloning (shallow
      copying) the embedded methods and destroyed their object identity in
      the process. Don't do this anymore. The consequence to clients is that
      they might see different methods of an interface having different
      receiver types; they are always the type of the interface that explicitly
      declared the method (which is what one usually would want, anyway).
      
      Fixes #28282.
      
      Change-Id: I2e6f1497f46affdf7510547a64601de3787367db
      Reviewed-on: https://go-review.googlesource.com/c/143757Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      e9b39417
    • Alessandro Arzilli's avatar
      cmd/compile,cmd/link: remove statictmp variables from symbol table. · ffbf479a
      Alessandro Arzilli authored
      Removes statictmp variables from debug_info and the final symbol table.
      
      Fixes #27800
      
      Change-Id: I302c59a04bc3f460e7085fef241f937bbf30421d
      Reviewed-on: https://go-review.googlesource.com/c/142577
      Run-TryBot: Alessandro Arzilli <alessandro.arzilli@gmail.com>
      Run-TryBot: Heschi Kreinick <heschi@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarHeschi Kreinick <heschi@google.com>
      ffbf479a
    • Keith Randall's avatar
      cmd/compile: in append(f()), type convert appended items · dca769dc
      Keith Randall authored
      The second and subsequent return values from f() need to be
      converted to the element type of the first return value from f()
      (which must be a slice).
      
      Fixes #22327
      
      Change-Id: I5c0a424812c82c1b95b6d124c5626cfc4408bdb6
      Reviewed-on: https://go-review.googlesource.com/c/142718Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      dca769dc
    • fanzha02's avatar
      cmd/internal/obj/arm64: reclassify 32-bit/64-bit constants · 86ce1cb0
      fanzha02 authored
      Current assembler saves constants in Offset which type is int64,
      causing 32-bit constants have a incorrect class. This CL reclassifies
      constants when opcodes are 32-bit variant, like MOVW, ANDW and
      ADDW, etc. Besides, this CL encodes some constants of ADDCON class
      as MOVs instructions.
      
      This CL changes the assembler behavior as follows.
      
      1. go assembler ADDW $MOVCON, Rn, Rd
         previous version: MOVD $MOVCON, Rtmp; ADDW Rtmp, Rn, Rd
         current version: MOVW $MOVCON, Rtmp; ADDW Rtmp, Rn, Rd
      
      2. go assembly MOVW $0xaaaaffff, R1
         previous version: treats $0xaaaaffff as VCON, encodes it as MOVW 0x994, R1 (loads it from pool).
         current version: treats $0xaaaaffff as MOVCON, and encodes it into MOVW instructions.
      
      3. go assembly MOVD $0x210000, R1
         previous version: treats $0x210000 as ADDCON, loads it from pool
         current version: treats $0x210000 as MOVCON, and encodes it into MOVD instructions.
      
      Add the test cases.
      
      1. Binary size before/after.
      binary                          size change
      pkg/linux_arm64                 -1.534KB
      pkg/tool/linux_arm64            -0.718KB
      go                              -0.32KB
      gofmt                           no change
      
      2. go1 benchmark result.
      name                     old time/op    new time/op    delta
      BinaryTree17-8              6.26s ± 1%     6.28s ± 1%     ~     (p=0.105 n=10+10)
      Fannkuch11-8                5.40s ± 0%     5.39s ± 0%   -0.29%  (p=0.028 n=9+10)
      FmtFprintfEmpty-8          94.5ns ± 0%    95.0ns ± 0%   +0.51%  (p=0.000 n=10+9)
      FmtFprintfString-8          163ns ± 1%     159ns ± 1%   -2.06%  (p=0.000 n=10+9)
      FmtFprintfInt-8             200ns ± 1%     196ns ± 1%   -1.99%  (p=0.000 n=9+10)
      FmtFprintfIntInt-8          292ns ± 3%     284ns ± 1%   -2.87%  (p=0.001 n=10+9)
      FmtFprintfPrefixedInt-8     422ns ± 1%     420ns ± 1%   -0.59%  (p=0.015 n=10+10)
      FmtFprintfFloat-8           458ns ± 0%     463ns ± 1%   +1.19%  (p=0.000 n=9+10)
      FmtManyArgs-8              1.37µs ± 1%    1.35µs ± 1%   -1.85%  (p=0.000 n=10+10)
      GobDecode-8                15.5ms ± 1%    15.3ms ± 1%   -1.82%  (p=0.000 n=10+10)
      GobEncode-8                11.7ms ± 5%    11.7ms ± 2%     ~     (p=0.549 n=10+9)
      Gzip-8                      622ms ± 0%     624ms ± 0%   +0.23%  (p=0.000 n=10+9)
      Gunzip-8                   73.6ms ± 0%    73.8ms ± 1%     ~     (p=0.077 n=9+9)
      HTTPClientServer-8          115µs ± 1%     115µs ± 1%     ~     (p=0.796 n=10+10)
      JSONEncode-8               31.1ms ± 2%    28.7ms ± 1%   -7.98%  (p=0.000 n=10+9)
      JSONDecode-8                145ms ± 0%     145ms ± 1%     ~     (p=0.447 n=9+10)
      Mandelbrot200-8            9.67ms ± 0%    9.60ms ± 0%   -0.76%  (p=0.000 n=9+9)
      GoParse-8                  7.56ms ± 1%    7.58ms ± 0%   +0.21%  (p=0.035 n=10+9)
      RegexpMatchEasy0_32-8       208ns ±10%     222ns ± 0%     ~     (p=0.531 n=10+6)
      RegexpMatchEasy0_1K-8       699ns ± 4%     694ns ± 4%     ~     (p=0.868 n=10+10)
      RegexpMatchEasy1_32-8       186ns ± 8%     190ns ±12%     ~     (p=0.955 n=10+10)
      RegexpMatchEasy1_1K-8      1.13µs ± 1%    1.05µs ± 2%   -6.64%  (p=0.000 n=10+10)
      RegexpMatchMedium_32-8      316ns ± 7%     288ns ± 1%   -8.68%  (p=0.000 n=10+7)
      RegexpMatchMedium_1K-8     90.2µs ± 0%    85.5µs ± 2%   -5.19%  (p=0.000 n=10+10)
      RegexpMatchHard_32-8       5.53µs ± 0%    3.90µs ± 0%  -29.52%  (p=0.000 n=10+10)
      RegexpMatchHard_1K-8        119µs ± 0%     124µs ± 0%   +4.29%  (p=0.000 n=9+10)
      Revcomp-8                   1.07s ± 0%     1.07s ± 0%     ~     (p=0.094 n=9+9)
      Template-8                  162ms ± 1%     160ms ± 2%     ~     (p=0.089 n=10+10)
      TimeParse-8                 756ns ± 2%     763ns ± 1%     ~     (p=0.158 n=10+10)
      TimeFormat-8                758ns ± 1%     746ns ± 1%   -1.52%  (p=0.000 n=10+10)
      
      name                     old speed      new speed      delta
      GobDecode-8              49.4MB/s ± 1%  50.3MB/s ± 1%   +1.84%  (p=0.000 n=10+10)
      GobEncode-8              65.6MB/s ± 5%  65.4MB/s ± 2%     ~     (p=0.549 n=10+9)
      Gzip-8                   31.2MB/s ± 0%  31.1MB/s ± 0%   -0.24%  (p=0.000 n=9+9)
      Gunzip-8                  264MB/s ± 0%   263MB/s ± 1%     ~     (p=0.073 n=9+9)
      JSONEncode-8             62.3MB/s ± 2%  67.7MB/s ± 1%   +8.67%  (p=0.000 n=10+9)
      JSONDecode-8             13.4MB/s ± 0%  13.4MB/s ± 1%     ~     (p=0.508 n=9+10)
      GoParse-8                7.66MB/s ± 1%  7.64MB/s ± 0%   -0.23%  (p=0.049 n=10+9)
      RegexpMatchEasy0_32-8     154MB/s ± 9%   143MB/s ± 3%     ~     (p=0.303 n=10+7)
      RegexpMatchEasy0_1K-8    1.46GB/s ± 4%  1.47GB/s ± 4%     ~     (p=0.912 n=10+10)
      RegexpMatchEasy1_32-8     172MB/s ± 9%   170MB/s ±12%     ~     (p=0.971 n=10+10)
      RegexpMatchEasy1_1K-8     908MB/s ± 1%   972MB/s ± 2%   +7.12%  (p=0.000 n=10+10)
      RegexpMatchMedium_32-8   3.17MB/s ± 7%  3.46MB/s ± 1%   +9.14%  (p=0.000 n=10+7)
      RegexpMatchMedium_1K-8   11.3MB/s ± 0%  12.0MB/s ± 2%   +5.51%  (p=0.000 n=10+10)
      RegexpMatchHard_32-8     5.78MB/s ± 0%  8.21MB/s ± 0%  +41.93%  (p=0.000 n=9+10)
      RegexpMatchHard_1K-8     8.62MB/s ± 0%  8.27MB/s ± 0%   -4.11%  (p=0.000 n=9+10)
      Revcomp-8                 237MB/s ± 0%   237MB/s ± 0%     ~     (p=0.081 n=9+9)
      Template-8               12.0MB/s ± 1%  12.1MB/s ± 2%     ~     (p=0.072 n=10+10)
      
      Change-Id: I080801f520366b42d5f9699954bd33106976a81b
      Reviewed-on: https://go-review.googlesource.com/c/120661
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      86ce1cb0
    • Carlos Eduardo Seo's avatar
      cmd/compile: intrinsify math/big.mulWW on ppc64x · 1e8ecefc
      Carlos Eduardo Seo authored
      This change implements mulWW as an intrinsic for ppc64x. Performance
      numbers below:
      
      name                            old time/op    new time/op    delta
      QuoRem                            4.54µs ±45%    3.22µs ± 0%  -29.22%  (p=0.029 n=4+4)
      ModSqrt225_Tonelli                 765µs ± 3%     757µs ± 0%   -1.02%  (p=0.029 n=4+4)
      ModSqrt225_3Mod4                   231µs ± 0%     231µs ± 0%   -0.10%  (p=0.029 n=4+4)
      ModSqrt231_Tonelli                 789µs ± 0%     788µs ± 0%   -0.14%  (p=0.029 n=4+4)
      ModSqrt231_5Mod8                   267µs ± 0%     267µs ± 0%   -0.13%  (p=0.029 n=4+4)
      Sqrt                              49.5µs ±17%    45.3µs ± 0%   -8.48%  (p=0.029 n=4+4)
      IntSqr/1                          32.2ns ±22%    24.2ns ± 0%  -24.79%  (p=0.029 n=4+4)
      IntSqr/2                          60.6ns ± 0%    60.9ns ± 0%   +0.50%  (p=0.029 n=4+4)
      IntSqr/3                          82.8ns ± 0%    83.3ns ± 0%   +0.51%  (p=0.029 n=4+4)
      IntSqr/5                           122ns ± 0%     121ns ± 0%   -1.22%  (p=0.029 n=4+4)
      IntSqr/8                           227ns ± 0%     226ns ± 0%   -0.44%  (p=0.029 n=4+4)
      IntSqr/10                          300ns ± 0%     298ns ± 0%   -0.67%  (p=0.029 n=4+4)
      IntSqr/20                         1.02µs ± 0%    0.89µs ± 0%  -13.08%  (p=0.029 n=4+4)
      IntSqr/30                         1.73µs ± 0%    1.51µs ± 0%  -12.73%  (p=0.029 n=4+4)
      IntSqr/50                         3.69µs ± 1%    3.29µs ± 0%  -10.70%  (p=0.029 n=4+4)
      IntSqr/80                         7.64µs ± 0%    7.04µs ± 0%   -7.91%  (p=0.029 n=4+4)
      IntSqr/100                        11.1µs ± 0%    10.3µs ± 0%   -7.04%  (p=0.029 n=4+4)
      IntSqr/200                        37.9µs ± 0%    36.4µs ± 0%   -4.13%  (p=0.029 n=4+4)
      IntSqr/300                        69.4µs ± 0%    66.0µs ± 0%   -4.94%  (p=0.029 n=4+4)
      IntSqr/500                         174µs ± 0%     168µs ± 0%   -3.10%  (p=0.029 n=4+4)
      IntSqr/800                         347µs ± 0%     333µs ± 0%   -4.06%  (p=0.029 n=4+4)
      IntSqr/1000                        524µs ± 0%     507µs ± 0%   -3.21%  (p=0.029 n=4+4)
      
      Change-Id: If067452f5b6579ad3a2e9daa76a7ffe6fceae1bb
      Reviewed-on: https://go-review.googlesource.com/c/143217
      Run-TryBot: Giovanni Bajo <rasky@develer.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarGiovanni Bajo <rasky@develer.com>
      1e8ecefc
    • Rob Pike's avatar
      encoding/gob: increase "tooBig" from 1GB to 8GB on 64-bit machines · 3bf9b77c
      Rob Pike authored
      A little shift magic makes it easy to adjust the maximum buffer
      size on machines with larger integers.
      
      Fixes #27635
      
      Change-Id: I1f26b07a363fbb9730df2377052475fa88bbb781
      Reviewed-on: https://go-review.googlesource.com/c/143678
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      3bf9b77c