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.