wingo pushed a commit to branch wip-whippet
in repository guile.

commit 01d3f9627e14d1932b99108f9bdbcce390337107
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Fri Mar 11 11:47:55 2022 +0100

    Further accelerate sweeping
---
 mark-sweep.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/mark-sweep.h b/mark-sweep.h
index b7cc7b610..0920821db 100644
--- a/mark-sweep.h
+++ b/mark-sweep.h
@@ -318,8 +318,15 @@ static size_t next_mark(const uint8_t *mark, size_t limit) 
{
     if (mark[n])
       return n;
   uintptr_t *word_mark = (uintptr_t *)(mark + n);
-  for (; n < limit; n += sizeof(uintptr_t), word_mark++)
-    if (word_mark)
+  for (;
+       n + sizeof(uintptr_t) * 4 <= limit;
+       n += sizeof(uintptr_t) * 4, word_mark += 4)
+    if (word_mark[0] | word_mark[1] | word_mark[2] | word_mark[3])
+      break;
+  for (;
+       n + sizeof(uintptr_t) <= limit;
+       n += sizeof(uintptr_t), word_mark += 1)
+    if (word_mark[0])
       break;
   for (; n < limit; n++)
     if (mark[n])

Reply via email to