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])