runtime: use 64 bits of hash seed on arm64
authoreric fang <eric.fang@arm.com>
Thu, 20 Feb 2020 06:57:11 +0000 (06:57 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 15 Apr 2020 21:24:33 +0000 (14:24 -0700)
This is the same issue as #33960, but on gofrontend.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/220297

gcc/go/gofrontend/MERGE
libgo/runtime/aeshash.c

index 138425a19d26018113042eb3803c99c9205ddd38..7b382cf47b84cbef10f494a1cb2a0fa3adf4204b 100644 (file)
@@ -1,4 +1,4 @@
-89fbf55a409d37ae898e5c4ea4250035f86bed1b
+0fe7a277c5d22265a73a4d216bd5d81799634453
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 00658d7a8962550b5ab808c84e986e2f1f3288ed..93f28fd6125ccd34d72023f6dd4b70066d5c1778 100644 (file)
@@ -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);