From 50621aec50fdc78536222890af1934f9b0651fc0 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Sun, 28 Nov 2021 03:08:25 -0600 Subject: [PATCH] faster packAlphaValues, better test --- src/pixie/internal.nim | 19 ++++--------------- tests/test_images.nim | 2 +- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/pixie/internal.nim b/src/pixie/internal.nim index c46af28..4a19cf1 100644 --- a/src/pixie/internal.nim +++ b/src/pixie/internal.nim @@ -105,18 +105,7 @@ when defined(amd64) and not defined(pixieNoSimd): proc unpackAlphaValues*(v: M128i): M128i {.inline, raises: [].} = ## Unpack the first 32 bits into 4 rgba(0, 0, 0, value) - let mask = cast[M128i]([uint8.high.uint64, 0]) - - var - i = mm_and_si128(v, mask) - j = mm_and_si128(v, mm_slli_si128(mask, 1)) - k = mm_and_si128(v, mm_slli_si128(mask, 2)) - l = mm_and_si128(v, mm_slli_si128(mask, 3)) - - # Shift the values to uint32 `a` - i = mm_slli_si128(i, 3) - j = mm_slli_si128(j, 6) - k = mm_slli_si128(k, 9) - l = mm_slli_si128(l, 12) - - result = mm_or_si128(mm_or_si128(i, j), mm_or_si128(k, l)) + let + a = mm_unpacklo_epi8(v, mm_setzero_si128()) + b = mm_unpacklo_epi8(a, mm_setzero_si128()) + result = mm_slli_epi32(b, 24) # Shift the values to uint32 `a` diff --git a/tests/test_images.nim b/tests/test_images.nim index 8d5ad7e..2e471d7 100644 --- a/tests/test_images.nim +++ b/tests/test_images.nim @@ -145,7 +145,7 @@ block: # Test conversion between image and mask originalMask = newMask(100, 100) let p = newPath() - p.rect(10, 10, 80, 80) + p.circle(50, 50, 25) originalImage.fillPath(p, rgba(255, 0, 0, 255)) originalMask.fillPath(p)