This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/44578] GCC generates MMX instructions but fails to generate "emms"
- From: "tejohnson at google dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 30 Apr 2013 05:43:06 +0000
- Subject: [Bug target/44578] GCC generates MMX instructions but fails to generate "emms"
- Auto-submitted: auto-generated
- References: <bug-44578-4 at http dot gcc dot gnu dot org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44578
--- Comment #12 from Teresa Johnson <tejohnson at google dot com> 2013-04-30 05:43:06 UTC ---
On Mon, Apr 29, 2013 at 10:37 AM, ubizjak at gmail dot com
<gcc-bugzilla@gcc.gnu.org> wrote:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44578
>
> --- Comment #10 from Uros Bizjak <ubizjak at gmail dot com> 2013-04-29 17:37:03 UTC ---
> (In reply to comment #9)
>> It does fix the issue I had in this test case. But theoretically can't
>> this pattern still generate an MMX reference in some cases? And I see
>> other instances of the same constraint in i386.md - is there a larger
>> issue here and how can we prevent this?
>
> Yes, leaks of MMX registers were quite problematic in the past. A lot of effort
> went into insn patterns to balance register allocator to allow MMX registers
> when necessary, and to avoid them otherwise. It looks that zero_extendsidi
> pattern was skipped in these efforts.
Thanks for the quick fix!
>
> -mno-mmx can be used to prevent MMX regs, but the allocator is quite well tuned
> nowadays, so instantiation of %mmX registers when not strictly needed will be
> considered a bug.
I found that due to the header file structure I cannot use -mno-mmx in
certain cases - i.e. when including the STL <algorithm> header file
and compiling with c++11. Is this a known issue/limitation?
(after adding "#include <algorithm>" to the top of my test.cc test case):
$ /usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/bin/g++
-O test.cc -g -S -std=c++11 -mno-mmx
In file included from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/xmmintrin.h:35:0,
from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/x86intrin.h:34,
from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/include/c++/4.9.0/bits/opt_random.h:33,
from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/include/c++/4.9.0/random:51,
from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/include/c++/4.9.0/bits/stl_algo.h:65,
from
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/include/c++/4.9.0/algorithm:62,
from test.cc:6:
/usr/local/google/home/tejohnson/gcc_trunk_1_validate/bld-gcc/install/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/include/mmintrin.h:31:3:
error: #error "MMX instruction set not enabled"
# error "MMX instruction set not enabled"
^
Thanks,
Teresa
>
> --
> Configure bugmail: http://gcc.gnu.org/bugzilla/userprefs.cgi?tab=email
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug.
--
Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413