diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c b/gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c new file mode 100644 index 000000000..2557eab64 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/i386/avx512f-inline-asm.c @@ -0,0 +1,68 @@ +/* { dg-do run } */ +/* { dg-options "-mavx512f -O2" } */ +/* { dg-require-effective-target avx512f } */ + +#include "avx512f-check.h" + +static void +init_vpadd_mask (int* dst, int *src1, int *src2, int seed) +{ + int i; + + for (i = 0; i < 16; i++) + { + dst[i] = -1; + src1[i] = seed * 2 * i + 1; + src2[i] = seed * 2 * i; + } +} + +static inline void +calc_vpadd_mask_zeroed (int *dst, __mmask16 m, int *src1, int *src2) +{ + int i; + + for (i = 0; i < 16; i++) + { + if (m & (1 << i)) + dst[i] = src1[i] + src2[i]; + else + dst[i] = 0; + } +} + +void static +avx512f_test (void) +{ + /* Checking mask arithmetic instruction */ + + __mmask16 msk_dst, msk_src1, msk_src2, msk_dst_ref; + + msk_src1 = 0x0FFB; + msk_src2 = 0x0F0F; + + asm ("kandw\t%2, %1, %0" + : "=k" (msk_dst) + : "k" (msk_src1), "k" (msk_src2)); + + msk_dst_ref = _mm512_kand (msk_src1, msk_src2); + if (msk_dst != msk_dst_ref) + abort (); + + + /* Checking zero-masked vector instruction */ + union512i_d dst, src1, src2; + int dst_ref[16]; + + init_vpadd_mask (dst.a, src1.a, src2.a, 1); + init_vpadd_mask (dst_ref, src1.a, src2.a, 1); + + asm ("vpaddd\t%2, %1, %0 %{%3%}%{z%}" + : "=x" (dst.x) + : "x" (src1.x), "x" (src2.x), "Yk" (msk_dst)); + + calc_vpadd_mask_zeroed (dst_ref, msk_dst, src1.a, src2.a); + + if (check_union512i_d (dst, dst_ref)) + abort (); +} |