Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/g++.target/i386/mv2.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/g++.target/i386/mv2.C Thu Oct 25 07:37:49 2018 +0900 @@ -0,0 +1,127 @@ +/* Test case to check if Multiversioning chooses the correct + dispatching order when versions are for various ISAs. */ +/* { dg-do run } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2" } */ + +#include <assert.h> + +/* Default version. */ +int foo () __attribute__ ((target ("default"))); +/* The dispatch checks should be in the exact reverse order of the + declarations below. */ +int foo () __attribute__ ((target ("mmx"))); +int foo () __attribute__ ((target ("sse"))); +int foo () __attribute__ ((target ("sse2"))); +int foo () __attribute__ ((target ("sse3"))); +int foo () __attribute__ ((target ("ssse3"))); +int foo () __attribute__ ((target ("sse4.1"))); +int foo () __attribute__ ((target ("sse4.2"))); +int foo () __attribute__ ((target ("popcnt"))); +int foo () __attribute__ ((target ("avx"))); +int foo () __attribute__ ((target ("avx2"))); +int foo () __attribute__ ((target ("avx512f"))); + +int main () +{ + int val = foo (); + + if (__builtin_cpu_supports ("avx512f")) + assert (val == 11); + else if (__builtin_cpu_supports ("avx2")) + assert (val == 10); + else if (__builtin_cpu_supports ("avx")) + assert (val == 9); + else if (__builtin_cpu_supports ("popcnt")) + assert (val == 8); + else if (__builtin_cpu_supports ("sse4.2")) + assert (val == 7); + else if (__builtin_cpu_supports ("sse4.1")) + assert (val == 6); + else if (__builtin_cpu_supports ("ssse3")) + assert (val == 5); + else if (__builtin_cpu_supports ("sse3")) + assert (val == 4); + else if (__builtin_cpu_supports ("sse2")) + assert (val == 3); + else if (__builtin_cpu_supports ("sse")) + assert (val == 2); + else if (__builtin_cpu_supports ("mmx")) + assert (val == 1); + else + assert (val == 0); + + return 0; +} + +int __attribute__ ((target("default"))) +foo () +{ + return 0; +} + +int __attribute__ ((target("mmx"))) +foo () +{ + return 1; +} + +int __attribute__ ((target("sse"))) +foo () +{ + return 2; +} + +int __attribute__ ((target("sse2"))) +foo () +{ + return 3; +} + +int __attribute__ ((target("sse3"))) +foo () +{ + return 4; +} + +int __attribute__ ((target("ssse3"))) +foo () +{ + return 5; +} + +int __attribute__ ((target("sse4.1"))) +foo () +{ + return 6; +} + +int __attribute__ ((target("sse4.2"))) +foo () +{ + return 7; +} + +int __attribute__ ((target("popcnt"))) +foo () +{ + return 8; +} + +int __attribute__ ((target("avx"))) +foo () +{ + return 9; +} + +int __attribute__ ((target("avx2"))) +foo () +{ + return 10; +} + +int __attribute__ ((target("avx512f"))) +foo () +{ + return 11; +}