|
|
|
@ -21943,145 +21943,6 @@ |
|
|
|
|
{
|
|
|
|
|
int save_tree_used;
|
|
|
|
|
|
|
|
|
|
--- a/gcc/genemit.c
|
|
|
|
|
+++ b/gcc/genemit.c
|
|
|
|
|
@@ -121,6 +121,24 @@ max_operand_vec (rtx insn, int arg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
+gen_vararg_prologue(int operands)
|
|
|
|
|
+{
|
|
|
|
|
+ int i;
|
|
|
|
|
+
|
|
|
|
|
+ if (operands > 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ for (i = 1; i < operands; i++)
|
|
|
|
|
+ printf(" rtx operand%d ATTRIBUTE_UNUSED;\n", i);
|
|
|
|
|
+
|
|
|
|
|
+ printf(" va_list args;\n\n");
|
|
|
|
|
+ printf(" va_start(args, operand0);\n");
|
|
|
|
|
+ for (i = 1; i < operands; i++)
|
|
|
|
|
+ printf(" operand%d = va_arg(args, rtx);\n", i);
|
|
|
|
|
+ printf(" va_end(args);\n\n");
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void
|
|
|
|
|
print_code (RTX_CODE code)
|
|
|
|
|
{
|
|
|
|
|
const char *p1;
|
|
|
|
|
@@ -405,18 +423,16 @@ gen_insn (rtx insn, int lineno)
|
|
|
|
|
fatal ("match_dup operand number has no match_operand");
|
|
|
|
|
|
|
|
|
|
/* Output the function name and argument declarations. */
|
|
|
|
|
- printf ("rtx\ngen_%s (", XSTR (insn, 0));
|
|
|
|
|
+ printf ("rtx\ngen_%s ", XSTR (insn, 0));
|
|
|
|
|
+
|
|
|
|
|
if (operands)
|
|
|
|
|
- for (i = 0; i < operands; i++)
|
|
|
|
|
- if (i)
|
|
|
|
|
- printf (",\n\trtx operand%d ATTRIBUTE_UNUSED", i);
|
|
|
|
|
- else
|
|
|
|
|
- printf ("rtx operand%d ATTRIBUTE_UNUSED", i);
|
|
|
|
|
+ printf("(rtx operand0 ATTRIBUTE_UNUSED, ...)\n");
|
|
|
|
|
else
|
|
|
|
|
- printf ("void");
|
|
|
|
|
- printf (")\n");
|
|
|
|
|
+ printf("(void)\n");
|
|
|
|
|
printf ("{\n");
|
|
|
|
|
|
|
|
|
|
+ gen_vararg_prologue(operands);
|
|
|
|
|
+
|
|
|
|
|
/* Output code to construct and return the rtl for the instruction body. */
|
|
|
|
|
|
|
|
|
|
if (XVECLEN (insn, 1) == 1)
|
|
|
|
|
@@ -456,16 +472,12 @@ gen_expand (rtx expand)
|
|
|
|
|
operands = max_operand_vec (expand, 1);
|
|
|
|
|
|
|
|
|
|
/* Output the function name and argument declarations. */
|
|
|
|
|
- printf ("rtx\ngen_%s (", XSTR (expand, 0));
|
|
|
|
|
+ printf ("rtx\ngen_%s ", XSTR (expand, 0));
|
|
|
|
|
if (operands)
|
|
|
|
|
- for (i = 0; i < operands; i++)
|
|
|
|
|
- if (i)
|
|
|
|
|
- printf (",\n\trtx operand%d", i);
|
|
|
|
|
- else
|
|
|
|
|
- printf ("rtx operand%d", i);
|
|
|
|
|
+ printf("(rtx operand0 ATTRIBUTE_UNUSED, ...)\n");
|
|
|
|
|
else
|
|
|
|
|
- printf ("void");
|
|
|
|
|
- printf (")\n");
|
|
|
|
|
+ printf("(void)\n");
|
|
|
|
|
+
|
|
|
|
|
printf ("{\n");
|
|
|
|
|
|
|
|
|
|
/* If we don't have any C code to write, only one insn is being written,
|
|
|
|
|
@@ -475,6 +487,8 @@ gen_expand (rtx expand)
|
|
|
|
|
&& operands > max_dup_opno
|
|
|
|
|
&& XVECLEN (expand, 1) == 1)
|
|
|
|
|
{
|
|
|
|
|
+ gen_vararg_prologue(operands);
|
|
|
|
|
+
|
|
|
|
|
printf (" return ");
|
|
|
|
|
gen_exp (XVECEXP (expand, 1, 0), DEFINE_EXPAND, NULL);
|
|
|
|
|
printf (";\n}\n\n");
|
|
|
|
|
@@ -488,6 +502,7 @@ gen_expand (rtx expand)
|
|
|
|
|
for (; i <= max_scratch_opno; i++)
|
|
|
|
|
printf (" rtx operand%d ATTRIBUTE_UNUSED;\n", i);
|
|
|
|
|
printf (" rtx _val = 0;\n");
|
|
|
|
|
+ gen_vararg_prologue(operands);
|
|
|
|
|
printf (" start_sequence ();\n");
|
|
|
|
|
|
|
|
|
|
/* The fourth operand of DEFINE_EXPAND is some code to be executed
|
|
|
|
|
--- a/gcc/genflags.c
|
|
|
|
|
+++ b/gcc/genflags.c
|
|
|
|
|
@@ -127,7 +127,6 @@ static void
|
|
|
|
|
gen_proto (rtx insn)
|
|
|
|
|
{
|
|
|
|
|
int num = num_operands (insn);
|
|
|
|
|
- int i;
|
|
|
|
|
const char *name = XSTR (insn, 0);
|
|
|
|
|
int truth = maybe_eval_c_test (XSTR (insn, 2));
|
|
|
|
|
|
|
|
|
|
@@ -158,12 +157,7 @@ gen_proto (rtx insn)
|
|
|
|
|
if (num == 0)
|
|
|
|
|
fputs ("void", stdout);
|
|
|
|
|
else
|
|
|
|
|
- {
|
|
|
|
|
- for (i = 1; i < num; i++)
|
|
|
|
|
- fputs ("rtx, ", stdout);
|
|
|
|
|
-
|
|
|
|
|
- fputs ("rtx", stdout);
|
|
|
|
|
- }
|
|
|
|
|
+ fputs("rtx, ...", stdout);
|
|
|
|
|
|
|
|
|
|
puts (");");
|
|
|
|
|
|
|
|
|
|
@@ -173,12 +167,7 @@ gen_proto (rtx insn)
|
|
|
|
|
{
|
|
|
|
|
printf ("static inline rtx\ngen_%s", name);
|
|
|
|
|
if (num > 0)
|
|
|
|
|
- {
|
|
|
|
|
- putchar ('(');
|
|
|
|
|
- for (i = 0; i < num-1; i++)
|
|
|
|
|
- printf ("rtx ARG_UNUSED (%c), ", 'a' + i);
|
|
|
|
|
- printf ("rtx ARG_UNUSED (%c))\n", 'a' + i);
|
|
|
|
|
- }
|
|
|
|
|
+ puts("(rtx ARG_UNUSED(a), ...)");
|
|
|
|
|
else
|
|
|
|
|
puts ("(void)");
|
|
|
|
|
puts ("{\n return 0;\n}");
|
|
|
|
|
--- a/gcc/genoutput.c
|
|
|
|
|
+++ b/gcc/genoutput.c
|
|
|
|
|
@@ -386,7 +386,7 @@ output_insn_data (void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (d->name && d->name[0] != '*')
|
|
|
|
|
- printf (" (insn_gen_fn) gen_%s,\n", d->name);
|
|
|
|
|
+ printf (" gen_%s,\n", d->name);
|
|
|
|
|
else
|
|
|
|
|
printf (" 0,\n");
|
|
|
|
|
|
|
|
|
|
--- a/gcc/ifcvt.c
|
|
|
|
|
+++ b/gcc/ifcvt.c
|
|
|
|
|
@@ -77,7 +77,7 @@ static int num_possible_if_blocks;
|
|
|
|
@ -22231,17 +22092,6 @@ |
|
|
|
|
#if defined (__hppa) && W_TYPE_SIZE == 32
|
|
|
|
|
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
|
|
|
|
__asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \
|
|
|
|
|
--- a/gcc/optabs.h
|
|
|
|
|
+++ b/gcc/optabs.h
|
|
|
|
|
@@ -431,7 +431,7 @@ extern enum insn_code reload_out_optab[N
|
|
|
|
|
extern GTY(()) optab code_to_optab[NUM_RTX_CODE + 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-typedef rtx (*rtxfun) (rtx);
|
|
|
|
|
+typedef rtx (*rtxfun) (rtx, ...);
|
|
|
|
|
|
|
|
|
|
/* Indexed by the rtx-code for a conditional (e.g. EQ, LT,...)
|
|
|
|
|
gives the gen_function to make a branch to test that condition. */
|
|
|
|
|
--- a/gcc/regrename.c
|
|
|
|
|
+++ b/gcc/regrename.c
|
|
|
|
|
@@ -1592,6 +1592,9 @@ copyprop_hardreg_forward_1 (basic_block
|
|
|
|
|