aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTyler J. Stachecki <[email protected]>2016-06-23 23:32:40 -0400
committerBrian Behlendorf <[email protected]>2016-07-15 10:42:35 -0700
commit35a76a0366372d89a0f1ac3cebd5bc7646aadec3 (patch)
treec5a736ca9254afde0f65a0991efd9da216fa112a /include
parentdfbc86309fd8ebb70a55cafa876320dc1ea8e833 (diff)
Implementation of SSE optimized Fletcher-4
Builds off of 1eeb4562 (Implementation of AVX2 optimized Fletcher-4) This commit adds another implementation of the Fletcher-4 algorithm. It is automatically selected at module load if it benchmarks higher than all other available implementations. The module benchmark was also amended to analyze the performance of the byteswap-ed version of Fletcher-4, as well as the non-byteswaped version. The average performance of the two is used to select the the fastest implementation available on the host system. Adds a pair of fields to an existing zcommon module parameter: - zfs_fletcher_4_impl (str) "sse2" - new SSE2 implementation if available "ssse3" - new SSSE3 implementation if available Signed-off-by: Tyler J. Stachecki <[email protected]> Signed-off-by: Gvozden Neskovic <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #4789
Diffstat (limited to 'include')
-rw-r--r--include/zfs_fletcher.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/zfs_fletcher.h b/include/zfs_fletcher.h
index 4ccb4a2f4..afc3936c0 100644
--- a/include/zfs_fletcher.h
+++ b/include/zfs_fletcher.h
@@ -61,6 +61,14 @@ typedef struct fletcher_4_func {
const char *name;
} fletcher_4_ops_t;
+#if defined(HAVE_SSE2)
+extern const fletcher_4_ops_t fletcher_4_sse2_ops;
+#endif
+
+#if defined(HAVE_SSE2) && defined(HAVE_SSSE3)
+extern const fletcher_4_ops_t fletcher_4_ssse3_ops;
+#endif
+
#if defined(HAVE_AVX) && defined(HAVE_AVX2)
extern const fletcher_4_ops_t fletcher_4_avx2_ops;
#endif