Commit ae90e6a3 by Richard Stallman

*** empty log message ***

From-SVN: r202
parent 51bbfa0c
/* Generate attribute information (insn-attr.h) from machine description.
Copyright (C) 1989 Free Software Foundation, Inc.
Copyright (C) 1991 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@nyu.edu)
This file is part of GNU CC.
......
/* Generate code from machine description to compute values of attributes.
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
Copyright (C) 1992 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@nyu.edu)
This file is part of GNU CC.
......@@ -1072,12 +1072,12 @@ fill_attr (attr)
}
}
/* Given an expression EXP, see if it is a COND that has a test that checks
relative positions of insns (uses MATCH_DUP or PC). If so, replace it
with what is obtained by passing the expression to ADDRESS_FN. If not
but it is a COND, call this routine recursively on each value (including
the default value). Otherwise, return the value returned by NO_ADDRESS_FN
applied to EXP. */
/* Given an expression EXP, see if it is a COND or IF_THEN_ELSE that has a
test that checks relative positions of insns (uses MATCH_DUP or PC).
If so, replace it with what is obtained by passing the expression to
ADDRESS_FN. If not but it is a COND or IF_THEN_ELSE, call this routine
recursively on each value (including the default value). Otherwise,
return the value returned by NO_ADDRESS_FN applied to EXP. */
static rtx
substitute_address (exp, no_address_fn, address_fn)
......@@ -1088,32 +1088,52 @@ substitute_address (exp, no_address_fn, address_fn)
int i;
rtx newexp;
if (GET_CODE (exp) != COND)
return (*no_address_fn) (exp);
if (GET_CODE (exp) == COND)
{
/* See if any tests use addresses. */
address_used = 0;
for (i = 0; i < XVECLEN (exp, 0); i += 2)
walk_attr_value (XVECEXP (exp, 0, i));
/* See if any tests use addresses. */
address_used = 0;
for (i = 0; i < XVECLEN (exp, 0); i += 2)
walk_attr_value (XVECEXP (exp, 0, i));
if (address_used)
return (*address_fn) (exp);
if (address_used)
return (*address_fn) (exp);
/* Make a new copy of this COND, replacing each element. */
newexp = rtx_alloc (COND);
XVEC (newexp, 0) = rtvec_alloc (XVECLEN (exp, 0));
for (i = 0; i < XVECLEN (exp, 0); i += 2)
{
XVECEXP (newexp, 0, i) = XVECEXP (exp, 0, i);
XVECEXP (newexp, 0, i + 1)
= substitute_address (XVECEXP (exp, 0, i + 1),
no_address_fn, address_fn);
}
/* Make a new copy of this COND, replacing each element. */
newexp = rtx_alloc (COND);
XVEC (newexp, 0) = rtvec_alloc (XVECLEN (exp, 0));
for (i = 0; i < XVECLEN (exp, 0); i += 2)
{
XVECEXP (newexp, 0, i) = XVECEXP (exp, 0, i);
XVECEXP (newexp, 0, i + 1) = substitute_address (XVECEXP (exp, 0, i + 1),
no_address_fn,
address_fn);
XEXP (newexp, 1) = substitute_address (XEXP (exp, 1),
no_address_fn, address_fn);
return newexp;
}
XEXP (newexp, 1) = substitute_address (XEXP (exp, 1),
no_address_fn, address_fn);
else if (GET_CODE (exp) == IF_THEN_ELSE)
{
address_used = 0;
walk_attr_value (XEXP (exp, 0));
if (address_used)
return (*address_fn) (exp);
return newexp;
newexp = rtx_alloc (IF_THEN_ELSE);
XEXP (newexp, 0) = substitute_address (XEXP (exp, 0),
no_address_fn, address_fn);
XEXP (newexp, 1) = substitute_address (XEXP (exp, 1),
no_address_fn, address_fn);
XEXP (newexp, 2) = substitute_address (XEXP (exp, 2),
no_address_fn, address_fn);
return newexp;
}
return (*no_address_fn) (exp);
}
/* Make new attributes from the `length' attribute. The following are made,
......
......@@ -2,7 +2,7 @@
- some macros CODE_FOR_... giving the insn_code_number value
for each of the defined standard insn names.
Copyright (C) 1987 Free Software Foundation, Inc.
Copyright (C) 1987, 1991 Free Software Foundation, Inc.
This file is part of GNU CC.
......
/* Generate from machine description:
- some #define configuration flags.
Copyright (C) 1987 Free Software Foundation, Inc.
Copyright (C) 1987, 1991 Free Software Foundation, Inc.
This file is part of GNU CC.
......
/* Generate code from machine description to emit insns as rtl.
Copyright (C) 1987-1991 Free Software Foundation, Inc.
Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
This file is part of GNU CC.
......
/* Generate code from machine description to extract operands from insn as rtl.
Copyright (C) 1987 Free Software Foundation, Inc.
Copyright (C) 1987, 1991 Free Software Foundation, Inc.
This file is part of GNU CC.
......
......@@ -2,7 +2,7 @@
- some flags HAVE_... saying which simple standard instructions are
available for this machine.
Copyright (C) 1987 Free Software Foundation, Inc.
Copyright (C) 1987, 1991 Free Software Foundation, Inc.
This file is part of GNU CC.
......
/* Generate code from to output assembler insns as recognized from rtl.
Copyright (C) 1987, 1988, 1991 Free Software Foundation, Inc.
Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
This file is part of GNU CC.
......
/* Generate code from machine description to perform peephole optimizations.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
This file is part of GNU CC.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment