can't handle.
(define_split): Two new splits for above insns.
+ * arm.c: Include toplev.h.
+ (arm_override_options): Add parentheses around use of tune_flags.
+ (arm_split_constant): Remove unused variable.
+ (arm_gen_constant, arm_gen_movstrqi, add_constant): Likewise.
+ (output_func_prologue, arm_expand_prologue): Likewise.
+ (arm_canonicalize_comparison): Make I unsigned; rework constants
+ accordignly. Add missing paratheses around << operation.
+ (arm_rtx_costs): Correctly parenthesise MULT costs. Add a DEFAULT
+ clause.
+ ({load,store}_multiple_sequence): Initialize BASE_REG.
+ (select_dominance_cc_mode): Add DEFAULT clauses.
+ (broken_move): Return zero if the destination is not a register.
+ (arm_reorg): Move unused REGNO declaration into the dead code.
+ * arm.h (CANONICALIZE_COMPARISON): Ensure OP1 is updated.
+
Mon May 25 22:49:56 PDT 1998 Jeff Law (law@cygnus.com)
* version.c: Bump for snapshot.
#include "reload.h"
#include "tree.h"
#include "expr.h"
+#include "toplev.h"
/* The maximum number of insns skipped which will be conditionalised if
possible. */
assume the user has an FPA.
Note: this does not prevent use of floating point instructions,
-msoft-float does that. */
- if (tune_flags & FL_CO_PROC == 0)
+ if ((tune_flags & FL_CO_PROC) == 0)
arm_fpu = FP_SOFT3;
arm_fast_multiply = (flags & FL_FAST_MULT) != 0;
|| (GET_CODE (target) == REG && GET_CODE (source) == REG
&& REGNO (target) != REGNO (source)))
{
- rtx temp;
-
if (arm_gen_constant (code, mode, val, target, source, 1, 0)
> arm_constant_limit + (code != SET))
{
int subtargets;
int generate;
{
- int can_add = 0;
int can_invert = 0;
int can_negate = 0;
int can_negate_initial = 0;
enum rtx_code code;
rtx *op1;
{
- HOST_WIDE_INT i = INTVAL (*op1);
+ unsigned HOST_WIDE_INT i = INTVAL (*op1);
switch (code)
{
case GT:
case LE:
- if (i != (1 << (HOST_BITS_PER_WIDE_INT - 1) - 1)
+ if (i != ((((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1))
+ - 1)
&& (const_ok_for_arm (i+1) || const_ok_for_arm (- (i+1))))
{
*op1 = GEN_INT (i+1);
case GE:
case LT:
- if (i != (1 << (HOST_BITS_PER_WIDE_INT - 1))
+ if (i != (((unsigned HOST_WIDE_INT) 1) << (HOST_BITS_PER_WIDE_INT - 1))
&& (const_ok_for_arm (i-1) || const_ok_for_arm (- (i-1))))
{
*op1 = GEN_INT (i-1);
case GTU:
case LEU:
- if (i != ~0
+ if (i != ~((unsigned HOST_WIDE_INT) 0)
&& (const_ok_for_arm (i+1) || const_ok_for_arm (- (i+1))))
{
*op1 = GEN_INT (i + 1);
|| (subcode == MULT
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
&& ((INTVAL (XEXP (XEXP (x, 0), 1)) &
- (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0))
+ (INTVAL (XEXP (XEXP (x, 0), 1)) - 1)) == 0)))
&& (REG_OR_SUBREG_REG (XEXP (XEXP (x, 0), 0)))
&& ((REG_OR_SUBREG_REG (XEXP (XEXP (x, 0), 1)))
- || GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)))
+ || GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
? 0 : 4));
return 8;
case SImode:
return (1 + (GET_CODE (XEXP (x, 0)) == MEM ? 10 : 0));
+
+ default:
+ break;
}
abort ();
int unsorted_regs[4];
HOST_WIDE_INT unsorted_offsets[4];
int order[4];
- int base_reg;
+ int base_reg = -1;
int i;
/* Can only handle 2, 3, or 4 insns at present, though could be easily
int unsorted_regs[4];
HOST_WIDE_INT unsorted_offsets[4];
int order[4];
- int base_reg;
+ int base_reg = -1;
int i;
/* Can only handle 2, 3, or 4 insns at present, though could be easily
rtx *operands;
{
HOST_WIDE_INT in_words_to_go, out_words_to_go, last_bytes;
- int i, r;
+ int i;
rtx src, dst;
- rtx st_src, st_dst, end_src, end_dst, fin_src, fin_dst;
+ rtx st_src, st_dst, fin_src, fin_dst;
rtx part_bytes_reg = NULL;
rtx mem;
int dst_unchanging_p, dst_in_struct_p, src_unchanging_p, src_in_struct_p;
case LEU: return CC_DLEUmode;
case GE: return CC_DGEmode;
case GEU: return CC_DGEUmode;
+ default: break;
}
break;
case GEU:
return CC_DGEUmode;
+
+ default:
+ break;
}
abort ();
enum machine_mode mode;
{
int i;
- rtx lab;
HOST_WIDE_INT offset;
if (mode == SImode && GET_CODE (x) == MEM && CONSTANT_P (XEXP (x, 0))
rtx dst = SET_DEST (pat);
int destreg;
enum machine_mode mode = GET_MODE (dst);
+
if (dst == pc_rtx)
return 0;
destreg = REGNO (dst);
else if (GET_CODE (dst) == SUBREG && GET_CODE (SUBREG_REG (dst)) == REG)
destreg = REGNO (SUBREG_REG (dst));
+ else
+ return 0;
return fixit (src, mode, destreg);
}
{
rtx insn;
int count_size;
- int regno;
#if 0
/* The ldr instruction can work with up to a 4k offset, and most constants
PC, so to make things simple we restrict all loads for such functions.
*/
if (TARGET_HARD_FLOAT)
- for (regno = 16; regno < 24; regno++)
- if (regs_ever_live[regno])
- {
- count_size = 1000;
- break;
- }
+ {
+ int regno;
+
+ for (regno = 16; regno < 24; regno++)
+ if (regs_ever_live[regno])
+ {
+ count_size = 1000;
+ break;
+ }
+ }
#else
count_size = 1000;
#endif /* 0 */
int frame_size;
{
int reg, live_regs_mask = 0;
- rtx operands[3];
int volatile_func = (optimize > 0
&& TREE_THIS_VOLATILE (current_function_decl));
int reg;
rtx amount = GEN_INT (-(get_frame_size ()
+ current_function_outgoing_args_size));
- rtx push_insn;
- int num_regs;
int live_regs_mask = 0;
int store_arg_regs = 0;
int volatile_func = (optimize > 0