}
-/* destructively add one to memory address */
-add_1_to_mem (opnd) /* returns 0 for success, -1 for failure */
- rtx opnd; /* OPND must be a MEM rtx */
-{
- rtx inner = XEXP (opnd, 0);
-
- if (GET_CODE (opnd) != MEM)
- {
- fprintf (stderr, "add_1_to_mem: input is not MEM\n");
- return -1; /* failure */
- }
- switch (GET_CODE (inner))
- {
- case CONST:
- inner = XEXP (inner, 0);
- if (GET_CODE (inner) != PLUS
- || GET_CODE (XEXP (inner, 1)) != CONST_INT)
- {
- fprintf (stderr, "add_1_to_mem: CONST failure\n");
- return -1;
- }
- INTVAL (XEXP (XEXP (XEXP (opnd, 0), 0), 1)) += 1;
- break;
- case REG:
- XEXP (opnd, 0) = gen_rtx (PLUS, Pmode, inner, const1_rtx);
- break;
- case SYMBOL_REF:
- case LABEL_REF:
- XEXP (opnd, 0) = gen_rtx (CONST, VOIDmode,
- gen_rtx (PLUS, Pmode, inner, const1_rtx));
- break;
- case PLUS:
- inner = XEXP (inner, 1);
- switch (GET_CODE (inner))
- {
- case CONST:
- inner = XEXP (inner, 0);
- if (GET_CODE (inner) != PLUS
- || GET_CODE (XEXP (inner, 1)) != CONST_INT)
- {
- fprintf (stderr, "add_1_to_mem: PLUS CONST failure\n");
- return -1;
- }
- INTVAL (XEXP (XEXP (XEXP (XEXP (opnd, 0), 1), 0), 1)) += 1;
- break;
- case CONST_INT:
- INTVAL (XEXP (XEXP (opnd, 0), 1)) += 1;
- break;
- case SYMBOL_REF:
- case LABEL_REF:
- XEXP (XEXP (opnd, 0), 1) = gen_rtx (CONST, VOIDmode,
- gen_rtx (PLUS, Pmode, inner, const1_rtx));
- break;
- default:
- fprintf (stderr, "add_1_to_mem: PLUS failure\n");
- return -1;
- }
- }
- return 0;
-}
-
-
/* Decide whether to output a conditional jump as a "Jump Conditional"
or as a "Branch Conditional": */
}
+static int addr_inc;
/* The PRINT_OPERAND and PRINT_OPERAND_ADDRESS macros have been
made functions: */
break;
case SYMBOL_REF:
fprintf (file, "%s", XSTR (x, 0));
+ if (kode == 'A')
+ fprintf (file, "+1");
break;
case LABEL_REF:
case CONST:
}
}
else
- output_address (XEXP (x, 0));
+ {
+ addr_inc = (kode == 'A' ? 1 : 0);
+ output_address (XEXP (x, 0));
+ }
break;
case CONST_DOUBLE:
/* {
default:
fprintf (file, "p_o_UFO code=%d", GET_CODE (x));
}
+ addr_inc = 0;
}
print_operand_address (file, addr)
switch (GET_CODE (addr))
{
case REG:
- fprintf (file, "0,r%d ; P_O_A", REGNO (addr));
+ fprintf (file, "%d,r%d ; P_O_A", addr_inc, REGNO (addr));
break;
case PLUS:
{
fprintf (file, ",r%d ;P_O_A reg + const expr", REGNO (x));
break;
case CONST_INT:
- fprintf (file, "%d,r%d", INTVAL (y), REGNO (x));
+ fprintf (file, "%d,r%d", INTVAL (y) + addr_inc, REGNO (x));
break;
case SYMBOL_REF:
- fprintf (file, "%s,r%d ; P_O_A reg + sym",
- XSTR (y, 0), REGNO (x));
+ fprintf (file, "%s", XSTR (y, 0));
+ if (addr_inc)
+ fprintf (file, "+%d", addr_inc);
+ fprintf (file, ",r%d ; P_O_A reg + sym", REGNO (x));
break;
case LABEL_REF:
output_address (XEXP (y, 0));
switch (GET_CODE (y))
{
case CONST_INT:
- fprintf (file, "%d+%s", INTVAL (y), XSTR (x, 0));
+ fprintf (file, "%d+%s", INTVAL (y) + addr_inc, XSTR (x, 0));
break;
case REG:
fprintf (file, "%s,r%d ;P_O_A sym + reg",
case LABEL_REF:
case SYMBOL_REF:
fprintf (file, "%s", XSTR (addr, 0));
+ if (addr_inc)
+ fprintf (file, "+%d", addr_inc);
break;
case MEM:
fprintf (file, "[memUFO:");
(int) GET_CODE (addr), INTVAL (addr));
break;
}
+ addr_inc = 0;
}