re PR go/52342 (64-bit go.test/test/chan/doubleselect.go times out on Solaris/SPARC)
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 5 Mar 2012 06:39:08 +0000 (06:39 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 5 Mar 2012 06:39:08 +0000 (06:39 +0000)
PR go/52342
runtime: Better big-endian identity hash function.

From-SVN: r184914

libgo/runtime/go-type-identity.c

index 142edf424640614456a644fa2624b6540dae5c87..a50a8a131a1305ed55620452a7f2977f2a064500 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 
+#include "config.h"
 #include "go-type.h"
 
 /* The 64-bit type.  */
@@ -31,7 +32,11 @@ __go_type_hash_identity (const void *key, uintptr_t key_size)
        unsigned char a[8];
       } u;
       u.v = 0;
-      __builtin_memcpy (&u.a, key, key_size);
+#ifdef WORDS_BIGENDIAN
+      __builtin_memcpy (&u.a[8 - key_size], key, key_size);
+#else
+      __builtin_memcpy (&u.a[0], key, key_size);
+#endif
       if (sizeof (uintptr_t) >= 8)
        return (uintptr_t) u.v;
       else