[Pixman] [PATCH] Disable implementations mentioned in the PIXMAN_DISABLE environment variable.
Matt Turner
mattst88 at gmail.com
Sun Feb 26 14:09:25 PST 2012
On Sun, Feb 26, 2012 at 10:04 PM, Søren Sandmann <sandmann at cs.au.dk> wrote:
> From: Søren Sandmann Pedersen <ssp at redhat.com>
>
> With this, it becomes possible to do
>
> PIXMAN_DISABLE="sse2 mmx" some_app
>
> which will run some_app without SSE2 and MMX enabled. This is useful
> for benchmarking, testing and narrowing down bugs.
>
> The current list of implementations that can be disabled:
>
> fast
> mmx
> sse2
> arm-simd
> arm-neon
> mips-dspr2
> vmx
>
And arm-iwmmxt.
Looks good otherwise.
Reviewed-by: Matt Turner <mattst88 at gmail.com>
> The general and noop implementations can't be disabled because pixman
> depends on those being available for correct operation.
> ---
> pixman/pixman-cpu.c | 55 ++++++++++++++++++++++++++++++++++++++++----------
> 1 files changed, 44 insertions(+), 11 deletions(-)
>
> diff --git a/pixman/pixman-cpu.c b/pixman/pixman-cpu.c
> index fcf591a..bb97ae3 100644
> --- a/pixman/pixman-cpu.c
> +++ b/pixman/pixman-cpu.c
> @@ -24,6 +24,7 @@
> #endif
>
> #include <string.h>
> +#include <stdlib.h>
>
> #if defined(USE_ARM_SIMD) && defined(_MSC_VER)
> /* Needed for EXCEPTION_ILLEGAL_INSTRUCTION */
> @@ -328,7 +329,6 @@ pixman_arm_read_auxv_or_cpu_features ()
>
> #elif defined (__linux__) /* linux ELF */
>
> -#include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> @@ -711,51 +711,84 @@ pixman_have_sse2 (void)
> #endif /* __amd64__ */
> #endif
>
> +static pixman_bool_t
> +disabled (const char *name)
> +{
> + const char *env;
> +
> + if ((env = getenv ("PIXMAN_DISABLE")))
> + {
> + do
> + {
> + const char *end;
> + int len;
> +
> + if ((end = strchr (env, ' ')))
> + len = end - env;
> + else
> + len = strlen (env);
> +
> + if (strlen (name) == len && strncmp (name, env, len) == 0)
> + {
> + printf ("pixman: Disabled %s implementation\n", name);
> + return TRUE;
> + }
> +
> + env += len;
> + }
> + while (*env++);
> + }
> +
> + return FALSE;
> +}
> +
> pixman_implementation_t *
> _pixman_choose_implementation (void)
> {
> pixman_implementation_t *imp;
>
> imp = _pixman_implementation_create_general();
> - imp = _pixman_implementation_create_fast_path (imp);
> -
> +
> + if (!disabled ("fast"))
> + imp = _pixman_implementation_create_fast_path (imp);
> +
> #ifdef USE_X86_MMX
> - if (pixman_have_mmx ())
> + if (!disabled ("mmx") && pixman_have_mmx ())
> imp = _pixman_implementation_create_mmx (imp);
> #endif
>
> #ifdef USE_SSE2
> - if (pixman_have_sse2 ())
> + if (!disabled ("sse2") && pixman_have_sse2 ())
> imp = _pixman_implementation_create_sse2 (imp);
> #endif
>
> #ifdef USE_ARM_SIMD
> - if (pixman_have_arm_simd ())
> + if (!disabled ("arm-simd") && pixman_have_arm_simd ())
> imp = _pixman_implementation_create_arm_simd (imp);
> #endif
>
> #ifdef USE_ARM_IWMMXT
> - if (pixman_have_arm_iwmmxt ())
> + if (!disabled ("arm-iwmmxt") && pixman_have_arm_iwmmxt ())
> imp = _pixman_implementation_create_mmx (imp);
> #endif
>
> #ifdef USE_ARM_NEON
> - if (pixman_have_arm_neon ())
> + if (!disabled ("arm-neon") && pixman_have_arm_neon ())
> imp = _pixman_implementation_create_arm_neon (imp);
> #endif
>
> #ifdef USE_MIPS_DSPR2
> - if (pixman_have_mips_dspr2 ())
> + if (!disabled ("mips-dspr2") && pixman_have_mips_dspr2 ())
> imp = _pixman_implementation_create_mips_dspr2 (imp);
> #endif
>
> #ifdef USE_VMX
> - if (pixman_have_vmx ())
> + if (!disabled ("vmx") && pixman_have_vmx ())
> imp = _pixman_implementation_create_vmx (imp);
> #endif
>
> imp = _pixman_implementation_create_noop (imp);
> -
> +
> return imp;
> }
>
> --
> 1.6.0.6
>
More information about the Pixman
mailing list