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 | Name:           libjpeg-turbo | ||||||
| Version:        1.5.0 | Version:        1.5.0 | ||||||
| Release:        2%{?dist} | Release:        3%{?dist} | ||||||
| Summary:        A MMX/SSE2/SIMD accelerated library for manipulating JPEG image files | Summary:        A MMX/SSE2/SIMD accelerated library for manipulating JPEG image files | ||||||
| License:        IJG | License:        IJG | ||||||
| URL:            http://sourceforge.net/projects/libjpeg-turbo | 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 | Patch0:         libjpeg-turbo14-noinst.patch | ||||||
| Patch1:         libjpeg-turbo-header-files.patch | Patch1:         libjpeg-turbo-header-files.patch | ||||||
| Patch2:         libjpeg-turbo-aarch64.patch | Patch2:         libjpeg-turbo-aarch64.patch | ||||||
|  | Patch3:         libjpeg-turbo-arm-neon.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires:  autoconf | BuildRequires:  autoconf | ||||||
| BuildRequires:  automake | BuildRequires:  automake | ||||||
| @ -73,11 +74,17 @@ manipulate JPEG files using the TurboJPEG library. | |||||||
| %patch0 -p1 -b .noinst | %patch0 -p1 -b .noinst | ||||||
| %patch1 -p1 -b .header-files | %patch1 -p1 -b .header-files | ||||||
| %patch2 -p1 -b .aarch64 | %patch2 -p1 -b .aarch64 | ||||||
|  | %patch3 -p1 -b .neon | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| autoreconf -vif | autoreconf -vif | ||||||
| %configure --disable-static | %configure \ | ||||||
| make %{?_smp_mflags} | %ifarch aarch64 | ||||||
|  | --without-simd \ | ||||||
|  | %endif | ||||||
|  | --disable-static | ||||||
|  | 
 | ||||||
|  | make %{?_smp_mflags} V=1 | ||||||
| 
 | 
 | ||||||
| %install | %install | ||||||
| make install DESTDIR=%{buildroot} | make install DESTDIR=%{buildroot} | ||||||
| @ -169,6 +176,10 @@ make test %{?_smp_mflags} | |||||||
| %{_libdir}/pkgconfig/libturbojpeg.pc | %{_libdir}/pkgconfig/libturbojpeg.pc | ||||||
| 
 | 
 | ||||||
| %changelog | %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 | * Tue Sep 13 2016 Peter Robinson <pbrobinson@fedoraproject.org> 1.5.0-2 | ||||||
| - Add upstream fix to fix SIMD crash on aarch64 (rhbz #1368569) | - Add upstream fix to fix SIMD crash on aarch64 (rhbz #1368569) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user