Temporarily disable SIMD on aarch64 until upstream #97 is fixed, Add NEON fix for ARMv7
This commit is contained in:
		
							parent
							
								
									81c58f0640
								
							
						
					
					
						commit
						7e72dfb78e
					
				
							
								
								
									
										111
									
								
								libjpeg-turbo-arm-neon.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								libjpeg-turbo-arm-neon.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | ||||
| From 9055fb408dcb585ce9392d395e16630d51002152 Mon Sep 17 00:00:00 2001 | ||||
| From: DRC <information@libjpeg-turbo.org> | ||||
| Date: Thu, 7 Jul 2016 13:10:30 -0500 | ||||
| Subject: [PATCH] ARM/MIPS: Change the behavior of JSIMD_FORCE* | ||||
| 
 | ||||
| The JSIMD_FORCE* environment variables previously meant "force the use | ||||
| of this instruction set if it is available but others are available as | ||||
| well", but that did nothing on ARM platforms, since there is only ever | ||||
| one instruction set available.  Since the ARM and MIPS CPU feature | ||||
| detection code is less than bulletproof, and since there is only one | ||||
| SIMD instruction set (currently) supported on those platforms, it makes | ||||
| sense for the JSIMD_FORCE* environment variables on those platforms to | ||||
| actually force the use of the SIMD instruction set, thus bypassing the | ||||
| CPU feature detection code. | ||||
| 
 | ||||
| This addresses a concern raised in #88 whereby parsing /proc/cpuinfo | ||||
| didn't work within a QEMU environment.  This at least provides a | ||||
| workaround, allowing users to force-enable or force-disable SIMD | ||||
| instructions for ARM and MIPS builds of libjpeg-turbo. | ||||
| ---
 | ||||
|  ChangeLog.md       | 23 +++++++++++++++++++++++ | ||||
|  simd/jsimd_arm.c   |  2 +- | ||||
|  simd/jsimd_arm64.c |  2 +- | ||||
|  simd/jsimd_mips.c  | 10 +++++++++- | ||||
|  4 files changed, 34 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/ChangeLog.md b/ChangeLog.md
 | ||||
| index 0691ccc..9653471 100644
 | ||||
| --- a/ChangeLog.md
 | ||||
| +++ b/ChangeLog.md
 | ||||
| @@ -1,3 +1,26 @@
 | ||||
| +1.5.1
 | ||||
| +=====
 | ||||
| +
 | ||||
| +### Significant changes relative to 1.5.0:
 | ||||
| +
 | ||||
| +1. Previously, the undocumented `JSIMD_FORCE*` environment variables could be
 | ||||
| +used to force-enable a particular SIMD instruction set if multiple instruction
 | ||||
| +sets were available on a particular platform.  On x86 platforms, where CPU
 | ||||
| +feature detection is bulletproof and multiple SIMD instruction sets are
 | ||||
| +available, it makes sense for those environment variables to allow forcing the
 | ||||
| +use of an instruction set only if that instruction set is available.  However,
 | ||||
| +since the ARM implementations of libjpeg-turbo can only use one SIMD
 | ||||
| +instruction set, and since their feature detection code is less bulletproof
 | ||||
| +(parsing /proc/cpuinfo), it makes sense for the `JSIMD_FORCENEON` environment
 | ||||
| +variable to bypass the feature detection code and really force the use of NEON
 | ||||
| +instructions.  A new environment variable (`JSIMD_FORCEDSPR2`) was introduced
 | ||||
| +in the MIPS implementation for the same reasons, and the existing
 | ||||
| +`JSIMD_FORCENONE` environment variable was extended to that implementation.
 | ||||
| +These environment variables provide a workaround for those attempting to test
 | ||||
| +ARM and MIPS builds of libjpeg-turbo in QEMU, which passes through
 | ||||
| +/proc/cpuinfo from the host system.
 | ||||
| +
 | ||||
| +
 | ||||
|  1.5.0 | ||||
|  ===== | ||||
|   | ||||
| diff --git a/simd/jsimd_arm.c b/simd/jsimd_arm.c
 | ||||
| index 754806d..61cd073 100644
 | ||||
| --- a/simd/jsimd_arm.c
 | ||||
| +++ b/simd/jsimd_arm.c
 | ||||
| @@ -125,7 +125,7 @@ init_simd (void)
 | ||||
|    /* Force different settings through environment variables */ | ||||
|    env = getenv("JSIMD_FORCENEON"); | ||||
|    if ((env != NULL) && (strcmp(env, "1") == 0)) | ||||
| -    simd_support &= JSIMD_ARM_NEON;
 | ||||
| +    simd_support = JSIMD_ARM_NEON;
 | ||||
|    env = getenv("JSIMD_FORCENONE"); | ||||
|    if ((env != NULL) && (strcmp(env, "1") == 0)) | ||||
|      simd_support = 0; | ||||
| diff --git a/simd/jsimd_arm64.c b/simd/jsimd_arm64.c
 | ||||
| index 7def8f9..09449bb 100644
 | ||||
| --- a/simd/jsimd_arm64.c
 | ||||
| +++ b/simd/jsimd_arm64.c
 | ||||
| @@ -142,7 +142,7 @@ init_simd (void)
 | ||||
|    /* Force different settings through environment variables */ | ||||
|    env = getenv("JSIMD_FORCENEON"); | ||||
|    if ((env != NULL) && (strcmp(env, "1") == 0)) | ||||
| -    simd_support &= JSIMD_ARM_NEON;
 | ||||
| +    simd_support = JSIMD_ARM_NEON;
 | ||||
|    env = getenv("JSIMD_FORCENONE"); | ||||
|    if ((env != NULL) && (strcmp(env, "1") == 0)) | ||||
|      simd_support = 0; | ||||
| diff --git a/simd/jsimd_mips.c b/simd/jsimd_mips.c
 | ||||
| index 358bbb8..63b8115 100644
 | ||||
| --- a/simd/jsimd_mips.c
 | ||||
| +++ b/simd/jsimd_mips.c
 | ||||
| @@ -2,7 +2,7 @@
 | ||||
|   * jsimd_mips.c | ||||
|   * | ||||
|   * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB | ||||
| - * Copyright (C) 2009-2011, 2014, D. R. Commander.
 | ||||
| + * Copyright (C) 2009-2011, 2014, 2016, D. R. Commander.
 | ||||
|   * Copyright (C) 2013-2014, MIPS Technologies, Inc., California. | ||||
|   * Copyright (C) 2015, Matthieu Darbois. | ||||
|   * | ||||
| @@ -77,6 +77,14 @@ init_simd (void)
 | ||||
|    if (!parse_proc_cpuinfo("MIPS 74K")) | ||||
|      return; | ||||
|  #endif | ||||
| +
 | ||||
| +  /* Force different settings through environment variables */
 | ||||
| +  env = getenv("JSIMD_FORCEDSPR2");
 | ||||
| +  if ((env != NULL) && (strcmp(env, "1") == 0))
 | ||||
| +    simd_support = JSIMD_MIPS_DSPR2;
 | ||||
| +  env = getenv("JSIMD_FORCENONE");
 | ||||
| +  if ((env != NULL) && (strcmp(env, "1") == 0))
 | ||||
| +    simd_support = 0;
 | ||||
|  } | ||||
|   | ||||
|  static const int mips_idct_ifast_coefs[4] = { | ||||
| @ -1,6 +1,6 @@ | ||||
| Name:           libjpeg-turbo | ||||
| Version:        1.5.0 | ||||
| Release:        2%{?dist} | ||||
| Release:        3%{?dist} | ||||
| Summary:        A MMX/SSE2/SIMD accelerated library for manipulating JPEG image files | ||||
| License:        IJG | ||||
| URL:            http://sourceforge.net/projects/libjpeg-turbo | ||||
| @ -9,6 +9,7 @@ Source0:        http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar. | ||||
| Patch0:         libjpeg-turbo14-noinst.patch | ||||
| Patch1:         libjpeg-turbo-header-files.patch | ||||
| Patch2:         libjpeg-turbo-aarch64.patch | ||||
| Patch3:         libjpeg-turbo-arm-neon.patch | ||||
| 
 | ||||
| BuildRequires:  autoconf | ||||
| BuildRequires:  automake | ||||
| @ -73,11 +74,17 @@ manipulate JPEG files using the TurboJPEG library. | ||||
| %patch0 -p1 -b .noinst | ||||
| %patch1 -p1 -b .header-files | ||||
| %patch2 -p1 -b .aarch64 | ||||
| %patch3 -p1 -b .neon | ||||
| 
 | ||||
| %build | ||||
| autoreconf -vif | ||||
| %configure --disable-static | ||||
| make %{?_smp_mflags} | ||||
| %configure \ | ||||
| %ifarch aarch64 | ||||
| --without-simd \ | ||||
| %endif | ||||
| --disable-static | ||||
| 
 | ||||
| make %{?_smp_mflags} V=1 | ||||
| 
 | ||||
| %install | ||||
| make install DESTDIR=%{buildroot} | ||||
| @ -169,6 +176,10 @@ make test %{?_smp_mflags} | ||||
| %{_libdir}/pkgconfig/libturbojpeg.pc | ||||
| 
 | ||||
| %changelog | ||||
| * Mon Sep 19 2016 Peter Robinson <pbrobinson@fedoraproject.org> 1.5.0-3 | ||||
| - Temporarily disable SIMD on aarch64 until upstream #97 is fixed | ||||
| - Add NEON fix for ARMv7 | ||||
| 
 | ||||
| * Tue Sep 13 2016 Peter Robinson <pbrobinson@fedoraproject.org> 1.5.0-2 | ||||
| - Add upstream fix to fix SIMD crash on aarch64 (rhbz #1368569) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user