This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/44578] GCC generates MMX instructions but fails to generate "emms"


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]