OSDN Git Service

buffer_is_zero: use vector optimizations if possible
authorPeter Lieven <pl@kamp.de>
Tue, 26 Mar 2013 09:58:33 +0000 (10:58 +0100)
committerJuan Quintela <quintela@redhat.com>
Tue, 26 Mar 2013 12:32:32 +0000 (13:32 +0100)
performance gain on SSE2 is approx. 20-25%. altivec
is not tested. performance for unsigned long arithmetic
is unchanged.

Signed-off-by: Peter Lieven <pl@kamp.de>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
util/cutils.c

index 0696a3b..5024253 100644 (file)
@@ -215,6 +215,11 @@ bool buffer_is_zero(const void *buf, size_t len)
     long d0, d1, d2, d3;
     const long * const data = buf;
 
+    /* use vector optimized zero check if possible */
+    if (can_use_buffer_find_nonzero_offset(buf, len)) {
+        return buffer_find_nonzero_offset(buf, len) == len;
+    }
+
     assert(len % (4 * sizeof(long)) == 0);
     len /= sizeof(long);