| Age | Commit message (Collapse) | Author |
|
Package runtime's C functions written to be called from Go
started out written in C using carefully constructed argument
lists and the FLUSH macro to write a result back to memory.
For some functions, the appropriate parameter list ended up
being architecture-dependent due to differences in alignment,
so we added 'goc2c', which takes a .goc file containing Go func
declarations but C bodies, rewrites the Go func declaration to
equivalent C declarations for the target architecture, adds the
needed FLUSH statements, and writes out an equivalent C file.
That C file is compiled as part of package runtime.
Native Client's x86-64 support introduces the most complex
alignment rules yet, breaking many functions that could until
now be portably written in C. Using goc2c for those avoids the
breakage.
Separately, Keith's work on emitting stack information from
the C compiler would require the hand-written functions
to add #pragmas specifying how many arguments are result
parameters. Using goc2c for those avoids maintaining #pragmas.
For both reasons, use goc2c for as many Go-called C functions
as possible.
This CL is a replay of the bulk of CL 15400047 and CL 15790043,
both of which were reviewed as part of the NaCl port and are
checked in to the NaCl branch. This CL is part of bringing the
NaCl code into the main tree.
No new code here, just reformatting and occasional movement
into .h files.
LGTM=r
R=dave, alex.brainman, r
CC=golang-codereviews
https://golang.org/cl/65220044
|
|
Use explicit SSE writes instead of REP STOSQ.
benchmark old ns/op new ns/op delta
BenchmarkMemclr5 22 5 -73.62%
BenchmarkMemclr16 27 5 -78.49%
BenchmarkMemclr64 28 6 -76.43%
BenchmarkMemclr256 34 8 -74.94%
BenchmarkMemclr4096 112 84 -24.73%
BenchmarkMemclr65536 1902 1920 +0.95%
LGTM=dvyukov
R=golang-codereviews, dvyukov
CC=golang-codereviews
https://golang.org/cl/60090044
|
|
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/13436045
|
|
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/12798043
|
|
(amd64)
benchmark old ns/op new ns/op delta
BenchmarkEqual0 16 6 -63.15%
BenchmarkEqual9 22 7 -65.37%
BenchmarkEqual32 36 9 -74.91%
BenchmarkEqual4K 2187 120 -94.51%
benchmark old MB/s new MB/s speedup
BenchmarkEqual9 392.22 1134.38 2.89x
BenchmarkEqual32 866.72 3457.39 3.99x
BenchmarkEqual4K 1872.73 33998.87 18.15x
(386)
benchmark old ns/op new ns/op delta
BenchmarkEqual0 16 5 -63.85%
BenchmarkEqual9 22 7 -67.84%
BenchmarkEqual32 34 12 -64.94%
BenchmarkEqual4K 2196 113 -94.85%
benchmark old MB/s new MB/s speedup
BenchmarkEqual9 405.81 1260.18 3.11x
BenchmarkEqual32 919.55 2631.21 2.86x
BenchmarkEqual4K 1864.85 36072.54 19.34x
Update #3751
R=bradfitz, r, khr, dave, remyoudompheng, fullung, minux.ma, ality
CC=golang-dev
https://golang.org/cl/8056043
|
|
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/7716047
|
|
Uses AES hardware instructions on 386/amd64 to implement
a fast hash function. Incorporates a random key to
thwart hash collision DOS attacks.
Depends on CL#7548043 for new assembly instructions.
Update #3885
Helps some by making hashing faster. Go time drops from
0.65s to 0.51s.
R=rsc, r, bradfitz, remyoudompheng, khr, dsymonds, minux.ma, elias.naur
CC=golang-dev
https://golang.org/cl/7543043
|
|
Otherwise we can get predictable collisions.
R=golang-dev, dave, patrick, rsc
CC=golang-dev
https://golang.org/cl/7051043
|
|
This CL makes the runtime understand that the type of
the len or cap of a map, slice, or string is 'int', not 'int32',
and it is also careful to distinguish between function arguments
and results of type 'int' vs type 'int32'.
In the runtime, the new typedefs 'intgo' and 'uintgo' refer
to Go int and uint. The C types int and uint continue to be
unavailable (cause intentional compile errors).
This CL does not change the meaning of int, but it should make
the eventual change of the meaning of int on amd64 a bit
smoother.
Update #2188.
R=iant, r, dave, remyoudompheng
CC=golang-dev
https://golang.org/cl/6551067
|
|
Introduced in CL 6452046.
R=golang-dev, nigeltao, dave
CC=golang-dev
https://golang.org/cl/6459051
|
|
benchmark old ns/op new ns/op delta
BenchmarkCompareStringEqual 51 35 -30.20%
BenchmarkCompareStringIdentical 51 7 -85.71%
BenchmarkCompareStringSameLength 25 18 -28.29%
BenchmarkCompareStringDifferentLength 2 2 +1.46%
R=golang-dev, rsc
CC=golang-dev, remy
https://golang.org/cl/6450092
|
|
Fixes #3866.
R=rsc, r, nigeltao
CC=golang-dev
https://golang.org/cl/6452046
|
|
Fixes #3695.
R=r, dave, rsc
CC=golang-dev
https://golang.org/cl/6304062
|
|
Multiplying by the low 32 bits was a bad idea
no matter what, but it was a particularly unfortunate
choice because those bits are 0 for small integer values.
Fixes #2883.
R=ken2
CC=golang-dev
https://golang.org/cl/5634047
|
|
R=ken2
CC=golang-dev
https://golang.org/cl/5580046
|
|
Fixes #2609.
R=ken2
CC=golang-dev
https://golang.org/cl/5572069
|
|
BenchmarkChanSem old=127ns new=78.6ns
R=golang-dev, bradfitz, sameer, rsc
CC=golang-dev
https://golang.org/cl/5558049
|
|
To allow these types as map keys, we must fill in
equal and hash functions in their algorithm tables.
Structs or arrays that are "just memory", like [2]int,
can and do continue to use the AMEM algorithm.
Structs or arrays that contain special values like
strings or interface values use generated functions
for both equal and hash.
The runtime helper func runtime.equal(t, x, y) bool handles
the general equality case for x == y and calls out to
the equal implementation in the algorithm table.
For short values (<= 4 struct fields or array elements),
the sequence of elementwise comparisons is inlined
instead of calling runtime.equal.
R=ken, mpimenov
CC=golang-dev
https://golang.org/cl/5451105
|
|
Equality on structs will require arbitrary code for type equality,
so change algorithm in type data from uint8 to table pointer.
In the process, trim top-level map structure from
104/80 bytes (64-bit/32-bit) to 24/12.
Equality on structs will require being able to call code generated
by the Go compiler, and C code has no way to access Go return
values, so change the hash and equal algorithm functions to take
a pointer to a result instead of returning the result.
R=ken
CC=golang-dev
https://golang.org/cl/5453043
|