summaryrefslogtreecommitdiff
path: root/snappy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'snappy.cc')
-rw-r--r--snappy.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/snappy.cc b/snappy.cc
index 7d0ff71..632ab85 100644
--- a/snappy.cc
+++ b/snappy.cc
@@ -80,6 +80,7 @@ using internal::V128_Load;
using internal::V128_LoadU;
using internal::V128_Shuffle;
using internal::V128_StoreU;
+using internal::V128_DupChar;
#endif
// We translate the information encoded in a tag through a lookup table to a
@@ -308,7 +309,12 @@ static inline bool Copy64BytesWithPatternExtension(char* dst, size_t offset) {
case 0:
return false;
case 1: {
- std::memset(dst, dst[-1], 64);
+ // TODO: Ideally we should memset, move back once the
+ // codegen issues are fixed.
+ V128 pattern = V128_DupChar(dst[-1]);
+ for (int i = 0; i < 4; i++) {
+ V128_StoreU(reinterpret_cast<V128*>(dst + 16 * i), pattern);
+ }
return true;
}
case 2: