template <typename T> staticvoid memsetT(T buffer[], T value, int count) { #ifdefined(SK_CPU_SSE_LEVEL) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_AVX static constexpr int VecSize = 32 / sizeof(T); #else static constexpr int VecSize = 16 / sizeof(T); #endif
static_assert(VecSize > 0, "T is too big for memsetT"); // Create an vectorized version of value
skvx::Vec<VecSize,T> wideValue(value); while (count >= VecSize) { // Copy the value into the destination buffer (VecSize elements at a time)
wideValue.store(buffer);
buffer += VecSize;
count -= VecSize;
} // If count was not an even multiple of VecSize, take care of the last few. while (count-- > 0) {
*buffer++ = value;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.