about summary refs log tree commit diff
path: root/sysdeps/tile/tilegx
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/tile/tilegx')
-rw-r--r--sysdeps/tile/tilegx/string-endian.h11
1 files changed, 5 insertions, 6 deletions
diff --git a/sysdeps/tile/tilegx/string-endian.h b/sysdeps/tile/tilegx/string-endian.h
index 0c4d51766d..47333891e0 100644
--- a/sysdeps/tile/tilegx/string-endian.h
+++ b/sysdeps/tile/tilegx/string-endian.h
@@ -36,12 +36,11 @@
 #define REVCZ(x) __insn_ctz(x)
 #endif
 
-/* Create eight copies of the byte in a uint64_t. */
+/* Create eight copies of the byte in a uint64_t.  Byte Shuffle uses
+   the bytes of srcB as the index into the dest vector to select a
+   byte.  With all indices of zero, the first byte is copied into all
+   the other bytes.  */
 static inline uint64_t copy_byte(uint8_t byte)
 {
-  uint64_t word = byte;
-  word = __insn_bfins(word, word, 8, 15);
-  word = __insn_bfins(word, word, 16, 31);
-  word = __insn_bfins(word, word, 32, 63);
-  return word;
+  return __insn_shufflebytes(byte, 0, 0);
 }