1. 05 Mar, 2019 9 commits
    • Carlo Alberto Ferraris's avatar
      sync: allow inlining the Mutex.Unlock fast path · 4c3f2607
      Carlo Alberto Ferraris authored
      Make use of the newly-enabled limited midstack inlining.
      Similar changes will be done in followup CLs.
      
      name                    old time/op  new time/op  delta
      MutexUncontended        19.3ns ± 1%  18.9ns ± 0%   -1.92%  (p=0.000 n=20+19)
      MutexUncontended-4      5.24ns ± 0%  4.75ns ± 1%   -9.25%  (p=0.000 n=20+20)
      MutexUncontended-16     2.10ns ± 0%  2.05ns ± 0%   -2.38%  (p=0.000 n=15+19)
      Mutex                   19.6ns ± 0%  19.3ns ± 1%   -1.92%  (p=0.000 n=20+17)
      Mutex-4                 54.6ns ± 5%  52.4ns ± 4%   -4.09%  (p=0.000 n=20+20)
      Mutex-16                 133ns ± 5%   139ns ± 2%   +4.23%  (p=0.000 n=20+16)
      MutexSlack              33.4ns ± 2%  18.9ns ± 1%  -43.56%  (p=0.000 n=19+20)
      MutexSlack-4             206ns ± 5%   225ns ± 8%   +9.12%  (p=0.000 n=20+18)
      MutexSlack-16           89.4ns ± 1%  98.4ns ± 1%  +10.10%  (p=0.000 n=18+17)
      MutexWork               60.5ns ± 0%  58.2ns ± 3%   -3.75%  (p=0.000 n=12+20)
      MutexWork-4              105ns ± 5%   103ns ± 7%   -1.68%  (p=0.007 n=20+20)
      MutexWork-16             157ns ± 1%   163ns ± 2%   +3.90%  (p=0.000 n=18+18)
      MutexWorkSlack          70.2ns ± 5%  57.7ns ± 1%  -17.81%  (p=0.000 n=19+20)
      MutexWorkSlack-4         277ns ±13%   276ns ±13%     ~     (p=0.682 n=20+19)
      MutexWorkSlack-16        156ns ± 0%   147ns ± 0%   -5.62%  (p=0.000 n=16+14)
      MutexNoSpin              966ns ± 0%   968ns ± 0%   +0.11%  (p=0.029 n=15+20)
      MutexNoSpin-4            269ns ± 4%   270ns ± 2%     ~     (p=0.807 n=20+19)
      MutexNoSpin-16           122ns ± 0%   120ns ± 4%   -1.63%  (p=0.000 n=19+19)
      MutexSpin               3.13µs ± 0%  3.13µs ± 1%   +0.16%  (p=0.004 n=18+20)
      MutexSpin-4              826ns ± 1%   832ns ± 2%   +0.74%  (p=0.000 n=19+16)
      MutexSpin-16             397ns ± 1%   395ns ± 0%   -0.50%  (p=0.000 n=19+17)
      RWMutexUncontended      71.4ns ± 0%  69.5ns ± 0%   -2.72%  (p=0.000 n=16+20)
      RWMutexUncontended-4    18.4ns ± 4%  17.5ns ± 0%   -4.92%  (p=0.000 n=20+18)
      RWMutexUncontended-16   8.01ns ± 0%  7.92ns ± 0%   -1.15%  (p=0.000 n=18+18)
      RWMutexWrite100         24.9ns ± 0%  24.9ns ± 1%     ~     (p=0.099 n=19+20)
      RWMutexWrite100-4       46.5ns ± 3%  46.2ns ± 4%     ~     (p=0.253 n=17+19)
      RWMutexWrite100-16      68.9ns ± 3%  69.9ns ± 5%   +1.46%  (p=0.012 n=18+20)
      RWMutexWrite10          27.1ns ± 0%  27.0ns ± 2%     ~     (p=0.128 n=17+20)
      RWMutexWrite10-4        34.8ns ± 1%  34.7ns ± 2%     ~     (p=0.180 n=20+18)
      RWMutexWrite10-16       37.5ns ± 2%  37.2ns ± 4%   -0.89%  (p=0.023 n=20+20)
      RWMutexWorkWrite100      164ns ± 0%   164ns ± 0%     ~     (p=0.106 n=12+20)
      RWMutexWorkWrite100-4    186ns ± 3%   193ns ± 3%   +3.46%  (p=0.000 n=20+20)
      RWMutexWorkWrite100-16   204ns ± 2%   210ns ± 3%   +2.96%  (p=0.000 n=18+20)
      RWMutexWorkWrite10       153ns ± 0%   153ns ± 0%   -0.20%  (p=0.017 n=20+19)
      RWMutexWorkWrite10-4     179ns ± 1%   178ns ± 2%     ~     (p=0.215 n=19+20)
      RWMutexWorkWrite10-16    191ns ± 1%   192ns ± 2%     ~     (p=0.166 n=15+19)
      
      linux/amd64 bin/go 14630572 (previous commit 14605947, +24625/+0.17%)
      
      Change-Id: I3f9d1765801fe0b8deb1bc2728b8bba8a7508e23
      Reviewed-on: https://go-review.googlesource.com/c/go/+/148958Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      4c3f2607
    • Johan Brandhorst's avatar
      net/http: support configuring redirect fetch option · 94cbfc2f
      Johan Brandhorst authored
      Adds a magic header value that is translated to the
      Fetch API redirect option, following existing practices.
      
      Updates #26769
      
      Change-Id: Iaf1c9f710de63ea941a360b73f1b4bb725331a35
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164666Reviewed-by: default avatarRichard Musiol <neelance@gmail.com>
      Reviewed-by: default avatarAgniva De Sarker <agniva.quicksilver@gmail.com>
      Run-TryBot: Agniva De Sarker <agniva.quicksilver@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      94cbfc2f
    • LE Manh Cuong's avatar
      encoding/json: add Path to UnmarshalTypeError · 29bc4f12
      LE Manh Cuong authored
      When parsing nested object, UnmarshalTypeError does not contain actual
      path to nested field in original JSON.
      
      This commit change Field to contain the full path to that field. One
      can get the Field name by stripping all the leading path elements.
      
      Fixes #22369
      
      Change-Id: I6969cc08abe8387a351e3fb2944adfaa0dccad2a
      Reviewed-on: https://go-review.googlesource.com/c/go/+/145218Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      29bc4f12
    • hengwu0's avatar
      cmd/compile: fix mips64 instruction UNPREDICTABLE bug · 95d4e615
      hengwu0 authored
      Replace addu with a sll instruction with a definite behavior (sll will discard the upper 32 bits of the 64 bits, then do sign extensions, with certain behavior). It won't have any UNPREDICTABLE expectation.
      
      Fixes #30459
      
      Change-Id: Id79085c28c5cc4f86939b4ef08ef4bff46077c45
      GitHub-Last-Rev: 03569796a9a64ed6c7d56a5bca966fc62c89b4ff
      GitHub-Pull-Request: golang/go#30461
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164758Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      95d4e615
    • Ian Lance Taylor's avatar
      syscall: on ARM GNU/Linux let Pipe fall back to pipe · ab0c9510
      Ian Lance Taylor authored
      Android O seems to require Pipe to call the pipe2 system call.
      But kernel version 2.6.23 only supports pipe, not pipe2.
      So try pipe2 first, then fall back to pipe.
      
      Fixes #30549
      
      Change-Id: I3c5d86e8e945a5ec8a0ecea7853302952c0476c4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/165217
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ab0c9510
    • Leon Klingele's avatar
      os: simplify check whether to run subtest of TestRemoveAll · 4e20d999
      Leon Klingele authored
      Change-Id: Ic5b46cfb393f5ba7b91b3fb73b158b0bc238a532
      GitHub-Last-Rev: e5c5db51bcc4848d807b0ce45e85c022492b2013
      GitHub-Pull-Request: golang/go#30019
      Reviewed-on: https://go-review.googlesource.com/c/go/+/160443
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      4e20d999
    • Clément Chigot's avatar
      cmd/go: pass -X64 to ar on aix/ppc64 · b6625758
      Clément Chigot authored
      On aix/ppc64, ar tool must always have -X64 argument if it aims to
      create 64 bits archives.
      
      This commit also adds the -D flag handler when calling ar with
      gccgotoolchain, to match gccgo version.
      
      Change-Id: I1f5750f8f64a7073780d283567f0b60fc7fa5b97
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164417Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      b6625758
    • Clément Chigot's avatar
      runtime: use AIX C ABI in asmcgocall · c1e22275
      Clément Chigot authored
      The commit fixes asmcgocall in order to use the AIX C ABI.
      
      Change-Id: I2a44914a65557a841ea1e12991938af26ad7fd1d
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164000
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      c1e22275
    • Ian Lance Taylor's avatar
      path/filepath: don't discard .. in EvalSymlinks · 294edb27
      Ian Lance Taylor authored
      EvalSymlinks was mishandling cases like "/x/../../y" or "../../../x"
      where there is an extra ".." that goes past the start of the path.
      
      Fixes #30520
      
      Change-Id: I07525575f83009032fa1a99aa270c8d42007d276
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164762Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      294edb27
  2. 04 Mar, 2019 12 commits
    • Emmanuel T Odeke's avatar
      testing: fix missing verb in StartTimer doc · 6b045508
      Emmanuel T Odeke authored
      Fixes StartTimer's doc with the verb 'be'
      that was previously missing in 'can also used'.
      
      Change-Id: I4b3e6103fbf62d676056d32fcce4618536b7c05c
      Reviewed-on: https://go-review.googlesource.com/c/go/+/165117Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      6b045508
    • Rémy Oudompheng's avatar
      strconv: simplify (*extFloat).Multiply using math/bits.Mul64 · a1f7dbf0
      Rémy Oudompheng authored
      This method was using a handwritten long multiplication of uint64s.
      Since implementation of #24813 we can remove it and replace it
      by Mul64 from math/bits.
      
      This brings a small speedup for 64-bit platforms.
      
      Benchmarks on Haswell Celeron 2955U.
      
      benchmark                                  old ns/op     new ns/op     delta
      BenchmarkAppendFloat/Decimal-2             127           127           +0.00%
      BenchmarkAppendFloat/Float-2               340           317           -6.76%
      BenchmarkAppendFloat/Exp-2                 258           233           -9.69%
      BenchmarkAppendFloat/NegExp-2              256           231           -9.77%
      BenchmarkAppendFloat/Big-2                 402           375           -6.72%
      BenchmarkAppendFloat/BinaryExp-2           113           114           +0.88%
      BenchmarkAppendFloat/32Integer-2           125           125           +0.00%
      BenchmarkAppendFloat/32ExactFraction-2     274           249           -9.12%
      BenchmarkAppendFloat/32Point-2             339           317           -6.49%
      BenchmarkAppendFloat/32Exp-2               255           229           -10.20%
      BenchmarkAppendFloat/32NegExp-2            254           229           -9.84%
      BenchmarkAppendFloat/64Fixed1-2            165           154           -6.67%
      BenchmarkAppendFloat/64Fixed2-2            184           176           -4.35%
      BenchmarkAppendFloat/64Fixed3-2            168           158           -5.95%
      BenchmarkAppendFloat/64Fixed4-2            187           177           -5.35%
      BenchmarkAppendFloat/Slowpath64-2          84977         84883         -0.11%
      
      Change-Id: If05784e856289b3b7bf136567882e7ee10234756
      Reviewed-on: https://go-review.googlesource.com/c/go/+/157717
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      a1f7dbf0
    • Josh Bleecher Snyder's avatar
      math/big: rewrite pure Go implementations to use math/bits · d5edbcac
      Josh Bleecher Snyder authored
      While we're here, delete addWW_g and subWW_g, per the TODO.
      They are now obsolete.
      
      Benchmarks on amd64 with -tags=math_big_pure_go.
      
      name                old time/op    new time/op     delta
      AddVV/1-8             5.24ns ± 2%     5.12ns ± 1%    -2.11%  (p=0.000 n=82+87)
      AddVV/2-8             6.44ns ± 1%     6.33ns ± 2%    -1.82%  (p=0.000 n=77+82)
      AddVV/3-8             7.89ns ± 8%     6.97ns ± 4%   -11.71%  (p=0.000 n=100+96)
      AddVV/4-8             8.60ns ± 0%     7.72ns ± 4%   -10.24%  (p=0.000 n=90+96)
      AddVV/5-8             10.3ns ± 4%      8.5ns ± 1%   -17.02%  (p=0.000 n=96+91)
      AddVV/10-8            16.2ns ± 5%     12.8ns ± 1%   -21.11%  (p=0.000 n=97+86)
      AddVV/100-8            148ns ± 1%      117ns ± 5%   -21.07%  (p=0.000 n=66+98)
      AddVV/1000-8          1.41µs ± 4%     1.13µs ± 3%   -19.90%  (p=0.000 n=97+97)
      AddVV/10000-8         14.2µs ± 5%     11.2µs ± 1%   -20.82%  (p=0.000 n=99+84)
      AddVV/100000-8         142µs ± 4%      113µs ± 4%   -20.40%  (p=0.000 n=91+92)
      SubVV/1-8             5.29ns ± 1%     5.11ns ± 0%    -3.30%  (p=0.000 n=87+88)
      SubVV/2-8             6.36ns ± 4%     6.33ns ± 2%    -0.56%  (p=0.002 n=98+73)
      SubVV/3-8             7.58ns ± 5%     6.98ns ± 4%    -8.01%  (p=0.000 n=97+91)
      SubVV/4-8             8.61ns ± 3%     7.98ns ± 2%    -7.31%  (p=0.000 n=95+83)
      SubVV/5-8             10.6ns ± 2%      8.5ns ± 1%   -19.56%  (p=0.000 n=79+89)
      SubVV/10-8            16.3ns ± 4%     12.7ns ± 1%   -21.97%  (p=0.000 n=98+82)
      SubVV/100-8            124ns ± 1%      118ns ± 1%    -4.83%  (p=0.000 n=85+81)
      SubVV/1000-8          1.14µs ± 5%     1.12µs ± 2%    -1.17%  (p=0.000 n=97+81)
      SubVV/10000-8         11.6µs ±10%     11.2µs ± 1%    -3.39%  (p=0.000 n=100+84)
      SubVV/100000-8         114µs ± 6%      114µs ± 5%      ~     (p=0.396 n=83+94)
      AddVW/1-8             4.04ns ± 4%     4.34ns ± 4%    +7.57%  (p=0.000 n=96+98)
      AddVW/2-8             4.34ns ± 5%     4.40ns ± 5%    +1.40%  (p=0.000 n=99+98)
      AddVW/3-8             5.43ns ± 0%     5.54ns ± 2%    +1.97%  (p=0.000 n=85+94)
      AddVW/4-8             6.23ns ± 1%     6.18ns ± 2%    -0.66%  (p=0.000 n=77+78)
      AddVW/5-8             6.78ns ± 2%     6.90ns ± 4%    +1.77%  (p=0.000 n=80+99)
      AddVW/10-8            10.5ns ± 4%      9.9ns ± 1%    -5.77%  (p=0.000 n=97+69)
      AddVW/100-8            114ns ± 3%       91ns ± 0%   -20.38%  (p=0.000 n=98+77)
      AddVW/1000-8          1.12µs ± 1%     0.87µs ± 1%   -22.80%  (p=0.000 n=82+68)
      AddVW/10000-8         11.2µs ± 2%      8.5µs ± 5%   -23.85%  (p=0.000 n=85+100)
      AddVW/100000-8         112µs ± 2%       85µs ± 5%   -24.22%  (p=0.000 n=71+96)
      SubVW/1-8             4.09ns ± 2%     4.18ns ± 4%    +2.32%  (p=0.000 n=78+96)
      SubVW/2-8             4.59ns ± 5%     4.52ns ± 7%    -1.54%  (p=0.000 n=98+94)
      SubVW/3-8             5.41ns ±10%     5.55ns ± 1%    +2.48%  (p=0.000 n=100+89)
      SubVW/4-8             6.51ns ± 2%     6.19ns ± 0%    -4.85%  (p=0.000 n=97+81)
      SubVW/5-8             7.25ns ± 3%     6.90ns ± 4%    -4.93%  (p=0.000 n=97+96)
      SubVW/10-8            10.6ns ± 4%      9.8ns ± 2%    -7.32%  (p=0.000 n=95+96)
      SubVW/100-8           90.4ns ± 0%     90.8ns ± 0%    +0.43%  (p=0.000 n=83+78)
      SubVW/1000-8           853ns ± 4%      857ns ± 2%    +0.42%  (p=0.000 n=100+98)
      SubVW/10000-8         8.52µs ± 4%     8.53µs ± 2%      ~     (p=0.061 n=99+97)
      SubVW/100000-8        84.8µs ± 5%     84.2µs ± 2%    -0.78%  (p=0.000 n=99+93)
      AddMulVVW/1-8         8.73ns ± 0%     5.33ns ± 3%   -38.91%  (p=0.000 n=91+96)
      AddMulVVW/2-8         14.8ns ± 3%      6.5ns ± 2%   -56.33%  (p=0.000 n=100+79)
      AddMulVVW/3-8         18.6ns ± 2%      7.8ns ± 5%   -57.84%  (p=0.000 n=89+96)
      AddMulVVW/4-8         24.0ns ± 2%      9.8ns ± 0%   -59.09%  (p=0.000 n=95+67)
      AddMulVVW/5-8         29.0ns ± 2%     11.5ns ± 5%   -60.44%  (p=0.000 n=90+97)
      AddMulVVW/10-8        54.1ns ± 0%     18.8ns ± 1%   -65.37%  (p=0.000 n=82+84)
      AddMulVVW/100-8        508ns ± 2%      165ns ± 4%   -67.62%  (p=0.000 n=72+98)
      AddMulVVW/1000-8      4.96µs ± 3%     1.55µs ± 1%   -68.86%  (p=0.000 n=99+91)
      AddMulVVW/10000-8     50.0µs ± 4%     15.5µs ± 4%   -68.95%  (p=0.000 n=97+97)
      AddMulVVW/100000-8     491µs ± 1%      156µs ± 8%   -68.22%  (p=0.000 n=79+95)
      
      Change-Id: I4c6ae0b4065f371aea8103f6a85d9e9274bf01d0
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164965
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      d5edbcac
    • Baokun Lee's avatar
      os: remove unreadable directories in RemoveAll · c7465929
      Baokun Lee authored
      Fixes #30555
      
      Change-Id: Ib894b4f3cdba23a18a69c9470cf69ceb83591a4d
      Reviewed-on: https://go-review.googlesource.com/c/go/+/165057
      Run-TryBot: Baokun Lee <nototon@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      c7465929
    • Josh Bleecher Snyder's avatar
      math/big: optimize shlVU_g and shrVU_g · 87cc5671
      Josh Bleecher Snyder authored
      Special case shifts by zero.
      Provide hints to the compiler that shifts are bounded.
      
      There are no existing benchmarks for shifts,
      but the Float implementation uses shifts,
      so we can use those.
      
      Benchmarks on amd64 with -tags=math_big_pure_go.
      
      name                  old time/op    new time/op    delta
      FloatString/100-8        869ns ± 3%     872ns ± 4%   +0.40%  (p=0.001 n=94+83)
      FloatString/1000-8      26.5µs ± 1%    26.4µs ± 1%   -0.46%  (p=0.000 n=87+96)
      FloatString/10000-8     2.18ms ± 2%    2.18ms ± 2%     ~     (p=0.687 n=90+89)
      FloatString/100000-8     200ms ± 7%     197ms ± 5%   -1.47%  (p=0.000 n=100+90)
      FloatAdd/10-8           65.9ns ± 4%    64.0ns ± 4%   -2.94%  (p=0.000 n=92+93)
      FloatAdd/100-8          71.3ns ± 4%    67.4ns ± 4%   -5.51%  (p=0.000 n=96+93)
      FloatAdd/1000-8          128ns ± 1%     121ns ± 0%   -5.69%  (p=0.000 n=91+80)
      FloatAdd/10000-8         718ns ± 4%     626ns ± 4%  -12.83%  (p=0.000 n=99+99)
      FloatAdd/100000-8       6.43µs ± 3%    5.50µs ± 1%  -14.50%  (p=0.000 n=98+83)
      FloatSub/10-8           57.7ns ± 2%    57.0ns ± 4%   -1.20%  (p=0.000 n=89+96)
      FloatSub/100-8          59.9ns ± 3%    58.7ns ± 4%   -2.10%  (p=0.000 n=100+98)
      FloatSub/1000-8         94.5ns ± 1%    88.6ns ± 0%   -6.16%  (p=0.000 n=74+70)
      FloatSub/10000-8         456ns ± 1%     416ns ± 5%   -8.83%  (p=0.000 n=87+95)
      FloatSub/100000-8       4.00µs ± 1%    3.57µs ± 1%  -10.87%  (p=0.000 n=68+85)
      FloatSqrt/64-8           585ns ± 1%     579ns ± 1%   -0.99%  (p=0.000 n=92+90)
      FloatSqrt/128-8         1.26µs ± 1%    1.23µs ± 2%   -2.42%  (p=0.000 n=91+81)
      FloatSqrt/256-8         1.45µs ± 3%    1.40µs ± 1%   -3.61%  (p=0.000 n=96+90)
      FloatSqrt/1000-8        4.03µs ± 1%    3.91µs ± 1%   -3.05%  (p=0.000 n=90+93)
      FloatSqrt/10000-8       48.0µs ± 0%    47.3µs ± 1%   -1.55%  (p=0.000 n=90+90)
      FloatSqrt/100000-8      1.23ms ± 3%    1.22ms ± 4%   -1.00%  (p=0.000 n=99+99)
      FloatSqrt/1000000-8     96.7ms ± 4%    98.0ms ±10%     ~     (p=0.322 n=89+99)
      
      Change-Id: I0f941c05b7c324256d7f0674559b6ba906e92ba8
      Reviewed-on: https://go-review.googlesource.com/c/go/+/164967
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      87cc5671
    • Michael Anthony Knyszek's avatar
      runtime: use MADV_FREE_REUSABLE on darwin · abf8e355
      Michael Anthony Knyszek authored
      Currently on darwin we use MADV_FREE, which unfortunately doesn't result
      in a change in the process's RSS until pages actually get kicked out,
      which the OS is free to do lazily (e.g. until it finds itself under
      memory pressure).
      
      To remedy this, we instead use MADV_FREE_REUSABLE which has similar
      semantics, except that it also sets a reusable bit on each page so the
      process's RSS gets reported more accurately. The one caveat is for every
      time we call MADV_FREE_REUSABLE on a region we must call MADV_FREE_REUSE
      to keep the kernel's accounting updated.
      
      Also, because this change requires adding new constants that only exist
      on darwin, it splits mem_bsd.go into mem_bsd.go and mem_darwin.go.
      
      Fixes #29844.
      
      Change-Id: Idb6421698511138a430807bcbbd1516cd57557c8
      Reviewed-on: https://go-review.googlesource.com/c/go/+/159117Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Michael Knyszek <mknyszek@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      abf8e355
    • Agniva De Sarker's avatar
      misc/git: remove pre-commit file · 0c7cdb49
      Agniva De Sarker authored
      All hook files are automatically set up when any git-codereview command is run.
      And since the contribution guidelines point to installing git-codereview,
      this file does not serve any purpose any more.
      
      Change-Id: I165f6905ca03fd3d512c59e2654ef79e76de934c
      Reviewed-on: https://go-review.googlesource.com/c/go/+/158677Reviewed-by: default avatarAndrew Bonventre <andybons@golang.org>
      0c7cdb49
    • Carrie Bynon's avatar
      doc: make path platform dependent · 88da9ccb
      Carrie Bynon authored
      Path should now appear with the correct slash, depending on which
      platform install document is being viewed - keeping in line with the
      rest of the document.
      
      Fixes #30160
      
      Change-Id: Ib10e5a4adf366c700bff6f8d246bd5e3111ed61c
      Reviewed-on: https://go-review.googlesource.com/c/go/+/162918Reviewed-by: default avatarAndrew Bonventre <andybons@golang.org>
      88da9ccb
    • Baokun Lee's avatar
      cmd/api: fix no go files package panic · 68eb3ccd
      Baokun Lee authored
      Fixes #29837
      
      Change-Id: I7d57c24d2133932c076df6f41dd6589f777b65dd
      Reviewed-on: https://go-review.googlesource.com/c/158877
      Run-TryBot: Baokun Lee <nototon@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      68eb3ccd
    • Daniel Martí's avatar
      os/exec: less allocs in the common case · d1887676
      Daniel Martí authored
      When Stdin, Stdout, and Stderr are nil, there are no goroutines to keep
      track of, so we don't need a channel.
      
      And in startProcess, preallocate the right size for sysattr.Files,
      saving a bit of space and a couple of slice growth allocs.
      
      name            old time/op    new time/op    delta
      ExecHostname-8     419µs ± 0%     417µs ± 1%    ~     (p=0.093 n=6+6)
      
      name            old alloc/op   new alloc/op   delta
      ExecHostname-8    6.40kB ± 0%    6.28kB ± 0%  -1.86%  (p=0.002 n=6+6)
      
      name            old allocs/op  new allocs/op  delta
      ExecHostname-8      34.0 ± 0%      31.0 ± 0%  -8.82%  (p=0.002 n=6+6)
      
      Change-Id: Ic1d617f29e9c6431cdcadc7f9bb992750a6d5f48
      Reviewed-on: https://go-review.googlesource.com/c/164801
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      d1887676
    • Brian Kessler's avatar
      encoding/csv: document that Writer is buffered · 0db5534d
      Brian Kessler authored
      Add documentation that individual Write calls are buffered and
      copy documentation from bufio.Writer notifying the user to call
      Flush and Error when all writes are complete. Remove reference
      to "file" since the implementation is general and allows any
      io.Writer.
      
      Fixes #30045
      
      Change-Id: I50165470e548f296494e764707fbabe36c665015
      Reviewed-on: https://go-review.googlesource.com/c/160680Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      0db5534d
    • Josh Bleecher Snyder's avatar
      internal/poll: copy and use errnoErr to avoid allocations · 4fb900e9
      Josh Bleecher Snyder authored
      Converting a syscall.Errno to an interface is
      a significant source of allocations in os/exec.
      
      Elsewhere in the tree, we have pre-allocated errors
      for common errno values. Use the same trick here.
      
      This CL makes yet another copy of this code.
      The problem is that there isn't really a great place to share it.
      
      The existing copies are in:
      
      cmd/vendor/golang.org/x/sys/unix
      cmd/vendor/golang.org/x/sys/windows
      cmd/vendor/golang.org/x/sys/windows/registry
      internal/syscall/windows
      internal/syscall/windows/registry
      syscall
      
      internal/poll can't import from cmd/vendor, and cmd/vendor
      can't import from internal/*, so we can ignore cmd/vendor.
      
      We could put the unix version in internal/syscall/unix
      and then have a platform-independent wrapper in internal/syscall.
      But syscall couldn't use it; internal/syscall/* depends on syscall.
      So that only allows code re-use with internal/syscall/windows/*.
      
      We could create a new very low level internal package, internal/errno.
      But syscall couldn't use it, because it has to import syscall
      to get access to syscall.Errno.
      So that only allows code re-use with internal/syscall/windows/*.
      
      It's not clear that that any of these options pulls its weight.
      
      The obvious and "correct" place for this is syscall.
      But we can't export syscall's version, because package syscall is frozen.
      
      So just copy the code. There's not much of it.
      
      name            old alloc/op   new alloc/op   delta
      ExecHostname-8    6.15kB ± 0%    6.13kB ± 0%  -0.38%  (p=0.000 n=20+19)
      
      name            old allocs/op  new allocs/op  delta
      ExecHostname-8      34.0 ± 0%      31.0 ± 0%  -8.82%  (p=0.000 n=20+20)
      
      Fixes #30535
      
      Change-Id: Idd31c7cced6e15387acc698ffc011e1b7b479903
      Reviewed-on: https://go-review.googlesource.com/c/164971
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      4fb900e9
  3. 03 Mar, 2019 8 commits
    • Richard Musiol's avatar
      all: rename WebAssembly instructions according to spec changes · c0d82bb0
      Richard Musiol authored
      The names of some instructions have been updated in the WebAssembly
      specification to be more consistent, see
      https://github.com/WebAssembly/spec/commit/994591e51c9df9e7ef980b04d660709b79982f75.
      This change to the spec is possible because it is still in a draft
      state.
      
      Go's support for WebAssembly is still experimental and thus excempt from
      the compatibility promise. Being consistent with the spec should
      warrant this breaking change to the assembly instruction names.
      
      Change-Id: Iafb8b18ee7f55dd0e23c6c7824aa1fad43117ef1
      Reviewed-on: https://go-review.googlesource.com/c/153797
      Run-TryBot: Richard Musiol <neelance@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      c0d82bb0
    • erifan01's avatar
      cmd/compile: optimize math/bits.Div32 for arm64 · 159b2de4
      erifan01 authored
      Benchmark:
      name     old time/op  new time/op  delta
      Div-8    22.0ns ± 0%  22.0ns ± 0%     ~     (all equal)
      Div32-8  6.51ns ± 0%  3.00ns ± 0%  -53.90%  (p=0.000 n=10+8)
      Div64-8  22.5ns ± 0%  22.5ns ± 0%     ~     (all equal)
      
      Code:
      func div32(hi, lo, y uint32) (q, r uint32) {return bits.Div32(hi, lo, y)}
      
      Before:
              0x0020 00032 (test.go:24)       MOVWU   "".y+8(FP), R0
              0x0024 00036 ($GOROOT/src/math/bits/bits.go:472)        CBZW    R0, 132
              0x0028 00040 ($GOROOT/src/math/bits/bits.go:472)        MOVWU   "".hi(FP), R1
              0x002c 00044 ($GOROOT/src/math/bits/bits.go:472)        CMPW    R1, R0
              0x0030 00048 ($GOROOT/src/math/bits/bits.go:472)        BLS     96
              0x0034 00052 ($GOROOT/src/math/bits/bits.go:475)        MOVWU   "".lo+4(FP), R2
              0x0038 00056 ($GOROOT/src/math/bits/bits.go:475)        ORR     R1<<32, R2, R1
              0x003c 00060 ($GOROOT/src/math/bits/bits.go:476)        CBZ     R0, 140
              0x0040 00064 ($GOROOT/src/math/bits/bits.go:476)        UDIV    R0, R1, R2
              0x0044 00068 (test.go:24)       MOVW    R2, "".q+16(FP)
              0x0048 00072 ($GOROOT/src/math/bits/bits.go:476)        UREM    R0, R1, R0
              0x0050 00080 (test.go:24)       MOVW    R0, "".r+20(FP)
              0x0054 00084 (test.go:24)       MOVD    -8(RSP), R29
              0x0058 00088 (test.go:24)       MOVD.P  32(RSP), R30
              0x005c 00092 (test.go:24)       RET     (R30)
      
      After:
              0x001c 00028 (test.go:24)       MOVWU   "".y+8(FP), R0
              0x0020 00032 (test.go:24)       CBZW    R0, 92
              0x0024 00036 (test.go:24)       MOVWU   "".hi(FP), R1
              0x0028 00040 (test.go:24)       CMPW    R0, R1
              0x002c 00044 (test.go:24)       BHS     84
              0x0030 00048 (test.go:24)       MOVWU   "".lo+4(FP), R2
              0x0034 00052 (test.go:24)       ORR     R1<<32, R2, R4
              0x0038 00056 (test.go:24)       UDIV    R0, R4, R3
              0x003c 00060 (test.go:24)       MSUB    R3, R4, R0, R4
              0x0040 00064 (test.go:24)       MOVW    R3, "".q+16(FP)
              0x0044 00068 (test.go:24)       MOVW    R4, "".r+20(FP)
              0x0048 00072 (test.go:24)       MOVD    -8(RSP), R29
              0x004c 00076 (test.go:24)       MOVD.P  16(RSP), R30
              0x0050 00080 (test.go:24)       RET     (R30)
      
      UREM instruction in the previous assembly code will be converted to UDIV and MSUB instructions
      on arm64. However the UDIV instruction in UREM is unnecessary, because it's a duplicate of the
      previous UDIV. This CL adds a rule to have this extra UDIV instruction removed by CSE.
      
      Change-Id: Ie2508784320020b2de022806d09f75a7871bb3d7
      Reviewed-on: https://go-review.googlesource.com/c/159577Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      159b2de4
    • Daniel Martí's avatar
      os/exec: don't use the echo binary for a benchmark · 83610c90
      Daniel Martí authored
      Most notably, it's missing on Windows machines. For example,
      windows-amd64-race started failing consistently:
      
      	--- FAIL: BenchmarkExecEcho
      	    bench_test.go:15: could not find echo: exec: "echo": executable file not found in %PATH%
      
      We can also reproduce this from Linux with Wine:
      
      	$ GOOS=windows go test -bench=. -benchtime=1x -run=- -exec wine
      	--- FAIL: BenchmarkExecEcho
      	    bench_test.go:15: could not find echo: exec: "echo": executable file not found in %PATH%
      
      Instead, use the "hostname" program, which is available on Windows too.
      Interestingly enough, it's also slightly faster than "echo". Any program
      is fine as long as it's close enough to a no-op, though.
      
      	name        old time/op    new time/op    delta
      	ExecEcho-8     422µs ± 0%     395µs ± 0%  -6.39%  (p=0.004 n=6+5)
      
      	name        old alloc/op   new alloc/op   delta
      	ExecEcho-8    6.39kB ± 0%    6.42kB ± 0%  +0.53%  (p=0.002 n=6+6)
      
      	name        old allocs/op  new allocs/op  delta
      	ExecEcho-8      36.0 ± 0%      36.0 ± 0%    ~     (all equal)
      
      Change-Id: I772864d69979172b5cf807552c84d0e165e73051
      Reviewed-on: https://go-review.googlesource.com/c/164704
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      83610c90
    • Richard Musiol's avatar
      misc/wasm: better adapt to different JavaScript environments · 42b79f08
      Richard Musiol authored
      This change adds support for using wasm with Electron. It refactors
      environment detection to a more modular approach instead of explicitly
      testing for Node.js.
      
      Fixes #29404
      
      Change-Id: I882a9c56523744e7fd7cb2013d158df91cf91d14
      Reviewed-on: https://go-review.googlesource.com/c/164665
      Run-TryBot: Richard Musiol <neelance@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      42b79f08
    • Alberto Donizetti's avatar
      doc: fix bad lib/time link in 1.12 release notes · 0dc62565
      Alberto Donizetti authored
      There's a "lib/time" sub-section in the Go 1.12 relase notes that
      points to a non-existent golang.org/pkg/lib/time page.
      
      The note is about a change in the tz database in the src/lib/time
      directory, but the section's title (and the link) should probably just
      refer to the time package.
      
      Change-Id: Ibf9dacd710e72886f14ad0b7415fea1e8d25b83a
      Reviewed-on: https://go-review.googlesource.com/c/164977Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      0dc62565
    • Daniel Martí's avatar
      os/exec: preallocate for Cmd.childFiles · 59712fd0
      Daniel Martí authored
      We're always going to add stdin, stdout, and stderr to childFiles, so
      its length will be at least three. The final length will be those three
      elements plus however many files were given via ExtraFiles.
      
      Allocate for that final length directly, saving two slice growth allocs
      in the common case where ExtraFiles is empty.
      
      name        old time/op    new time/op    delta
      ExecEcho-8     435µs ± 0%     435µs ± 0%    ~     (p=0.394 n=6+6)
      
      name        old alloc/op   new alloc/op   delta
      ExecEcho-8    6.39kB ± 0%    6.37kB ± 0%  -0.39%  (p=0.002 n=6+6)
      
      name        old allocs/op  new allocs/op  delta
      ExecEcho-8      36.0 ± 0%      34.0 ± 0%  -5.56%  (p=0.002 n=6+6)
      
      Change-Id: Ib702c0da1e43f0a55ed937af6d45fca6a170e8f3
      Reviewed-on: https://go-review.googlesource.com/c/164898
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      59712fd0
    • Leon Klingele's avatar
      cmd/internal/obj/mips: use r instead of p.Reg in call to OP_IRR · ec01d8f7
      Leon Klingele authored
      Change-Id: Id77764ed2d693e632e2a7b4e4638c17e0caf2276
      GitHub-Last-Rev: 9ebe28252086ddcd530905eb9cf50b4a66413291
      GitHub-Pull-Request: golang/go#30003
      Reviewed-on: https://go-review.googlesource.com/c/160427Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ec01d8f7
    • Daniel Martí's avatar
      encoding/base64: lift nil check out of encode loop · fc42cf8b
      Daniel Martí authored
      Most of the encoding time is spent in the first Encode loop, since the
      rest of the function only deals with the few remaining bytes. Any
      unnecessary work done in that loop body matters tremendously.
      
      One such unnecessary bottleneck was the use of the enc.encode table.
      Since enc is a pointer receiver, and the field is first used within the
      loop, the encoder must perform a nil check at every iteration.
      
      Add a dummy use of the field before the start of the loop, to move the
      nil check there. After that line, the compiler now knows that enc can't
      be nil, and thus the hot loop is free of nil checks.
      
      name              old time/op    new time/op    delta
      EncodeToString-4    14.7µs ± 0%    13.7µs ± 1%  -6.53%  (p=0.000 n=10+10)
      
      name              old speed      new speed      delta
      EncodeToString-4   559MB/s ± 0%   598MB/s ± 1%  +6.99%  (p=0.000 n=10+10)
      
      Updates #20206.
      
      Change-Id: Icbb523a7bd9e470a8be0a448d1d78ade97ed4ff6
      Reviewed-on: https://go-review.googlesource.com/c/151158
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      fc42cf8b
  4. 02 Mar, 2019 11 commits