Looks good, thanks.

Ethan

On Mon, Apr 16, 2012 at 17:18, Ben Pfaff <b...@nicira.com> wrote:
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
>  lib/hash.c |   17 +++++++++--------
>  1 files changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/lib/hash.c b/lib/hash.c
> index b3d9156..a77da7d 100644
> --- a/lib/hash.c
> +++ b/lib/hash.c
> @@ -16,6 +16,7 @@
>  #include <config.h>
>  #include "hash.h"
>  #include <string.h>
> +#include "unaligned.h"
>
>  /* Returns the hash of the 'n' 32-bit words at 'p', starting from 'basis'.
>  * 'p' must be properly aligned. */
> @@ -76,21 +77,21 @@ hash_bytes(const void *p_, size_t n, uint32_t basis)
>  {
>     const uint8_t *p = p_;
>     uint32_t a, b, c;
> -    uint32_t tmp[3];
>
>     a = b = c = 0xdeadbeef + n + basis;
>
> -    while (n >= sizeof tmp) {
> -        memcpy(tmp, p, sizeof tmp);
> -        a += tmp[0];
> -        b += tmp[1];
> -        c += tmp[2];
> +    while (n >= 12) {
> +        a += get_unaligned_u32((uint32_t *) p);
> +        b += get_unaligned_u32((uint32_t *) (p + 4));
> +        c += get_unaligned_u32((uint32_t *) (p + 8));
>         hash_mix(&a, &b, &c);
> -        n -= sizeof tmp;
> -        p += sizeof tmp;
> +        n -= 12;
> +        p += 12;
>     }
>
>     if (n) {
> +        uint32_t tmp[3];
> +
>         tmp[0] = tmp[1] = tmp[2] = 0;
>         memcpy(tmp, p, n);
>         a += tmp[0];
> --
> 1.7.9
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to