The region validate() code is frequently called by cairo as it is used to
extract regions from the trapezoids for fast-paths through the drawing
code and also for fast-path clipping and the RegionInfo allocation (as
well as the pixman_rect_alloc during the final union) appears as a hot
spot on application memory profiles.
Various pieces of code expect PIXMAN_FORMAT_COLOR (and its less cool older
brother, PICT_FORMAT_COLOR) formats to have ARGB bits, and the YUV formats do
not.
fbCompositeSrcAdd_8000x8000arm() tries to align 'dst' already but must check
'src' too. Otherwise, the next 4-byte copy loop might access an odd 'src' address
causing an alignment trap.
Patch from Enrico Scholz
Add a special case for a source transformation that is only a scale and
preserves rectangular pixels and doesn't rotate the image. Currently, only
SOURCE is special cased, however I plan to do more work in this area as needed.
The biggest advantage the specialization currently has is writing directly to
the destination surface instead of a temporary scanline buffer. However, it is
still pretty unoptimized but I want to keep things simple for now.
Change the type of the stack based scanline buffer to uint8_t to match the rest
of the variables. Also premultiply the scanline buffer size by sizeof(uint32_t)
because the bpp can be either sizeof(uint32_t) or sizeof(uint64_t).
'and r7, %[upper_component_mask]' appears to by a short hand for
'and r7, %[upper_component_mask], %[upper_component_mask]'. Use
the explicit form to avoid any confusion.
This code is only for CPUs supporting the SIMD instructions, not for all ARM
CPUs.
I stumbled above the recent commit with the ARM SIMD code while preparing a
patch that models the patch from #13445 after the MMX and SSE2 cases:
The ARM SIMD option currently uses --disable-arm, although this code is only
for CPUs >= ARMv6. That's as if one would call the option to disable the SSE2
code --disable-x86.
This patch therefore renames the configure option and the function and file
names to arm-simd/arm_simd.
Replace all inline definitions with a common one in pixman-private.h. Also, add
'force_inline' and replace all existing uses of 'inline' as a forced inline
with 'force_inline'.
The previous code assumed a color format of ABGR when naming the
variables. The true color format is ARGB. This did not cause any bugs
because no functions rely on the order of colors so far. This patch
renames the variables just to avoid confusion.
The "fbComposeSetupSSE2()" function is guarding most of its code
depending on the capabilities of the CPU, but unfortunately the call
to "_mm_empty()" is not part of this code path but executed
unconditionally. This results in a "illegal instruction" crash on
non-MMX / non-SSE capable CPUs caused by the the "emms" instruction
(embedded in "_mm_empty()").
Fix bug 17729.