diff --git a/lensfun-0.2.5-cpuid.patch b/lensfun-0.2.5-cpuid.patch new file mode 100644 index 0000000..ff071bf --- /dev/null +++ b/lensfun-0.2.5-cpuid.patch @@ -0,0 +1,128 @@ +From 9a3301bc3c239e0e74d6bc20f950b338d31457d9 Mon Sep 17 00:00:00 2001 +From: zap +Date: Sun, 9 May 2010 13:53:35 +0000 +Subject: [PATCH] * Modified a little the asm instructions for detecting CPU features + * configure will now print the vectorization instrution sets which will be used + +git-svn-id: svn://svn.berlios.de/lensfun/trunk@109 2a61fa91-e63d-0410-b60c-e65103854af9 +--- + configure | 1 + + libs/lensfun/cpuid.cpp | 28 ++++++++-------------------- + 2 files changed, 9 insertions(+), 20 deletions(-) + +diff --git a/configure b/configure +index 2439096..8cee50a 100755 +--- a/configure ++++ b/configure +@@ -118,4 +118,5 @@ print "Target directory for data files: " + tibs.DATADIR + print "Target directory for libraries: " + tibs.LIBDIR + print "Target directory for include files: " + tibs.INCLUDEDIR + print "Target directory for documentation: " + tibs.DOCDIR ++print "Use vector instruction set(-s): " + ", ".join (x for x in tibs.VECTORIZATION) + print "--------------------------------------------------------------------" +diff --git a/libs/lensfun/cpuid.cpp b/libs/lensfun/cpuid.cpp +index ed0ecf9..d7f43b3 100644 +--- a/libs/lensfun/cpuid.cpp ++++ b/libs/lensfun/cpuid.cpp +@@ -25,17 +25,13 @@ + guint _lf_detect_cpu_features () + { + #define cpuid(cmd) \ +- asm ( \ +- "push %%"R_BX"\n" \ ++ __asm volatile ( \ + "cpuid\n" \ +- "pop %%"R_BX"\n" \ + : "=a" (ax), "=c" (cx), "=d" (dx) \ +- : "0" (cmd)) ++ : "0" (cmd) \ ++ : R_BX) + +- register __SIZE_TYPE__ ax asm (R_AX); +- register __SIZE_TYPE__ bx asm (R_BX); +- register __SIZE_TYPE__ dx asm (R_DX); +- register __SIZE_TYPE__ cx asm (R_CX); ++ __SIZE_TYPE__ ax, cx, dx, tmp; + static GStaticMutex lock = G_STATIC_MUTEX_INIT; + static guint cpuflags = -1; + +@@ -45,7 +41,7 @@ guint _lf_detect_cpu_features () + cpuflags = 0; + + /* Test cpuid presence by checking bit 21 of eflags */ +- asm ( ++ __asm volatile ( + "pushf\n" + "pop %0\n" + "mov %0, %1\n" +@@ -57,7 +53,7 @@ guint _lf_detect_cpu_features () + "cmp %0, %1\n" + "setne %%al\n" + "movzb %%al, %0\n" +- : "=r" (ax), "=r" (bx)); ++ : "=r" (ax), "=r" (tmp)); + + if (ax) + { +@@ -88,12 +84,12 @@ guint _lf_detect_cpu_features () + cpuflags |= LF_CPU_FLAG_SSE4_2; + } + +- /* Is there extensions */ ++ /* Are there extensions? */ + cpuid (0x80000000); + + if (ax) + { +- /* Request for extensions */ ++ /* Ask extensions */ + cpuid (0x80000001); + + if (dx & 0x80000000) +@@ -112,12 +108,4 @@ guint _lf_detect_cpu_features () + #undef cpuid + } + +-#else +- +-guint +-rs_detect_cpu_features() +-{ +- return 0; +-} +- + #endif /* __i386__ || __x86_64__ */ +-- +1.7.2.3 + +From 19a5478ec455de6a9201d5acf5e844a926761bdb Mon Sep 17 00:00:00 2001 +From: zap +Date: Wed, 12 May 2010 19:31:09 +0000 +Subject: [PATCH] * cpuid.cpp: push/pop ebx instead of marking it as clobbered, because gcc can't survive that when using -fPIC + +git-svn-id: svn://svn.berlios.de/lensfun/trunk@110 2a61fa91-e63d-0410-b60c-e65103854af9 +--- + libs/lensfun/cpuid.cpp | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/libs/lensfun/cpuid.cpp b/libs/lensfun/cpuid.cpp +index d7f43b3..491412c 100644 +--- a/libs/lensfun/cpuid.cpp ++++ b/libs/lensfun/cpuid.cpp +@@ -26,10 +26,11 @@ guint _lf_detect_cpu_features () + { + #define cpuid(cmd) \ + __asm volatile ( \ ++ "push %%"R_BX"\n" \ + "cpuid\n" \ ++ "pop %%"R_BX"\n" \ + : "=a" (ax), "=c" (cx), "=d" (dx) \ +- : "0" (cmd) \ +- : R_BX) ++ : "0" (cmd)) + + __SIZE_TYPE__ ax, cx, dx, tmp; + static GStaticMutex lock = G_STATIC_MUTEX_INIT; +-- +1.7.2.3 + diff --git a/lensfun.spec b/lensfun.spec index dc19f0b..23de946 100644 --- a/lensfun.spec +++ b/lensfun.spec @@ -4,11 +4,12 @@ Name: lensfun Version: 0.2.5 Summary: Library to rectify defects introduced by photographic lenses -Release: 2%{?dist} +Release: 3%{?dist} License: LGPLv3 and CC-BY-SA Group: System Environment/Libraries URL: http://lensfun.berlios.de/ Source0: http://download.berlios.de/lensfun/lensfun-%{version}.tar.bz2 +Patch0: lensfun-0.2.5-cpuid.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: doxygen @@ -39,6 +40,7 @@ using lensfun. %prep %setup -q +%patch0 -p1 -b .cpuid %build @@ -98,6 +100,9 @@ rm -rf %{buildroot} %changelog +* Mon Sep 20 2010 Nils Philippsen 0.2.5-3 +- backport cpuid fixes (#631674) + * Mon Jul 26 2010 Dan HorĂ¡k 0.2.5-2 - disable SSE vectorization on non x86 arches