This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Support Intel AVX Programming Reference (December, 2008)
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: ubizjak at gmail dot com
- Date: Mon, 5 Jan 2009 16:49:38 -0800
- Subject: PATCH: Support Intel AVX Programming Reference (December, 2008)
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
Intel AVX Programming Reference (December, 2008)
http://software.intel.com/sites/avx/
removed vpermil2ps/vpermil2pd. Here is a patch to support it. OK for
trunk?
Thanks.
H.J.
---
gcc/
2008-12-23 H.J. Lu <hongjiu.lu@intel.com>
AVX Programming Reference (December, 2008)
* config/i386/avxintrin.h (_mm_permute2_pd): Removed.
(_mm256_permute2_pd): Likewise.
(_mm_permute2_ps): Likewise.
(_mm256_permute2_ps): Likewise.
* config/i386/i386.md (UNSPEC_VPERMIL2): Likewise.
* config/i386/sse.md (avx_vpermil2<mode>3): Likewise.
* config/i386/i386.c (ix86_builtins): Remove
IX86_BUILTIN_VPERMIL2PD, IX86_BUILTIN_VPERMIL2PS,
IX86_BUILTIN_VPERMIL2PD256 and IX86_BUILTIN_VPERMIL2PS256.
(ix86_builtin_type): Remove V8SF_FTYPE_V8SF_V8SF_V8SI_INT,
V4DF_FTYPE_V4DF_V4DF_V4DI_INT, V4SF_FTYPE_V4SF_V4SF_V4SI_INT
and V2DF_FTYPE_V2DF_V2DF_V2DI_INT.
(bdesc_args): Remove __builtin_ia32_vpermil2pd,
__builtin_ia32_vpermil2ps, __builtin_ia32_vpermil2pd256 and
__builtin_ia32_vpermil2ps256.
(ix86_init_mmx_sse_builtins): Updated.
(ix86_expand_args_builtin): Likewise.
gcc/testsuite/
2008-12-23 H.J. Lu <hongjiu.lu@intel.com>
AVX Programming Reference (December, 2008)
* gcc.target/i386/avx-2.c: Remove tests for _mm_permute2_pd,
_mm256_permute2_pd, _mm_permute2_ps and _mm256_permute2_ps.
* gcc.target/i386/sse-14.c: Likewise.
* gcc.target/i386/avx-vpermil2pd-1.c: Removed.
* gcc.target/i386/avx-vpermil2ps-1.c: Likewise.
* gcc.target/i386/avx-vpermil2pd-256-1.c: Likewise.
* gcc.target/i386/avx-vpermil2ps-256-1.c: Likewise.
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn \
-x "ChangeLog.*" \
-uprN ../gcc/gcc gcc
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/config/i386/avxintrin.h gcc/gcc/config/i386/avxintrin.h
--- ../gcc/gcc/gcc/config/i386/avxintrin.h 2008-12-15 10:53:21.000000000 -0800
+++ gcc/gcc/config/i386/avxintrin.h 2008-12-23 14:06:24.000000000 -0800
@@ -626,42 +626,6 @@ _mm256_permute_ps (__m256 __X, const int
{
return (__m256) __builtin_ia32_vpermilps256 ((__v8sf)__X, __C);
}
-
-extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_permute2_pd (__m128d __X, __m128d __Y, __m128i __C, const int __I)
-{
- return (__m128d) __builtin_ia32_vpermil2pd ((__v2df)__X,
- (__v2df)__Y,
- (__v2di)__C,
- __I);
-}
-
-extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm256_permute2_pd (__m256d __X, __m256d __Y, __m256i __C, const int __I)
-{
- return (__m256d) __builtin_ia32_vpermil2pd256 ((__v4df)__X,
- (__v4df)__Y,
- (__v4di)__C,
- __I);
-}
-
-extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm_permute2_ps (__m128 __X, __m128 __Y, __m128i __C, const int __I)
-{
- return (__m128) __builtin_ia32_vpermil2ps ((__v4sf)__X,
- (__v4sf)__Y,
- (__v4si)__C,
- __I);
-}
-
-extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-_mm256_permute2_ps (__m256 __X, __m256 __Y, __m256i __C, const int __I)
-{
- return (__m256) __builtin_ia32_vpermil2ps256 ((__v8sf)__X,
- (__v8sf)__Y,
- (__v8si)__C,
- __I);
-}
#else
#define _mm_permute_pd(X, C) \
((__m128d) __builtin_ia32_vpermilpd ((__v2df)(__m128d)(X), (int)(C)))
@@ -674,30 +638,6 @@ _mm256_permute2_ps (__m256 __X, __m256 _
#define _mm256_permute_ps(X, C) \
((__m256) __builtin_ia32_vpermilps256 ((__v8sf)(__m256)(X), (int)(C)))
-
-#define _mm_permute2_pd(X, Y, C, I) \
- ((__m128d) __builtin_ia32_vpermil2pd ((__v2df)(__m128d)(X), \
- (__v2df)(__m128d)(Y), \
- (__v2di)(__m128d)(C), \
- (int)(I)))
-
-#define _mm256_permute2_pd(X, Y, C, I) \
- ((__m256d) __builtin_ia32_vpermil2pd256 ((__v4df)(__m256d)(X), \
- (__v4df)(__m256d)(Y), \
- (__v4di)(__m256d)(C), \
- (int)(I)))
-
-#define _mm_permute2_ps(X, Y, C, I) \
- ((__m128) __builtin_ia32_vpermil2ps ((__v4sf)(__m128)(X), \
- (__v4sf)(__m128)(Y), \
- (__v4si)(__m128)(C), \
- (int)(I)))
-
-#define _mm256_permute2_ps(X, Y, C, I) \
- ((__m256) __builtin_ia32_vpermil2ps256 ((__v8sf)(__m256)(X), \
- (__v8sf)(__m256)(Y), \
- (__v8si)(__m256)(C), \
- (int)(I)))
#endif
#ifdef __OPTIMIZE__
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/config/i386/i386.c gcc/gcc/config/i386/i386.c
--- ../gcc/gcc/gcc/config/i386/i386.c 2008-12-23 10:01:44.000000000 -0800
+++ gcc/gcc/config/i386/i386.c 2008-12-23 13:52:36.000000000 -0800
@@ -19774,10 +19774,6 @@ enum ix86_builtins
IX86_BUILTIN_VPERMILPS,
IX86_BUILTIN_VPERMILPD256,
IX86_BUILTIN_VPERMILPS256,
- IX86_BUILTIN_VPERMIL2PD,
- IX86_BUILTIN_VPERMIL2PS,
- IX86_BUILTIN_VPERMIL2PD256,
- IX86_BUILTIN_VPERMIL2PS256,
IX86_BUILTIN_VPERM2F128PD256,
IX86_BUILTIN_VPERM2F128PS256,
IX86_BUILTIN_VPERM2F128SI256,
@@ -20434,10 +20430,6 @@ enum ix86_builtin_type
V2DI2TI_FTYPE_V2DI_V2DI_INT,
V1DI2DI_FTYPE_V1DI_V1DI_INT,
V2DF_FTYPE_V2DF_V2DF_INT,
- V8SF_FTYPE_V8SF_V8SF_V8SI_INT,
- V4DF_FTYPE_V4DF_V4DF_V4DI_INT,
- V4SF_FTYPE_V4SF_V4SF_V4SI_INT,
- V2DF_FTYPE_V2DF_V2DF_V2DI_INT,
V2DI_FTYPE_V2DI_UINT_UINT,
V2DI_FTYPE_V2DI_V2DI_UINT_UINT
};
@@ -21065,10 +21057,6 @@ static const struct builtin_description
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermilv4sf, "__builtin_ia32_vpermilps", IX86_BUILTIN_VPERMILPS, UNKNOWN, (int) V4SF_FTYPE_V4SF_INT },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermilv4df, "__builtin_ia32_vpermilpd256", IX86_BUILTIN_VPERMILPD256, UNKNOWN, (int) V4DF_FTYPE_V4DF_INT },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermilv8sf, "__builtin_ia32_vpermilps256", IX86_BUILTIN_VPERMILPS256, UNKNOWN, (int) V8SF_FTYPE_V8SF_INT },
- { OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermil2v2df3, "__builtin_ia32_vpermil2pd", IX86_BUILTIN_VPERMIL2PD, UNKNOWN, (int) V2DF_FTYPE_V2DF_V2DF_V2DI_INT },
- { OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermil2v4sf3, "__builtin_ia32_vpermil2ps", IX86_BUILTIN_VPERMIL2PS, UNKNOWN, (int) V4SF_FTYPE_V4SF_V4SF_V4SI_INT },
- { OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermil2v4df3, "__builtin_ia32_vpermil2pd256", IX86_BUILTIN_VPERMIL2PD256, UNKNOWN, (int) V4DF_FTYPE_V4DF_V4DF_V4DI_INT },
- { OPTION_MASK_ISA_AVX, CODE_FOR_avx_vpermil2v8sf3, "__builtin_ia32_vpermil2ps256", IX86_BUILTIN_VPERMIL2PS256, UNKNOWN, (int) V8SF_FTYPE_V8SF_V8SF_V8SI_INT },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vinsertf128v4df, "__builtin_ia32_vinsertf128_pd256", IX86_BUILTIN_VINSERTF128PD256, UNKNOWN, (int) V4DF_FTYPE_V4DF_V2DF_INT },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vinsertf128v8sf, "__builtin_ia32_vinsertf128_ps256", IX86_BUILTIN_VINSERTF128PS256, UNKNOWN, (int) V8SF_FTYPE_V8SF_V4SF_INT },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_vinsertf128v8si, "__builtin_ia32_vinsertf128_si256", IX86_BUILTIN_VINSERTF128SI256, UNKNOWN, (int) V8SI_FTYPE_V8SI_V4SI_INT },
@@ -22010,26 +21998,6 @@ ix86_init_mmx_sse_builtins (void)
V4DF_type_node, V4DF_type_node,
integer_type_node,
NULL_TREE);
- tree v8sf_ftype_v8sf_v8sf_v8si_int
- = build_function_type_list (V8SF_type_node,
- V8SF_type_node, V8SF_type_node,
- V8SI_type_node, integer_type_node,
- NULL_TREE);
- tree v4df_ftype_v4df_v4df_v4di_int
- = build_function_type_list (V4DF_type_node,
- V4DF_type_node, V4DF_type_node,
- V4DI_type_node, integer_type_node,
- NULL_TREE);
- tree v4sf_ftype_v4sf_v4sf_v4si_int
- = build_function_type_list (V4SF_type_node,
- V4SF_type_node, V4SF_type_node,
- V4SI_type_node, integer_type_node,
- NULL_TREE);
- tree v2df_ftype_v2df_v2df_v2di_int
- = build_function_type_list (V2DF_type_node,
- V2DF_type_node, V2DF_type_node,
- V2DI_type_node, integer_type_node,
- NULL_TREE);
tree v8sf_ftype_pcfloat
= build_function_type_list (V8SF_type_node,
pcfloat_type_node,
@@ -22733,18 +22701,6 @@ ix86_init_mmx_sse_builtins (void)
case V1DI2DI_FTYPE_V1DI_V1DI_INT:
type = v1di_ftype_v1di_v1di_int;
break;
- case V8SF_FTYPE_V8SF_V8SF_V8SI_INT:
- type = v8sf_ftype_v8sf_v8sf_v8si_int;
- break;
- case V4DF_FTYPE_V4DF_V4DF_V4DI_INT:
- type = v4df_ftype_v4df_v4df_v4di_int;
- break;
- case V4SF_FTYPE_V4SF_V4SF_V4SI_INT:
- type = v4sf_ftype_v4sf_v4sf_v4si_int;
- break;
- case V2DF_FTYPE_V2DF_V2DF_V2DI_INT:
- type = v2df_ftype_v2df_v2df_v2di_int;
- break;
default:
gcc_unreachable ();
}
@@ -23906,13 +23862,6 @@ ix86_expand_args_builtin (const struct b
nargs = 3;
nargs_constant = 2;
break;
- case V8SF_FTYPE_V8SF_V8SF_V8SI_INT:
- case V4DF_FTYPE_V4DF_V4DF_V4DI_INT:
- case V4SF_FTYPE_V4SF_V4SF_V4SI_INT:
- case V2DF_FTYPE_V2DF_V2DF_V2DI_INT:
- nargs = 4;
- nargs_constant = 1;
- break;
case V2DI_FTYPE_V2DI_V2DI_UINT_UINT:
nargs = 4;
nargs_constant = 2;
@@ -23982,10 +23931,6 @@ ix86_expand_args_builtin (const struct b
case CODE_FOR_sse4_1_blendpd:
case CODE_FOR_avx_vpermilv2df:
- case CODE_FOR_avx_vpermil2v2df3:
- case CODE_FOR_avx_vpermil2v4sf3:
- case CODE_FOR_avx_vpermil2v4df3:
- case CODE_FOR_avx_vpermil2v8sf3:
error ("the last argument must be a 2-bit immediate");
return const0_rtx;
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/config/i386/i386.md gcc/gcc/config/i386/i386.md
--- ../gcc/gcc/gcc/config/i386/i386.md 2008-12-23 10:01:44.000000000 -0800
+++ gcc/gcc/config/i386/i386.md 2008-12-23 13:39:45.000000000 -0800
@@ -201,12 +201,11 @@
; For AVX support
(UNSPEC_PCMP 166)
(UNSPEC_VPERMIL 167)
- (UNSPEC_VPERMIL2 168)
- (UNSPEC_VPERMIL2F128 169)
- (UNSPEC_MASKLOAD 170)
- (UNSPEC_MASKSTORE 171)
- (UNSPEC_CAST 172)
- (UNSPEC_VTESTP 173)
+ (UNSPEC_VPERMIL2F128 168)
+ (UNSPEC_MASKLOAD 169)
+ (UNSPEC_MASKSTORE 170)
+ (UNSPEC_CAST 171)
+ (UNSPEC_VTESTP 172)
])
(define_constants
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/config/i386/sse.md gcc/gcc/config/i386/sse.md
--- ../gcc/gcc/gcc/config/i386/sse.md 2008-12-15 10:53:21.000000000 -0800
+++ gcc/gcc/config/i386/sse.md 2008-12-23 13:39:05.000000000 -0800
@@ -11597,20 +11597,6 @@
(set_attr "prefix" "vex")
(set_attr "mode" "<MODE>")])
-(define_insn "avx_vpermil2<mode>3"
- [(set (match_operand:AVXMODEF2P 0 "register_operand" "=x,x")
- (unspec:AVXMODEF2P
- [(match_operand:AVXMODEF2P 1 "register_operand" "x,x")
- (match_operand:AVXMODEF2P 2 "nonimmediate_operand" "x,xm")
- (match_operand:<avxpermvecmode> 3 "nonimmediate_operand" "xm,x")
- (match_operand:SI 4 "const_0_to_3_operand" "n,n")]
- UNSPEC_VPERMIL2))]
- "TARGET_AVX"
- "vpermil2p<avxmodesuffixf2c>\t{%4, %3, %2, %1, %0|%0, %1, %2, %3, %4}"
- [(set_attr "type" "sselog")
- (set_attr "prefix" "vex")
- (set_attr "mode" "<MODE>")])
-
(define_insn "avx_vperm2f128<mode>3"
[(set (match_operand:AVX256MODE2P 0 "register_operand" "=x")
(unspec:AVX256MODE2P
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-2.c gcc/gcc/testsuite/gcc.target/i386/avx-2.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-2.c 2008-12-15 10:53:02.000000000 -0800
+++ gcc/gcc/testsuite/gcc.target/i386/avx-2.c 2008-12-23 14:00:08.000000000 -0800
@@ -78,10 +78,6 @@ test_1 (_mm_permute_pd, __m128d, __m128d
test_1 (_mm256_permute_pd, __m256d, __m256d, 1)
test_1 (_mm_permute_ps, __m128, __m128, 1)
test_1 (_mm256_permute_ps, __m256, __m256, 1)
-test_3 (_mm_permute2_pd, __m128d, __m128d, __m128d, __m128d, 1)
-test_3 (_mm256_permute2_pd, __m256d, __m256d, __m256d, __m256d, 1)
-test_3 (_mm_permute2_ps, __m128, __m128, __m128, __m128, 1)
-test_3 (_mm256_permute2_ps, __m256, __m256, __m256, __m256, 1)
test_2 (_mm256_permute2f128_pd, __m256d, __m256d, __m256d, 1)
test_2 (_mm256_permute2f128_ps, __m256, __m256, __m256, 1)
test_2 (_mm256_permute2f128_si256, __m256i, __m256i, __m256i, 1)
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-1.c gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-1.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-1.c 2008-09-15 09:28:29.000000000 -0700
+++ gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-1.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,55 +0,0 @@
-/* { dg-do run } */
-/* { dg-require-effective-target avx } */
-/* { dg-options "-O2 -mavx" } */
-
-#include "avx-check.h"
-
-#ifndef ZERO_MATCH
-#define ZERO_MATCH 2
-#endif
-
-static double
-select2dp(double *src1, double *src2, long long sel)
-{
- double tmp = 0.0;
-
- if ((sel & 0x3) == 0) tmp = src1[0];
- if ((sel & 0x3) == 1) tmp = src1[1];
- if ((sel & 0x3) == 2) tmp = src2[0];
- if ((sel & 0x3) == 3) tmp = src2[1];
-
- return tmp;
-}
-
-static double
-sel_and_condzerodp(double *src1, double *src2, long long sel, int imm8)
-{
- double tmp;
-
- tmp = select2dp(src1, src2, sel & 0x3);
-
- if (((imm8 & 0x3) == 2) && ((sel & 0x4) == 0x4)) tmp = 0;
- if (((imm8 & 0x3) == 3) && ((sel & 0x4) == 0x0)) tmp = 0;
-
- return tmp;
-}
-
-void static
-avx_test ()
-{
- union128d s1, s2, u;
- union128i_q s3;
- double e[2];
-
- s1.x = _mm_set_pd (1, 2);
- s2.x = _mm_set_pd (3, 4);
- s3.x = _mm_set_epi64x (1, 2);
- u.x = _mm_permute2_pd(s1.x, s2.x, s3.x, ZERO_MATCH);
-
- e[0] = sel_and_condzerodp (s1.a, s2.a, (s3.a[0] & 0xe)>>1, ZERO_MATCH);
- e[1] = sel_and_condzerodp (s1.a, s2.a, (s3.a[1] & 0xe)>>1, ZERO_MATCH);
-
- if (check_union128d (u, e))
- abort ();
-}
-
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-256-1.c gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-256-1.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-256-1.c 2008-09-15 09:28:29.000000000 -0700
+++ gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2pd-256-1.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,57 +0,0 @@
-/* { dg-do run } */
-/* { dg-require-effective-target avx } */
-/* { dg-options "-O2 -mavx" } */
-
-#include "avx-check.h"
-
-#ifndef ZERO_MATCH
-#define ZERO_MATCH 1
-#endif
-
-static double
-select2dp(double *src1, double *src2, long long sel)
-{
- double tmp = 3.414;
-
- if ((sel & 0x3) == 0) tmp = src1[0];
- if ((sel & 0x3) == 1) tmp = src1[1];
- if ((sel & 0x3) == 2) tmp = src2[0];
- if ((sel & 0x3) == 3) tmp = src2[1];
-
- return tmp;
-}
-
-static double
-sel_and_condzerodp(double *src1, double *src2, long long sel, int imm8)
-{
- double tmp;
-
- tmp = select2dp(src1, src2, sel);
-
- if (((imm8 & 0x3) == 2) && ((sel & 0x4) == 0x4)) tmp = 0;
- if (((imm8 & 0x3) == 3) && ((sel & 0x4) == 0x0)) tmp = 0;
-
- return tmp;
-}
-
-void static
-avx_test ()
-{
- union256d u, s1, s2;
- double e[4] = {0.0};
- union256i_q s3;
-
- s1.x = _mm256_set_pd (1, 2, 3, 4);
- s2.x = _mm256_set_pd (5, 6, 7, 8);
- s3.x = _mm256_set_epi64x (0, 1, 2, 3);
- u.x = _mm256_permute2_pd(s1.x, s2.x, s3.x, ZERO_MATCH);
-
- e[0] = sel_and_condzerodp (s1.a, s2.a, (s3.a[0] & 0xe)>>1, ZERO_MATCH);
- e[1] = sel_and_condzerodp (s1.a, s2.a, (s3.a[1] & 0xe)>>1, ZERO_MATCH);
- e[2] = sel_and_condzerodp (s1.a + 2, s2.a + 2, (s3.a[2] & 0xe)>>1, ZERO_MATCH);
- e[3] = sel_and_condzerodp (s1.a + 2, s2.a + 2, (s3.a[3] & 0xe)>>1, ZERO_MATCH);
-
- if (check_union256d (u, e))
- abort ();
-}
-
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-1.c gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-1.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-1.c 2008-09-15 09:28:29.000000000 -0700
+++ gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-1.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,62 +0,0 @@
-/* { dg-do run } */
-/* { dg-require-effective-target avx } */
-/* { dg-options "-O2 -mavx" } */
-
-#include "avx-check.h"
-
-#ifndef ZERO_MATCH
-#define ZERO_MATCH 1
-#endif
-
-static float
-select2sp(float *src1, float *src2, int sel)
-{
- float tmp;
-
- if ((sel & 0x7) == 0) tmp = src1[0];
- if ((sel & 0x7) == 1) tmp = src1[1];
- if ((sel & 0x7) == 2) tmp = src1[2];
- if ((sel & 0x7) == 3) tmp = src1[3];
- if ((sel & 0x7) == 4) tmp = src2[0];
- if ((sel & 0x7) == 5) tmp = src2[1];
- if ((sel & 0x7) == 6) tmp = src2[2];
- if ((sel & 0x7) == 7) tmp = src2[3];
-
- return tmp;
-}
-static float
-sel_and_condzerosp(float *src1, float *src2, int sel, int imm8)
-{
- float tmp;
-
- tmp = select2sp(src1, src2, sel & 0x7);
-
- if (((imm8 & 0x3) == 2) && ((sel & 0x8) == 0x8)) tmp = 0;
- if (((imm8 & 0x3) == 3) && ((sel & 0x8) == 0x0)) tmp = 0;
-
- return tmp;
-}
-
-void static
-avx_test ()
-{
- int i;
- union128 source1, source2, u;
- union128i_d source3;
- float s1[4] = {1, 2, 3, 4};
- float s2[4] = {5, 6, 7, 8};
- int s3[4] = {0, 1, 0, 1};
- float e[4];
-
- source1.x = _mm_loadu_ps(s1);
- source2.x = _mm_loadu_ps(s2);
- source3.x = _mm_loadu_si128((__m128i*) s3);
- u.x = _mm_permute2_ps(source1.x, source2.x, source3.x, ZERO_MATCH);
-
- for (i = 0; i < 4; ++i) {
- e[i] = sel_and_condzerosp(&s1[i & 0x4], &s2[i & 0x4], s3[i] & 0xf, ZERO_MATCH & 0x3);
- }
-
- if (check_union128 (u, e))
- abort ();
-}
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-256-1.c gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-256-1.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-256-1.c 2008-09-15 09:28:29.000000000 -0700
+++ gcc/gcc/testsuite/gcc.target/i386/avx-vpermil2ps-256-1.c 1969-12-31 16:00:00.000000000 -0800
@@ -1,62 +0,0 @@
-/* { dg-do run } */
-/* { dg-require-effective-target avx } */
-/* { dg-options "-O2 -mavx" } */
-
-#include "avx-check.h"
-
-#ifndef ZERO_MATCH
-#define ZERO_MATCH 3
-#endif
-
-static float
-select2sp(float *src1, float *src2, int sel)
-{
- float tmp;
-
- if ((sel & 0x7) == 0) tmp = src1[0];
- if ((sel & 0x7) == 1) tmp = src1[1];
- if ((sel & 0x7) == 2) tmp = src1[2];
- if ((sel & 0x7) == 3) tmp = src1[3];
- if ((sel & 0x7) == 4) tmp = src2[0];
- if ((sel & 0x7) == 5) tmp = src2[1];
- if ((sel & 0x7) == 6) tmp = src2[2];
- if ((sel & 0x7) == 7) tmp = src2[3];
-
- return tmp;
-}
-static float
-sel_and_condzerosp(float *src1, float *src2, int sel, int imm8)
-{
- float tmp;
-
- tmp = select2sp(src1, src2, sel & 0x7);
-
- if (((imm8 & 0x3) == 2) && ((sel & 0x8) == 0x8)) tmp = 0;
- if (((imm8 & 0x3) == 3) && ((sel & 0x8) == 0x0)) tmp = 0;
-
- return tmp;
-}
-
-void static
-avx_test ()
-{
- int i;
- union256 source1, source2, u;
- union256i_d source3;
- float s1[8]={1, 2, 3, 4, 5, 6, 7, 8};
- float s2[8]={9, 10, 11, 12, 13, 14, 15, 16};
- int s3[8]={11, 2, 3, 15, 5, 12, 7, 8};
- float e[8];
-
- source1.x = _mm256_loadu_ps(s1);
- source2.x = _mm256_loadu_ps(s2);
- source3.x = _mm256_loadu_si256((__m256i*) s3);
- u.x = _mm256_permute2_ps(source1.x, source2.x, source3.x, ZERO_MATCH);
-
- for (i = 0; i < 8; ++i) {
- e[i] = sel_and_condzerosp(&s1[i & 0x4], &s2[i & 0x4], s3[i] & 0xf, ZERO_MATCH & 0x3);
- }
-
- if (check_union256(u, e))
- abort ();
-}
diff -x LAST_UPDATED -x REVISION -x gcc_update -x .svn -x 'ChangeLog.*' -uprN ../gcc/gcc/gcc/testsuite/gcc.target/i386/sse-14.c gcc/gcc/testsuite/gcc.target/i386/sse-14.c
--- ../gcc/gcc/gcc/testsuite/gcc.target/i386/sse-14.c 2008-12-15 11:19:05.000000000 -0800
+++ gcc/gcc/testsuite/gcc.target/i386/sse-14.c 2008-12-23 14:00:13.000000000 -0800
@@ -74,10 +74,6 @@ test_1 (_mm_permute_pd, __m128d, __m128d
test_1 (_mm256_permute_pd, __m256d, __m256d, 1)
test_1 (_mm_permute_ps, __m128, __m128, 1)
test_1 (_mm256_permute_ps, __m256, __m256, 1)
-test_3 (_mm_permute2_pd, __m128d, __m128d, __m128d, __m128d, 1)
-test_3 (_mm256_permute2_pd, __m256d, __m256d, __m256d, __m256d, 1)
-test_3 (_mm_permute2_ps, __m128, __m128, __m128, __m128, 1)
-test_3 (_mm256_permute2_ps, __m256, __m256, __m256, __m256, 1)
test_2 (_mm256_permute2f128_pd, __m256d, __m256d, __m256d, 1)
test_2 (_mm256_permute2f128_ps, __m256, __m256, __m256, 1)
test_2 (_mm256_permute2f128_si256, __m256i, __m256i, __m256i, 1)