aboutsummaryrefslogtreecommitdiff
path: root/pixman/pixman/pixman-cpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'pixman/pixman/pixman-cpu.c')
-rw-r--r--pixman/pixman/pixman-cpu.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/pixman/pixman/pixman-cpu.c b/pixman/pixman/pixman-cpu.c
index 70253d1ea..0e14ecb6f 100644
--- a/pixman/pixman/pixman-cpu.c
+++ b/pixman/pixman/pixman-cpu.c
@@ -576,28 +576,36 @@ pixman_have_sse2 (void)
pixman_implementation_t *
_pixman_choose_implementation (void)
{
-#ifdef USE_SSE2
- if (pixman_have_sse2 ())
- return _pixman_implementation_create_sse2 ();
-#endif
+ pixman_implementation_t *imp;
+
+ imp = _pixman_implementation_create_general();
+ imp = _pixman_implementation_create_fast_path (imp);
+
#ifdef USE_MMX
if (pixman_have_mmx ())
- return _pixman_implementation_create_mmx ();
+ imp = _pixman_implementation_create_mmx (imp);
#endif
-#ifdef USE_ARM_NEON
- if (pixman_have_arm_neon ())
- return _pixman_implementation_create_arm_neon ();
+#ifdef USE_SSE2
+ if (pixman_have_sse2 ())
+ imp = _pixman_implementation_create_sse2 (imp);
#endif
+
#ifdef USE_ARM_SIMD
if (pixman_have_arm_simd ())
- return _pixman_implementation_create_arm_simd ();
+ imp = _pixman_implementation_create_arm_simd (imp);
+#endif
+
+#ifdef USE_ARM_NEON
+ if (pixman_have_arm_neon ())
+ imp = _pixman_implementation_create_arm_neon (imp);
#endif
+
#ifdef USE_VMX
if (pixman_have_vmx ())
- return _pixman_implementation_create_vmx ();
+ imp = _pixman_implementation_create_vmx (imp);
#endif
- return _pixman_implementation_create_fast_path ();
+ return imp;
}