lib: optimize apply_mask_ipv6()
diff --git a/lib/prefix.c b/lib/prefix.c
index 1ddbbbe..c8fd0bd 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -660,23 +660,13 @@
 void
 apply_mask_ipv6 (struct prefix_ipv6 *p)
 {
-  u_char *pnt;
-  int index;
-  int offset;
-
-  index = p->prefixlen / 8;
-
-  if (index < 16)
-    {
-      pnt = (u_char *) &p->prefix;
-      offset = p->prefixlen % 8;
-
-      pnt[index] &= maskbit[offset];
-      index++;
-
-      while (index < 16)
-	pnt[index++] = 0;
-    }
+  assert (p->prefixlen >= 0 && p->prefixlen <= IPV6_MAX_BITLEN);
+  u_int32_t *addr_word = (u_int32_t *) &p->prefix;
+  u_int32_t *mask_word = (u_int32_t *) (maskbytes6 + p->prefixlen);
+  *addr_word++ &= *mask_word++;
+  *addr_word++ &= *mask_word++;
+  *addr_word++ &= *mask_word++;
+  *addr_word &= *mask_word;
 }
 
 void