[Bug c++/57561] New: gnu function multiversion - resolver doesn't use isa priority according to documentation

mib.bugzilla at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Jun 7 18:02:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57561

            Bug ID: 57561
           Summary: gnu function multiversion - resolver doesn't use isa
                    priority according to documentation
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mib.bugzilla at gmail dot com

In this test case, the resolver function doesn't find the correct version,
according to the documentation e.g. mmx should not preceed sse4.2
(Using gcc 4.8.1 on x86 system)
grep movl fu.s | grep arch
        movl    $_Z3fumv.arch_corei7_avx2, %eax
        movl    $_Z3fumv.arch_corei7_avx, %eax
        movl    $_Z3fumv.arch_corei7_popcnt, %eax
        movl    $_Z3fumv.arch_corei7_mmx, %eax
        movl    $_Z3fumv.arch_corei7_sse4.2, %eax
        movl    $_Z3fumv.arch_corei7_sse4.1, %eax
        movl    $_Z3fumv.arch_corei7_ssse3, %eax
        movl    $_Z3fumv.arch_corei7_sse, %eax
        movl    $_Z3fumv.arch_corei7_sse2, %eax
        movl    $_Z3fumv.arch_corei7_sse3, %eax

cat fu.cpp
 __attribute__ ((target("default"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,sse3"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,sse2"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,sse"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,ssse3"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,sse4.1"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,sse4.2"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,popcnt"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,avx"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,avx2"))) int fum () { return 0; }
 __attribute__ ((target("arch=corei7,mmx"))) int fum () { return 0; }

int (*p)() = &fum;

int foo(void)
{
  int j = fum();
  return j;
}



More information about the Gcc-bugs mailing list