diff options
author | eric fang <eric.fang@arm.com> | 2020-02-20 06:57:11 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-04-15 14:24:33 -0700 |
commit | 677ead3b349972bfa18fc87878dda4d3e87f6ddf (patch) | |
tree | 8de57c252a5df0c290ae04fb7345dc06a5c92a7d /libgo | |
parent | d43919bf887530dfcbf85a76d60f1a698641731d (diff) | |
download | gcc-677ead3b349972bfa18fc87878dda4d3e87f6ddf.zip gcc-677ead3b349972bfa18fc87878dda4d3e87f6ddf.tar.gz gcc-677ead3b349972bfa18fc87878dda4d3e87f6ddf.tar.bz2 |
runtime: use 64 bits of hash seed on arm64
This is the same issue as #33960, but on gofrontend.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/220297
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/runtime/aeshash.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libgo/runtime/aeshash.c b/libgo/runtime/aeshash.c index 00658d7..93f28fd 100644 --- a/libgo/runtime/aeshash.c +++ b/libgo/runtime/aeshash.c @@ -596,7 +596,7 @@ uintptr aeshashbody(void* p, uintptr seed, uintptr size, Slice aeskeysched) { uintptr aeshashbody(void* p, uintptr seed, uintptr size, Slice aeskeysched) { uint8x16_t *pseed; - uint32x4_t vinit32; + uint64x2_t vinit64; uint8x16_t vinit; uint8x16_t vseed, vseed2, vseed3, vseed4; uint8x16_t vseed5, vseed6, vseed7, vseed8; @@ -610,10 +610,10 @@ uintptr aeshashbody(void* p, uintptr seed, uintptr size, Slice aeskeysched) { pseed = (uint8x16_t*)(aeskeysched.__values); // Combined hash seed and length. - vinit32 = vdupq_n_u32(0); - vinit32[0] = (uint32)seed; - vinit32[1] = (uint32)size; - vinit = vreinterpretq_u8_u32(vinit32); + vinit64 = vdupq_n_u64(0); + vinit64[0] = (uint64)seed; + vinit64[1] = (uint64)size; + vinit = vreinterpretq_u8_u64(vinit64); // Mix in per-process seed. vseed = vaeseq_u8(*pseed, vinit); @@ -626,7 +626,7 @@ uintptr aeshashbody(void* p, uintptr seed, uintptr size, Slice aeskeysched) { // Return 64 bits of scrambled input seed. return vreinterpretq_u64_u8(vseed)[0]; } else if (size < 16) { - vval = vreinterpretq_u8_u32(vdupq_n_u32(0)); + vval = vreinterpretq_u8_u64(vdupq_n_u64(0)); if ((size & 8) != 0) { vval = vreinterpretq_u8_u64(vld1q_lane_u64((uint64_t*)(p), vreinterpretq_u64_u8(vval), 0)); p = (void*)((uint64_t*)(p) + 1); |