less instructions
This commit is contained in:
parent
53e5185360
commit
7c91a69bca
1 changed files with 4 additions and 5 deletions
|
@ -165,9 +165,7 @@ proc isOpaque*(data: var seq[ColorRGBX], start, len: int): bool =
|
||||||
|
|
||||||
var i = start
|
var i = start
|
||||||
when defined(amd64) and allowSimd:
|
when defined(amd64) and allowSimd:
|
||||||
let
|
let vec255 = mm_set1_epi32(cast[int32](uint32.high))
|
||||||
vec255 = mm_set1_epi32(cast[int32](uint32.high))
|
|
||||||
colorMask = mm_set1_epi32(cast[int32]([255.uint8, 255, 255, 0]))
|
|
||||||
for _ in start ..< (start + len) div 16:
|
for _ in start ..< (start + len) div 16:
|
||||||
let
|
let
|
||||||
values0 = mm_loadu_si128(data[i + 0].addr)
|
values0 = mm_loadu_si128(data[i + 0].addr)
|
||||||
|
@ -176,8 +174,9 @@ proc isOpaque*(data: var seq[ColorRGBX], start, len: int): bool =
|
||||||
values3 = mm_loadu_si128(data[i + 12].addr)
|
values3 = mm_loadu_si128(data[i + 12].addr)
|
||||||
values01 = mm_and_si128(values0, values1)
|
values01 = mm_and_si128(values0, values1)
|
||||||
values23 = mm_and_si128(values2, values3)
|
values23 = mm_and_si128(values2, values3)
|
||||||
values = mm_or_si128(mm_and_si128(values01, values23), colorMask)
|
values = mm_and_si128(values01, values23)
|
||||||
if mm_movemask_epi8(mm_cmpeq_epi8(values, vec255)) != 0xffff:
|
eq = mm_cmpeq_epi8(values, vec255)
|
||||||
|
if (mm_movemask_epi8(eq) and 0x00008888) != 0x00008888:
|
||||||
return false
|
return false
|
||||||
i += 16
|
i += 16
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue