This might have been a good idea 20 years ago but in this day and age
the compiler is probably better at unrolling loops.

OK?

diff --git engine.c engine.c
index 9f94bf177ff..330c2725ae0 100644
--- engine.c
+++ engine.c
@@ -1262,6 +1262,7 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix 
*prefix, struct
        SHA2_CTX ctx;
        struct in6_addr iid;
        int dad_counter = 0; /* XXX not used */
+       int i;
        u_int8_t digest[SHA512_DIGEST_LENGTH];
 
        memset(&iid, 0, sizeof(iid));
@@ -1280,14 +1281,9 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix 
*prefix, struct
        memcpy(&addr_proposal->addr.sin6_addr, &prefix->prefix,
            sizeof(addr_proposal->addr.sin6_addr));
 
-       addr_proposal->addr.sin6_addr.s6_addr32[0] &=
-           addr_proposal->mask.s6_addr32[0];
-       addr_proposal->addr.sin6_addr.s6_addr32[1] &=
-           addr_proposal->mask.s6_addr32[1];
-       addr_proposal->addr.sin6_addr.s6_addr32[2] &=
-           addr_proposal->mask.s6_addr32[2];
-       addr_proposal->addr.sin6_addr.s6_addr32[3] &=
-           addr_proposal->mask.s6_addr32[3];
+       for (i=0; i < 4; i++)
+               addr_proposal->addr.sin6_addr.s6_addr32[i] &=
+                   addr_proposal->mask.s6_addr32[i];
 
        if (privacy) {
                arc4random_buf(&iid.s6_addr, sizeof(iid.s6_addr));
@@ -1310,14 +1306,9 @@ gen_addr(struct slaacd_iface *iface, struct radv_prefix 
*prefix, struct
                    sizeof(iid.s6_addr));
        }
 
-       addr_proposal->addr.sin6_addr.s6_addr32[0] |=
-           (iid.s6_addr32[0] & ~addr_proposal->mask.s6_addr32[0]);
-       addr_proposal->addr.sin6_addr.s6_addr32[1] |=
-           (iid.s6_addr32[1] & ~addr_proposal->mask.s6_addr32[1]);
-       addr_proposal->addr.sin6_addr.s6_addr32[2] |=
-           (iid.s6_addr32[2] & ~addr_proposal->mask.s6_addr32[2]);
-       addr_proposal->addr.sin6_addr.s6_addr32[3] |=
-           (iid.s6_addr32[3] & ~addr_proposal->mask.s6_addr32[3]);
+       for (i=0; i < 4; i++)
+               addr_proposal->addr.sin6_addr.s6_addr32[i] |=
+                   (iid.s6_addr32[i] & ~addr_proposal->mask.s6_addr32[i]);
 #undef s6_addr32
 }
 

-- 
I'm not entirely sure you are real.

Reply via email to