• Lynn Boger's avatar
    bytes: improve performance for bytes.Compare on ppc64x · 1e28dce8
    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: 's avatarDavid Chase <drchase@google.com>
    1e28dce8
a.out.go 10.4 KB