- 17 Oct, 2016 32 commits
-
-
Michael Munday authored
Adds the new canMergeLoad function which can be used by rules to decide whether a load can be merged into an operation. The function ensures that the merge will not reorder the load relative to memory operations (for example, stores) in such a way that the block can no longer be scheduled. This new function enables transformations such as: MOVD 0(R1), R2 ADD R2, R3 to: ADD 0(R1), R3 The two-operand form of the following instructions can now read a single memory operand: - ADD - ADDC - ADDW - MULLD - MULLW - SUB - SUBC - SUBE - SUBW - AND - ANDW - OR - ORW - XOR - XORW Improves SHA3 performance by 6-8%. Updates #15054. Change-Id: Ibcb9122126cd1a26f2c01c0dfdbb42fe5e7b5b94 Reviewed-on: https://go-review.googlesource.com/29272 Run-TryBot: Michael Munday <munday@ca.ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
-
Robert Griesemer authored
Inspired by Alberto Donizetti's observations in https://go-review.googlesource.com/#/c/30099/. name old time/op new time/op delta DecimalConversion-8 138µs ± 1% 136µs ± 2% -1.85% (p=0.000 n=10+10) 10 runs each, measured on a Mac Mini, 2.3 GHz Intel Core i7. Performance improvements varied between -1.25% to -4.4%; -1.85% is about in the middle of the observed improvement. The generated code is slightly shorter in the inner loops of the conversion code. Change-Id: I10fb3b2843da527691c39ad5e5e5bd37ed63e2fa Reviewed-on: https://go-review.googlesource.com/31250Reviewed-by: Alan Donovan <adonovan@google.com>
-
Austin Clements authored
GC assists retry if preempted or if they fail to park. However, on the retry path they currently use stale statistics. In particular, the retry can use "debtBytes", but debtBytes isn't updated when the debt changes (since other than retries it is only used once). Also, though less of a problem, the if the assist ratio has changed while the assist was blocked, the retry will still use the old assist ratio. Fix all of this by simply making the retry jump back to where we compute these statistics, rather than just after. Change-Id: I2ed8b4f0fc9f008ff060aa926f4334b662ac7d3f Reviewed-on: https://go-review.googlesource.com/30701Reviewed-by: Rick Hudson <rlh@golang.org>
-
Austin Clements authored
This puts all of the assist queue-related code together and makes it easier to modify how the assist queue works. Change-Id: Id54e06702bdd5a5dd3fef2ce2c14cd7ca215303c Reviewed-on: https://go-review.googlesource.com/30700Reviewed-by: Rick Hudson <rlh@golang.org>
-
Keith Randall authored
It's pretty simple. For: e = (interface{})(i) Do: tmp = i.itab if tmp != nil { tmp = tmp.typ_ // load type from itab } e = eface{tmp, i.data} It is smaller and faster than calling the runtime. Change-Id: I0ad27f62f4ec0b6cd53bc8530e4da0eae3e67a6c Reviewed-on: https://go-review.googlesource.com/31260 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
-
Austin Clements authored
getArgInfo for reflect.makeFuncStub and reflect.methodValueCall is necessarily special. These have dynamically determined argument maps that are stored in their context (that is, their *funcval). These functions are written to store this context at 0(SP) when called, and getArgInfo retrieves it from there. This technique works if getArgInfo is passed an active call frame for one of these functions. However, getArgInfo is also used in tracebackdefers, where the "call" is not a true call with an active stack frame, but a deferred call. In this situation, getArgInfo currently crashes because tracebackdefers passes a frame with sp set to 0. However, the entire approach used by getArgInfo is flawed in this situation because the wrapper has not actually executed, and hence hasn't saved this metadata to any stack frame. In the defer case, we know the *funcval from the _defer itself, so we can fix this by teaching getArgInfo to use the *funcval context directly when its available, and otherwise get it from the active call frame. While we're here, this commit simplifies getArgInfo a bit by making it play more nicely with the type system. Rather than decoding the *reflect.methodValue that is the wrapper's context as a *[2]uintptr, just write out a copy of the reflect.methodValue type in the runtime. Fixes #16331. Fixes #17471. Change-Id: I81db4d985179b4a81c68c490cceeccbfc675456a Reviewed-on: https://go-review.googlesource.com/31138 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
-
Austin Clements authored
If morestack runs on the g0 or gsignal stack, it currently performs some abort operation that typically produces a signal (e.g., it does an INT $3 on x86). This is useful if you're running in a debugger, but if you're not, the runtime tries to trap this signal, which is likely to send the program into a deeper spiral of collapse and lead to very confusing diagnostic output. Help out people trying to debug without a debugger by making morestack print an informative message before blowing up. Change-Id: I2814c64509b137bfe20a00091d8551d18c2c4749 Reviewed-on: https://go-review.googlesource.com/31133 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Russ Cox authored
Per discussion on #12808, it's a bit odd that if you do CGO_ENABLED=0 ./make.bash then you get a toolchain that still tries to use cgo. So make the CGO_ENABLED setting propagate into the resulting toolchain as the default setting for that environment variable, like we do with other variables like CC and GOROOT. No reasonable way to test automatically, but I did test by hand that after the above command, 'go env' shows CGO_ENABLED=0; before it showed CGO_ENABLED=1. Fixes #12808. Change-Id: I26a2fa6cc00e73bde8af7469270b27293392ed71 Reviewed-on: https://go-review.googlesource.com/31141 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Lynn Boger authored
This improves the performance for byte.Compare by rewriting the cmpbody function in runtime/asm_ppc64x.s. The previous code had a simple loop which loaded a pair of bytes and compared them, which is inefficient for long buffers. The updated function checks for 8 or 32 byte chunks and then loads and compares double words where possible. Because the byte.Compare result indicates greater or less than, the doubleword loads must take endianness into account, using a byte reversed load in the little endian case. Fixes #17433 benchmark old ns/op new ns/op delta BenchmarkBytesCompare/8-16 13.6 7.16 -47.35% BenchmarkBytesCompare/16-16 25.7 7.83 -69.53% BenchmarkBytesCompare/32-16 38.1 7.78 -79.58% BenchmarkBytesCompare/64-16 63.0 10.6 -83.17% BenchmarkBytesCompare/128-16 112 13.0 -88.39% BenchmarkBytesCompare/256-16 211 28.1 -86.68% BenchmarkBytesCompare/512-16 410 38.6 -90.59% BenchmarkBytesCompare/1024-16 807 60.2 -92.54% BenchmarkBytesCompare/2048-16 1601 103 -93.57% Change-Id: I121acc74fcd27c430797647b8d682eb0607c63eb Reviewed-on: https://go-review.googlesource.com/30949Reviewed-by: David Chase <drchase@google.com>
-
Quentin Smith authored
To match the language spec, strconv.Unquote needs to strip carriage returns from the raw string. Also fixes TestUnquote to not be a noop. Fixes #15997 Change-Id: I2456f50f2ad3830f37e545f4f6774ced9fe609d7 Reviewed-on: https://go-review.googlesource.com/31210Reviewed-by: Robert Griesemer <gri@golang.org>
-
Michael Munday authored
The assembly in math/big may contain instructions that the bootstrap compiler does not support. Disable it using the math_big_pure_go build tag. Fixes #17484. Change-Id: I766cab6a888721ab4ed76ebdbfc87ad4e919ec41 Reviewed-on: https://go-review.googlesource.com/31142 Run-TryBot: Michael Munday <munday@ca.ibm.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Alberto Donizetti authored
The relevant benchmark (on an Intel i7-4510U machine): name old time/op new time/op delta FormatFloat/Slowpath64-4 68.6µs ± 0% 44.1µs ± 2% -35.71% (p=0.000 n=13+15) Change-Id: I67eb0e81ce74ed57752d0280059f91419f09e93b Reviewed-on: https://go-review.googlesource.com/30099Reviewed-by: Robert Griesemer <gri@golang.org>
-
Adam Langley authored
This change imports the chacha20poly1305 and poly1305 packages from x/crypto at 5f4e837b98443e9e7a65072235205993af565d85. These packages will be used to support the ChaCha20-Poly1305 AEAD in crypto/tls. Change-Id: I1a38d671ef9aeff3bc41e3924655883d465a5617 Reviewed-on: https://go-review.googlesource.com/30956Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Russ Cox authored
Sometimes .git is a plain file; maybe others will follow. This CL matches CL 21430, made in x/tools/go/vcs. The change in the Swift test case makes the test case pass by changing the test to match current behavior, which I assume is better than the reverse. (The test only runs locally and without -short, so the builders are not seeing this particular failure.) For #10322. Change-Id: Iccd08819a01c5609a2880b9d8a99af936e20faff Reviewed-on: https://go-review.googlesource.com/30948 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Lynn Boger authored
This change adds support for trampolines on ppc64x when using internal linking, in the case where the offset to the branch target is larger than what fits in the field provided by the branch instruction. Fixes #16665 Change-Id: Icfee72910f38c94588d2adce517b64dee6176145 Reviewed-on: https://go-review.googlesource.com/30850Reviewed-by: David Crawshaw <crawshaw@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
-
Brad Fitzpatrick authored
The driver.Valuer interface lets types map their Go representation to a suitable database/sql/driver.Value. If a user defines the Value method with a value receiver, such as: type MyStr string func (s MyStr) Value() (driver.Value, error) { return strings.ToUpper(string(s)), nil } Then they can't use (*MyStr)(nil) as an argument to an SQL call via database/sql, because *MyStr also implements driver.Value, but via a compiler-generated wrapper which checks whether the pointer is nil and panics if so. We now accept (*MyStr)(nil) and map it to "nil" (an SQL "NULL") if the Valuer method is implemented on MyStr instead of *MyStr. If a user implements the driver.Value interface with a pointer receiver, they retain full control of what nil means: type MyStr string func (s *MyStr) Value() (driver.Value, error) { if s == nil { return "missing MyStr", nil } return strings.ToUpper(string(*s)), nil } Adds tests for both cases. Fixes #8415 Change-Id: I897d609d80d46e2354d2669a8a3e090688eee3ad Reviewed-on: https://go-review.googlesource.com/31259 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Russ Cox authored
Delete vendored copy. Change-Id: I06e9d3b709553a1a8d06275e99bd8f617aac5788 Reviewed-on: https://go-review.googlesource.com/31011Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Russ Cox authored
This allows use of newer math/big (and later debug/pe) without maintaining a vendored copy somewhere in cmd. Use for math/big, deleting cmd/compile/internal/big. Change-Id: I2bffa7a9ef115015be29fafdb02acc3e7a665d11 Reviewed-on: https://go-review.googlesource.com/31010Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Russ Cox authored
1. Define behavior for Unmarshal of JSON null into Unmarshaler and TextUnmarshaler. Specifically, an Unmarshaler will be given the literal null and can decide what to do (because otherwise json.RawMessage is impossible to implement), and a TextUnmarshaler will be skipped over (because there is no text to unmarshal), like most other inappropriate types. Document this in Unmarshal, with a reminder in UnmarshalJSON about handling null. 2. Test all this. 3. Fix the TextUnmarshaler case, which was returning an unmarshalling error, to match the definition. 4. Fix the error that had been used for the TextUnmarshaler, since it was claiming that there was a JSON string when in fact the problem was NOT having a string. 5. Adjust time.Time and big.Int's UnmarshalJSON to ignore null, as is conventional. Fixes #9037. Change-Id: If78350414eb8dda712867dc8f4ca35a9db041b0c Reviewed-on: https://go-review.googlesource.com/30944Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Ben Burkert authored
The CloseWrite method sends a close_notify alert record to the other side of the connection. This record indicates that the sender has finished sending on the connection. Unlike the Close method, the sender may still read from the connection until it recieves a close_notify record (or the underlying connection is closed). This is analogous to a TCP half-close. Updates #8579 Change-Id: I9c6bc193efcb25cc187f7735ee07170afa7fdde3 Reviewed-on: https://go-review.googlesource.com/25159Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Victor Vrantchan authored
For #16360. Change-Id: I99d1e5ab1f814f65b3066a498158a442f1bd477f Reviewed-on: https://go-review.googlesource.com/31137 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Martin Möhrmann authored
Copies utf8 constants and EncodeRune implementation from unicode/utf8. Adds a new decoderune implementation that is used by the compiler in code generated for ranging over strings. It does not handle ASCII runes since these are handled directly before calls to decoderune. The DecodeRuneInString implementation from unicode/utf8 is not used since it uses a lookup table that would increase the use of cpu caches. Adds more tests that check decoding of valid and invalid utf8 sequences. name old time/op new time/op delta RuneIterate/range2/ASCII-4 7.45ns ± 2% 7.45ns ± 1% ~ (p=0.634 n=16+16) RuneIterate/range2/Japanese-4 53.5ns ± 1% 49.2ns ± 2% -8.03% (p=0.000 n=20+20) RuneIterate/range2/MixedLength-4 46.3ns ± 1% 41.0ns ± 2% -11.57% (p=0.000 n=20+20) new: "".decoderune t=1 size=423 args=0x28 locals=0x0 old: "".charntorune t=1 size=666 args=0x28 locals=0x0 Change-Id: I1df1fdb385bb9ea5e5e71b8818ea2bf5ce62de52 Reviewed-on: https://go-review.googlesource.com/28490 Run-TryBot: Martin Möhrmann <martisch@uos.de> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Emmanuel Odeke authored
Referencing RFC 7230 Section 3.3.2, this CL deduplicates multiple identical Content-Length headers of a message or rejects the message as invalid if the Content-Length values differ. Fixes #16490 Change-Id: Ia6b0f58ec7d35710b11a36113d2bd9128f693f64 Reviewed-on: https://go-review.googlesource.com/31252Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
David du Colombier authored
Deadlines aren't implemented on Plan 9 yet. Updates #17477. Change-Id: I44ffdbef97276dfec56547e5189672b7da24bfc1 Reviewed-on: https://go-review.googlesource.com/31188Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: David du Colombier <0intro@gmail.com>
-
Klaus Post authored
The incorrect table was used for estimating output size. This can give suboptimal selection of entropy encoder in rare cases. Change-Id: I8b358200f2d1f9a3f9b79a44269d7be704e1d2d9 Reviewed-on: https://go-review.googlesource.com/31172Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Yasuhiro Matsumoto authored
Fixes #16736 Change-Id: I335d201e3f6738d838de3881087cb640fc7670e8 Reviewed-on: https://go-review.googlesource.com/30578 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Daniel Theophanes authored
Modify the new Context methods to take a name-value driver struct. This will require more modifications to drivers to use, but will reduce the overall number of structures that need to be maintained over time. Fixes #12381 Change-Id: I30747533ce418a1be5991a0c8767a26e8451adbd Reviewed-on: https://go-review.googlesource.com/30166Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Martin Möhrmann authored
In ReadRune store the size of the rune that was read into lastRead to avoid the need to call DecodeRuneLast in UnreadRune. fmt: name old time/op new time/op delta ScanInts-4 481µs ± 4% 458µs ± 3% -4.64% (p=0.000 n=20+20) Change-Id: I500848e663a975f426402a4b3d27a541e5cac06c Reviewed-on: https://go-review.googlesource.com/28817Reviewed-by: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Run-TryBot: Martin Möhrmann <martisch@uos.de> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Brad Fitzpatrick authored
Updates #16456 Change-Id: Ifea651ea3ece2267a6f0c1638181d6ddd9248a9f Reviewed-on: https://go-review.googlesource.com/31181Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Brad Fitzpatrick authored
Flesh out nacl's fake network system to match how all the other platforms work: all other systems' SetReadDeadline and SetWriteDeadline affect currently-blocked read & write calls. This was documented in golang.org/cl/30164 because it was the status quo and existing packages relied on it. (notably the net/http package) And add a test. Change-Id: I074a1054dcabcedc97b173dad5e827f8babf7cfc Reviewed-on: https://go-review.googlesource.com/31178 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Caleb Spare authored
Template.escape makes the assumption that t.Lookup(t.Name()) is t (escapeTemplate looks up the associated template by name and sets escapeErr appropriately). This assumption did not hold for a Cloned template, because the template associated with t.Name() was a second copy of the original. Add a test for the assumption that t.Lookup(t.Name()) == t. One effect of this broken assumption was #16101: parallel Executes racily accessed the template namespace because each Execute call saw t.escapeErr == nil and re-escaped the template concurrently with read accesses occurring outside the namespace mutex. Add a test for this race. Related to #12996 and CL 16104. Fixes #16101 Change-Id: I59831d0847abbabb4ef9135f2912c6ce982f9837 Reviewed-on: https://go-review.googlesource.com/31092 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
-
Alex Brainman authored
Fixes #17439 Change-Id: I7caa28519f38692f9ca306f0789cbb975fa1d7c4 Reviewed-on: https://go-review.googlesource.com/31112Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 16 Oct, 2016 6 commits
-
-
Rob Pike authored
Fixes #16423 Change-Id: I9635db295be4d356d427adadd309084e16c4582f Reviewed-on: https://go-review.googlesource.com/31255Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Rob Pike authored
Exit code 3 is unprecedented and inconsistent with other failures here, such as having no tool directory. Fixes #17145 Change-Id: Ie7ed56494d4511a600214666ce3a726d63a8fd8e Reviewed-on: https://go-review.googlesource.com/31253Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Brad Fitzpatrick authored
No need to skip it. It passes. Maybe it was fixed at some point. Change-Id: I9848924aefda44f9b3a574a8705fa549d657f28d Reviewed-on: https://go-review.googlesource.com/31177 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
-
Brad Fitzpatrick authored
Change-Id: Ibae0be046c6a6596d3a98b094ec5f089bb68be7a Reviewed-on: https://go-review.googlesource.com/31182Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Hiroshi Ioka authored
Change-Id: I8a176ed9c7f59ebdfd39c1e2b88905f977179982 Reviewed-on: https://go-review.googlesource.com/31119Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Alex Carol authored
Change-Id: Idca6115181960eed7a955027ee77a02decb4e7f2 Reviewed-on: https://go-review.googlesource.com/31179Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 15 Oct, 2016 2 commits
-
-
Austin Clements authored
The error check patterns in this test are more complex than necessary because f2 gets inlined into f1. This behavior isn't important to the test, so disable inlining of f2 and simplify the error check patterns. Change-Id: Ia8aee92a52f9217ad71b89b2931494047e8d2185 Reviewed-on: https://go-review.googlesource.com/31132 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
-
Austin Clements authored
Currently we use go:nowritebarrier in many places in proc.go. go:notinheap and go:yeswritebarrierrec now let us use go:nowritebarrierrec (the recursive form of the go:nowritebarrier pragma) more liberally. Do so in proc.go Change-Id: Ia7fcbc12ce6c51cb24730bf835fb7634ad53462f Reviewed-on: https://go-review.googlesource.com/30942Reviewed-by: Rick Hudson <rlh@golang.org>
-