1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-13 17:20:21 +02:00

Further accelerate sweeping

This commit is contained in:
Andy Wingo 2022-03-11 11:47:55 +01:00
parent f6ac9d2571
commit 01d3f9627e

View file

@ -318,8 +318,15 @@ static size_t next_mark(const uint8_t *mark, size_t limit) {
if (mark[n]) if (mark[n])
return n; return n;
uintptr_t *word_mark = (uintptr_t *)(mark + n); uintptr_t *word_mark = (uintptr_t *)(mark + n);
for (; n < limit; n += sizeof(uintptr_t), word_mark++) for (;
if (word_mark) 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; break;
for (; n < limit; n++) for (; n < limit; n++)
if (mark[n]) if (mark[n])