aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime
diff options
context:
space:
mode:
authoreric fang <eric.fang@arm.com>2020-02-20 06:57:11 +0000
committerIan Lance Taylor <iant@golang.org>2020-04-15 14:24:33 -0700
commit677ead3b349972bfa18fc87878dda4d3e87f6ddf (patch)
tree8de57c252a5df0c290ae04fb7345dc06a5c92a7d /libgo/runtime
parentd43919bf887530dfcbf85a76d60f1a698641731d (diff)
downloadgcc-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/runtime')
-rw-r--r--libgo/runtime/aeshash.c12
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);