This commit is contained in:
Ryan Oldenburg 2022-06-15 14:26:47 -05:00
parent 4c100a2554
commit 1493634920

View file

@ -65,11 +65,15 @@ proc fillUnsafe*(
else:
var i = start
when defined(amd64) and allowSimd:
# Align to 16 bytes
while (cast[uint](data[i].addr) and 15) != 0:
data[i] = rgbx
inc i
# When supported, SIMD fill until we run out of room
let colorVec = mm_set1_epi32(cast[int32](rgbx))
for _ in 0 ..< len div 8:
mm_storeu_si128(data[i + 0].addr, colorVec)
mm_storeu_si128(data[i + 4].addr, colorVec)
mm_store_si128(data[i + 0].addr, colorVec)
mm_store_si128(data[i + 4].addr, colorVec)
i += 8
else:
when sizeof(int) == 8: