i386.c (bdesc_sse_3arg): Add __builtin_ia32_shufps and __builtin_ia32_shufpd.
2008-04-02 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (bdesc_sse_3arg): Add __builtin_ia32_shufps and __builtin_ia32_shufpd. Provide __builtin_ia32_roundsd and __builtin_ia32_roundss. (ix86_init_mmx_sse_builtins): Remove __builtin_ia32_shufps, __builtin_ia32_shufpd, __builtin_ia32_roundsd and __builtin_ia32_roundss. (ix86_expand_builtin): Don't handle IX86_BUILTIN_SHUFPS and IX86_BUILTIN_SHUFPD here. From-SVN: r133838
This commit is contained in:
parent
94237c92ef
commit
abe08645a0
@ -1,3 +1,14 @@
|
||||
2008-04-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/i386.c (bdesc_sse_3arg): Add __builtin_ia32_shufps
|
||||
and __builtin_ia32_shufpd. Provide __builtin_ia32_roundsd and
|
||||
__builtin_ia32_roundss.
|
||||
(ix86_init_mmx_sse_builtins): Remove __builtin_ia32_shufps,
|
||||
__builtin_ia32_shufpd, __builtin_ia32_roundsd and
|
||||
__builtin_ia32_roundss.
|
||||
(ix86_expand_builtin): Don't handle IX86_BUILTIN_SHUFPS and
|
||||
IX86_BUILTIN_SHUFPD here.
|
||||
|
||||
2008-04-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/i386.md (plogic): New.
|
||||
|
@ -17932,6 +17932,12 @@ static const struct builtin_description bdesc_crc32[] =
|
||||
/* SSE builtins with 3 arguments and the last argument must be an immediate or xmm0. */
|
||||
static const struct builtin_description bdesc_sse_3arg[] =
|
||||
{
|
||||
/* SSE */
|
||||
{ OPTION_MASK_ISA_SSE, CODE_FOR_sse_shufps, "__builtin_ia32_shufps", IX86_BUILTIN_SHUFPS, UNKNOWN, 0 },
|
||||
|
||||
/* SSE2 */
|
||||
{ OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_shufpd, "__builtin_ia32_shufpd", IX86_BUILTIN_SHUFPD, UNKNOWN, 0 },
|
||||
|
||||
/* SSE4.1 */
|
||||
{ OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_blendpd, "__builtin_ia32_blendpd", IX86_BUILTIN_BLENDPD, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_blendps, "__builtin_ia32_blendps", IX86_BUILTIN_BLENDPS, UNKNOWN, 0 },
|
||||
@ -17943,8 +17949,8 @@ static const struct builtin_description bdesc_sse_3arg[] =
|
||||
{ OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_mpsadbw, "__builtin_ia32_mpsadbw128", IX86_BUILTIN_MPSADBW128, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_pblendvb, "__builtin_ia32_pblendvb128", IX86_BUILTIN_PBLENDVB128, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_pblendw, "__builtin_ia32_pblendw128", IX86_BUILTIN_PBLENDW128, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundsd, 0, IX86_BUILTIN_ROUNDSD, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundss, 0, IX86_BUILTIN_ROUNDSS, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundsd, "__builtin_ia32_roundsd", IX86_BUILTIN_ROUNDSD, UNKNOWN, 0 },
|
||||
{ OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundss, "__builtin_ia32_roundss", IX86_BUILTIN_ROUNDSS, UNKNOWN, 0 },
|
||||
};
|
||||
|
||||
static const struct builtin_description bdesc_2arg[] =
|
||||
@ -19376,8 +19382,6 @@ ix86_init_mmx_sse_builtins (void)
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE, "__builtin_ia32_sqrtps_nr", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTPS_NR);
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE, "__builtin_ia32_sqrtss", v4sf_ftype_v4sf, IX86_BUILTIN_SQRTSS);
|
||||
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE, "__builtin_ia32_shufps", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_SHUFPS);
|
||||
|
||||
/* Original 3DNow! */
|
||||
def_builtin (OPTION_MASK_ISA_3DNOW, "__builtin_ia32_femms", void_ftype_void, IX86_BUILTIN_FEMMS);
|
||||
def_builtin_const (OPTION_MASK_ISA_3DNOW, "__builtin_ia32_pavgusb", v8qi_ftype_v8qi_v8qi, IX86_BUILTIN_PAVGUSB);
|
||||
@ -19431,8 +19435,6 @@ ix86_init_mmx_sse_builtins (void)
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_sqrtpd", v2df_ftype_v2df, IX86_BUILTIN_SQRTPD);
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_sqrtsd", v2df_ftype_v2df, IX86_BUILTIN_SQRTSD);
|
||||
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_shufpd", v2df_ftype_v2df_v2df_int, IX86_BUILTIN_SHUFPD);
|
||||
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_cvtdq2pd", v2df_ftype_v4si, IX86_BUILTIN_CVTDQ2PD);
|
||||
def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_cvtdq2ps", v4sf_ftype_v4si, IX86_BUILTIN_CVTDQ2PS);
|
||||
|
||||
@ -19519,8 +19521,6 @@ ix86_init_mmx_sse_builtins (void)
|
||||
/* SSE4.1 and SSE5 */
|
||||
def_builtin_const (OPTION_MASK_ISA_ROUND, "__builtin_ia32_roundpd", v2df_ftype_v2df_int, IX86_BUILTIN_ROUNDPD);
|
||||
def_builtin_const (OPTION_MASK_ISA_ROUND, "__builtin_ia32_roundps", v4sf_ftype_v4sf_int, IX86_BUILTIN_ROUNDPS);
|
||||
def_builtin_const (OPTION_MASK_ISA_ROUND, "__builtin_ia32_roundsd", v2df_ftype_v2df_v2df_int, IX86_BUILTIN_ROUNDSD);
|
||||
def_builtin_const (OPTION_MASK_ISA_ROUND, "__builtin_ia32_roundss", v4sf_ftype_v4sf_v4sf_int, IX86_BUILTIN_ROUNDSS);
|
||||
|
||||
/* SSE4.2. */
|
||||
ftype = build_function_type_list (unsigned_type_node,
|
||||
@ -20791,43 +20791,6 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
|
||||
emit_insn (gen_sse_stmxcsr (target));
|
||||
return copy_to_mode_reg (SImode, target);
|
||||
|
||||
case IX86_BUILTIN_SHUFPS:
|
||||
case IX86_BUILTIN_SHUFPD:
|
||||
icode = (fcode == IX86_BUILTIN_SHUFPS
|
||||
? CODE_FOR_sse_shufps
|
||||
: CODE_FOR_sse2_shufpd);
|
||||
arg0 = CALL_EXPR_ARG (exp, 0);
|
||||
arg1 = CALL_EXPR_ARG (exp, 1);
|
||||
arg2 = CALL_EXPR_ARG (exp, 2);
|
||||
op0 = expand_normal (arg0);
|
||||
op1 = expand_normal (arg1);
|
||||
op2 = expand_normal (arg2);
|
||||
tmode = insn_data[icode].operand[0].mode;
|
||||
mode0 = insn_data[icode].operand[1].mode;
|
||||
mode1 = insn_data[icode].operand[2].mode;
|
||||
mode2 = insn_data[icode].operand[3].mode;
|
||||
|
||||
if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
|
||||
op0 = copy_to_mode_reg (mode0, op0);
|
||||
if ((optimize && !register_operand (op1, mode1))
|
||||
|| !(*insn_data[icode].operand[2].predicate) (op1, mode1))
|
||||
op1 = copy_to_mode_reg (mode1, op1);
|
||||
if (! (*insn_data[icode].operand[3].predicate) (op2, mode2))
|
||||
{
|
||||
/* @@@ better error message */
|
||||
error ("mask must be an immediate");
|
||||
return gen_reg_rtx (tmode);
|
||||
}
|
||||
if (optimize || target == 0
|
||||
|| GET_MODE (target) != tmode
|
||||
|| ! (*insn_data[icode].operand[0].predicate) (target, tmode))
|
||||
target = gen_reg_rtx (tmode);
|
||||
pat = GEN_FCN (icode) (target, op0, op1, op2);
|
||||
if (! pat)
|
||||
return 0;
|
||||
emit_insn (pat);
|
||||
return target;
|
||||
|
||||
case IX86_BUILTIN_PSHUFW:
|
||||
case IX86_BUILTIN_PSHUFD:
|
||||
case IX86_BUILTIN_PSHUFHW:
|
||||
|
Loading…
Reference in New Issue
Block a user