[Go] Unroll WriteUint64 and WriteInt64.
This enables both WriteUint64 and WriteInt64 to both be inlined as well as implemented with a single assembly instruction. The current Go compiler refuses to inline functions with for loops. The compiler is also not smart enough to produce a single assembly instruction for the for-loop.
This commit is contained in:
parent
b188fde27e
commit
e2eb6af3e3
22
go/encode.go
22
go/encode.go
|
@ -159,9 +159,14 @@ func WriteUint32(buf []byte, n uint32) {
|
||||||
|
|
||||||
// WriteUint64 encodes a little-endian uint64 into a byte slice.
|
// WriteUint64 encodes a little-endian uint64 into a byte slice.
|
||||||
func WriteUint64(buf []byte, n uint64) {
|
func WriteUint64(buf []byte, n uint64) {
|
||||||
for i := uint(0); i < uint(SizeUint64); i++ {
|
buf[0] = byte(n)
|
||||||
buf[i] = byte(n >> (i * 8))
|
buf[1] = byte(n >> 8)
|
||||||
}
|
buf[2] = byte(n >> 16)
|
||||||
|
buf[3] = byte(n >> 24)
|
||||||
|
buf[4] = byte(n >> 32)
|
||||||
|
buf[5] = byte(n >> 40)
|
||||||
|
buf[6] = byte(n >> 48)
|
||||||
|
buf[7] = byte(n >> 56)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteInt8 encodes a little-endian int8 into a byte slice.
|
// WriteInt8 encodes a little-endian int8 into a byte slice.
|
||||||
|
@ -185,9 +190,14 @@ func WriteInt32(buf []byte, n int32) {
|
||||||
|
|
||||||
// WriteInt64 encodes a little-endian int64 into a byte slice.
|
// WriteInt64 encodes a little-endian int64 into a byte slice.
|
||||||
func WriteInt64(buf []byte, n int64) {
|
func WriteInt64(buf []byte, n int64) {
|
||||||
for i := uint(0); i < uint(SizeInt64); i++ {
|
buf[0] = byte(n)
|
||||||
buf[i] = byte(n >> (i * 8))
|
buf[1] = byte(n >> 8)
|
||||||
}
|
buf[2] = byte(n >> 16)
|
||||||
|
buf[3] = byte(n >> 24)
|
||||||
|
buf[4] = byte(n >> 32)
|
||||||
|
buf[5] = byte(n >> 40)
|
||||||
|
buf[6] = byte(n >> 48)
|
||||||
|
buf[7] = byte(n >> 56)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteFloat32 encodes a little-endian float32 into a byte slice.
|
// WriteFloat32 encodes a little-endian float32 into a byte slice.
|
||||||
|
|
Loading…
Reference in New Issue