void ConservativeRoots::genericAddSpan(void* begin, void* end, MarkHook& markHook) { ASSERT(begin <= end); ASSERT((static_cast<char*>(end) - static_cast<char*>(begin)) < 0x1000000); ASSERT(isPointerAligned(begin)); ASSERT(isPointerAligned(end)); TinyBloomFilter filter = m_blocks->filter(); // Make a local copy of filter to show the compiler it won't alias, and can be register-allocated. for (char** it = static_cast<char**>(begin); it != static_cast<char**>(end); ++it) genericAddPointer(*it, filter, markHook); }
void ConservativeRoots::genericAddSpan(void* begin, void* end, MarkHook& markHook) { if (begin > end) { void* swapTemp = begin; begin = end; end = swapTemp; } RELEASE_ASSERT(isPointerAligned(begin)); RELEASE_ASSERT(isPointerAligned(end)); TinyBloomFilter filter = m_blocks->filter(); // Make a local copy of filter to show the compiler it won't alias, and can be register-allocated. for (char** it = static_cast<char**>(begin); it != static_cast<char**>(end); ++it) genericAddPointer(*it, filter, markHook); }