Bug 1092991

Summary: xmmintrin.h:115:1: error: inlining failed in call to always_inline '_mm_setzero_ps': target specific option mismatch
Product: [Fedora] Fedora Reporter: Kalev Lember <kalevlember>
Component: gstreamer1-plugins-baseAssignee: Brian Pepple <bdpepple>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: bdpepple, jakub, law, uraeus, wtaymans
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-06-15 19:17:35 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Kalev Lember 2014-04-30 11:34:40 UTC
I am seeing a regression building gstreamer1-plugins-base with gcc 4.9.0. The same code built fine with gcc 4.8, but with 4.9 the i686 builds fail.

gstreamer1-plugins-base compiles in the SSE-optimized code for both i686/x86_64, and uses ORC at runtime for determining whether the platform supports SSE. Because of that (and because of Fedora's default %optflags), it isn't passing -msse to the compiler. I guess that's what trips the compiler over:

libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../.. -I../../gst-libs -I../../gst-libs -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs -g -I/usr/include/orc-0.4 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -c speex_resampler_float.c  -fPIC -DPIC -o .libs/libgstaudioresample_la-speex_resampler_float.o
In file included from resample.c:140:0,
                 from speex_resampler_float.c:27:
resample_sse.h: In function 'interpolate_product_single':
resample_sse.h:62:10: warning: SSE vector return without SSE enabled changes the ABI [-Wpsabi]
   __m128 sum = _mm_setzero_ps();
          ^
In file included from resample_sse.h:38:0,
                 from resample.c:140,
                 from speex_resampler_float.c:27:
resample_sse.h: In function 'inner_product_single':
/usr/lib/gcc/i686-redhat-linux/4.9.0/include/xmmintrin.h:115:1: error: inlining failed in call to always_inline '_mm_setzero_ps': target specific option mismatch
 _mm_setzero_ps (void)
 ^
In file included from resample.c:140:0,
                 from speex_resampler_float.c:27:
resample_sse.h:46:11: error: called from here
    __m128 sum = _mm_setzero_ps();
           ^

... and so on, rest of the errors cut out for brevity.

Comment 1 Jakub Jelinek 2014-04-30 14:09:17 UTC
If -msse{,2} etc. isn't passed, then you shouldn't use those intrinsics that require that ISA, unless you use __attribute__((target ("sse"))) or similar on the routine that calls it.
GCC 4.8 just didn't provide those intrinsics in the headers at all when corresponding ISA hasn't been enabled, GCC 4.9 now provides all of them in routines that through #pragma GCC target get the right ISA, which is needed so that you can use the intrinsics in #pragma GCC target/__attribute__((target ()))
routines.
So, this is a bug in gstreamer plugin.

Comment 2 Kalev Lember 2014-05-05 19:31:30 UTC
Thanks for the help. Reassigning to gstreamer1-plugins-base.

Comment 3 Wim Taymans 2014-05-23 15:52:23 UTC
Fixed by applying patches from upstream https://bugzilla.gnome.org/show_bug.cgi?id=670690