aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-03-05 06:39:08 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-03-05 06:39:08 +0000
commit5e60b5708e2184c7ca0cb5bab995248d185a7bac (patch)
treeda22a7e051bf39bc7d2f04bf8bae6456b8b0f3df /libgo
parentdbe1e4a5a679295a1eeb1dc4b1d56acd0d3614d7 (diff)
downloadgcc-5e60b5708e2184c7ca0cb5bab995248d185a7bac.zip
gcc-5e60b5708e2184c7ca0cb5bab995248d185a7bac.tar.gz
gcc-5e60b5708e2184c7ca0cb5bab995248d185a7bac.tar.bz2
re PR go/52342 (64-bit go.test/test/chan/doubleselect.go times out on Solaris/SPARC)
PR go/52342 runtime: Better big-endian identity hash function. From-SVN: r184914
Diffstat (limited to 'libgo')
-rw-r--r--libgo/runtime/go-type-identity.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libgo/runtime/go-type-identity.c b/libgo/runtime/go-type-identity.c
index 142edf4..a50a8a1 100644
--- a/libgo/runtime/go-type-identity.c
+++ b/libgo/runtime/go-type-identity.c
@@ -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