rs6000.c: (altivec_expand_builtin): Only expand altivec builtins when TARGET_ALTIVEC.

2002-05-29  Aldy Hernandez  <aldyh@redhat.com>

        * rs6000.c: (altivec_expand_builtin): Only expand altivec builtins
        when TARGET_ALTIVEC.  Move handling of generic unary, binary, and
        ternary operations from here...
        (rs6000_expand_builtin): ...to here.
        New argument expandedp.
        Change all instances of altivec_expand_binop_builtin to
        rs6000_expand_binop_builtin.
        (altivec_expand_unop_builtin): Rename to
        rs6000_expand_unop_builtin.
        (altivec_expand_binop_builtin): Rename to
        rs6000_expand_binop_builtin.
        (altivec_expand_ternop_builtin): Rename to
        rs6000_expand_ternop_builtin.

From-SVN: r54034
This commit is contained in:
Aldy Hernandez 2002-05-30 00:54:18 +00:00 committed by Aldy Hernandez
parent 67adf6a9dc
commit 92898235fc
2 changed files with 79 additions and 43 deletions

View file

@ -1,3 +1,19 @@
2002-05-29 Aldy Hernandez <aldyh@redhat.com>
* rs6000.c: (altivec_expand_builtin): Only expand altivec builtins
when TARGET_ALTIVEC. Move handling of generic unary, binary, and
ternary operations from here...
(rs6000_expand_builtin): ...to here.
New argument expandedp.
Change all instances of altivec_expand_binop_builtin to
rs6000_expand_binop_builtin.
(altivec_expand_unop_builtin): Rename to
rs6000_expand_unop_builtin.
(altivec_expand_binop_builtin): Rename to
rs6000_expand_binop_builtin.
(altivec_expand_ternop_builtin): Rename to
rs6000_expand_ternop_builtin.
2002-05-29 Richard Henderson <rth@redhat.com>
* config/i386/biarch64.h (TARGET_64BIT_DEFAULT): Define with value.

View file

@ -187,14 +187,14 @@ static int rs6000_adjust_priority PARAMS ((rtx, int));
static int rs6000_issue_rate PARAMS ((void));
static void rs6000_init_builtins PARAMS ((void));
static void altivec_init_builtins PARAMS ((void));
static rtx rs6000_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx rs6000_expand_binop_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx rs6000_expand_ternop_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx rs6000_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
static rtx altivec_expand_builtin PARAMS ((tree, rtx));
static rtx altivec_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx altivec_expand_binop_builtin PARAMS ((enum insn_code, tree, rtx));
static void altivec_init_builtins PARAMS ((void));
static rtx altivec_expand_builtin PARAMS ((tree, rtx, bool *));
static rtx altivec_expand_abs_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx altivec_expand_predicate_builtin PARAMS ((enum insn_code, const char *, tree, rtx));
static rtx altivec_expand_ternop_builtin PARAMS ((enum insn_code, tree, rtx));
static rtx altivec_expand_stv_builtin PARAMS ((enum insn_code, tree));
static void rs6000_parse_abi_options PARAMS ((void));
static void rs6000_parse_vrsave_option PARAMS ((void));
@ -3567,7 +3567,7 @@ static const struct builtin_description bdesc_1arg[] =
};
static rtx
altivec_expand_unop_builtin (icode, arglist, target)
rs6000_expand_unop_builtin (icode, arglist, target)
enum insn_code icode;
tree arglist;
rtx target;
@ -3652,7 +3652,7 @@ altivec_expand_abs_builtin (icode, arglist, target)
}
static rtx
altivec_expand_binop_builtin (icode, arglist, target)
rs6000_expand_binop_builtin (icode, arglist, target)
enum insn_code icode;
tree arglist;
rtx target;
@ -3826,7 +3826,7 @@ altivec_expand_stv_builtin (icode, arglist)
}
static rtx
altivec_expand_ternop_builtin (icode, arglist, target)
rs6000_expand_ternop_builtin (icode, arglist, target)
enum insn_code icode;
tree arglist;
rtx target;
@ -3886,10 +3886,14 @@ altivec_expand_ternop_builtin (icode, arglist, target)
return target;
}
/* Expand the builtin in EXP and store the result in TARGET. Store
true in *EXPANDEDP if we found a builtin to expand. */
static rtx
altivec_expand_builtin (exp, target)
altivec_expand_builtin (exp, target, expandedp)
tree exp;
rtx target;
bool *expandedp;
{
struct builtin_description *d;
struct builtin_description_predicates *dp;
@ -3901,7 +3905,9 @@ altivec_expand_builtin (exp, target)
rtx op0, op1, op2, pat;
enum machine_mode tmode, mode0, mode1, mode2;
unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
*expandedp = true;
switch (fcode)
{
case ALTIVEC_BUILTIN_LD_INTERNAL_16qi:
@ -4182,18 +4188,6 @@ altivec_expand_builtin (exp, target)
if (d->code == fcode)
return altivec_expand_abs_builtin (d->icode, arglist, target);
/* Handle simple unary operations. */
d = (struct builtin_description *) bdesc_1arg;
for (i = 0; i < ARRAY_SIZE (bdesc_1arg); i++, d++)
if (d->code == fcode)
return altivec_expand_unop_builtin (d->icode, arglist, target);
/* Handle simple binary operations. */
d = (struct builtin_description *) bdesc_2arg;
for (i = 0; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
if (d->code == fcode)
return altivec_expand_binop_builtin (d->icode, arglist, target);
/* Expand the AltiVec predicates. */
dp = (struct builtin_description_predicates *) bdesc_altivec_preds;
for (i = 0; i < ARRAY_SIZE (bdesc_altivec_preds); i++, dp++)
@ -4204,38 +4198,32 @@ altivec_expand_builtin (exp, target)
switch (fcode)
{
case ALTIVEC_BUILTIN_LVSL:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvsl,
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvsl,
arglist, target);
case ALTIVEC_BUILTIN_LVSR:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvsr,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvsr,
arglist, target);
case ALTIVEC_BUILTIN_LVEBX:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvebx,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvebx,
arglist, target);
case ALTIVEC_BUILTIN_LVEHX:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvehx,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvehx,
arglist, target);
case ALTIVEC_BUILTIN_LVEWX:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvewx,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvewx,
arglist, target);
case ALTIVEC_BUILTIN_LVXL:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvxl,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvxl,
arglist, target);
case ALTIVEC_BUILTIN_LVX:
return altivec_expand_binop_builtin (CODE_FOR_altivec_lvx,
arglist, target);
return rs6000_expand_binop_builtin (CODE_FOR_altivec_lvx,
arglist, target);
default:
break;
/* Fall through. */
}
/* Handle simple ternary operations. */
d = (struct builtin_description *) bdesc_3arg;
for (i = 0; i < ARRAY_SIZE (bdesc_3arg); i++, d++)
if (d->code == fcode)
return altivec_expand_ternop_builtin (d->icode, arglist, target);
abort ();
*expandedp = false;
return NULL_RTX;
}
@ -4253,10 +4241,42 @@ rs6000_expand_builtin (exp, target, subtarget, mode, ignore)
enum machine_mode mode ATTRIBUTE_UNUSED;
int ignore ATTRIBUTE_UNUSED;
{
tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
tree arglist = TREE_OPERAND (exp, 1);
unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
struct builtin_description *d;
size_t i;
rtx ret;
bool success;
if (TARGET_ALTIVEC)
return altivec_expand_builtin (exp, target);
{
ret = altivec_expand_builtin (exp, target, &success);
if (success)
return ret;
}
/* Handle simple unary operations. */
d = (struct builtin_description *) bdesc_1arg;
for (i = 0; i < ARRAY_SIZE (bdesc_1arg); i++, d++)
if (d->code == fcode)
return rs6000_expand_unop_builtin (d->icode, arglist, target);
/* Handle simple binary operations. */
d = (struct builtin_description *) bdesc_2arg;
for (i = 0; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
if (d->code == fcode)
return rs6000_expand_binop_builtin (d->icode, arglist, target);
/* Handle simple ternary operations. */
d = (struct builtin_description *) bdesc_3arg;
for (i = 0; i < ARRAY_SIZE (bdesc_3arg); i++, d++)
if (d->code == fcode)
return rs6000_expand_ternop_builtin (d->icode, arglist, target);
abort ();
return NULL_RTX;
}
static void