aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/arm/arm.c')
-rw-r--r--gcc/config/arm/arm.c284
1 files changed, 150 insertions, 134 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index d2c037c..be1fa62 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -94,14 +94,15 @@ const char * structure_size_string = NULL;
int arm_structure_size_boundary = 32; /* Used to be 8 */
/* Bit values used to identify processor capabilities. */
-#define FL_CO_PROC 0x01 /* Has external co-processor bus */
-#define FL_FAST_MULT 0x02 /* Fast multiply */
-#define FL_MODE26 0x04 /* 26-bit mode support */
-#define FL_MODE32 0x08 /* 32-bit mode support */
-#define FL_ARCH4 0x10 /* Architecture rel 4 */
-#define FL_THUMB 0x20 /* Thumb aware */
-#define FL_LDSCHED 0x40 /* Load scheduling necessary */
-#define FL_STRONG 0x80 /* StrongARM */
+#define FL_CO_PROC (1 << 0) /* Has external co-processor bus */
+#define FL_FAST_MULT (1 << 1) /* Fast multiply */
+#define FL_MODE26 (1 << 2) /* 26-bit mode support */
+#define FL_MODE32 (1 << 3) /* 32-bit mode support */
+#define FL_ARCH4 (1 << 4) /* Architecture rel 4 */
+#define FL_ARCH5 (1 << 5) /* Architecture rel 5 */
+#define FL_THUMB (1 << 6) /* Thumb aware */
+#define FL_LDSCHED (1 << 7) /* Load scheduling necessary */
+#define FL_STRONG (1 << 8) /* StrongARM */
/* The bits in this mask specify which instructions we are allowed to generate. */
static int insn_flags = 0;
@@ -120,6 +121,9 @@ int arm_fast_multiply = 0;
/* Nonzero if this chip supports the ARM Architecture 4 extensions */
int arm_arch4 = 0;
+/* Nonzero if this chip supports the ARM Architecture 5 extensions */
+int arm_arch5 = 0;
+
/* Nonzero if this chip can benefit from load scheduling. */
int arm_ld_sched = 0;
@@ -229,15 +233,16 @@ static struct processors all_architectures[] =
{
/* ARM Architectures */
- {"armv2", FL_CO_PROC | FL_MODE26 },
- {"armv2a", FL_CO_PROC | FL_MODE26 },
- {"armv3", FL_CO_PROC | FL_MODE26 | FL_MODE32 },
- {"armv3m", FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_FAST_MULT },
- {"armv4", FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 },
+ { "armv2", FL_CO_PROC | FL_MODE26 },
+ { "armv2a", FL_CO_PROC | FL_MODE26 },
+ { "armv3", FL_CO_PROC | FL_MODE26 | FL_MODE32 },
+ { "armv3m", FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_FAST_MULT },
+ { "armv4", FL_CO_PROC | FL_MODE26 | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 },
/* Strictly, FL_MODE26 is a permitted option for v4t, but there are no
implementations that support it, so we will leave it out for now. */
- {"armv4t", FL_CO_PROC | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB },
- {NULL, 0}
+ { "armv4t", FL_CO_PROC | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB },
+ { "armv5", FL_CO_PROC | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 },
+ { NULL, 0 }
};
/* This is a magic stucture. The 'string' field is magically filled in
@@ -494,6 +499,7 @@ arm_override_options ()
/* Initialise boolean versions of the flags, for use in the arm.md file. */
arm_fast_multiply = insn_flags & FL_FAST_MULT;
arm_arch4 = insn_flags & FL_ARCH4;
+ arm_arch5 = insn_flags & FL_ARCH5;
arm_ld_sched = tune_flags & FL_LDSCHED;
arm_is_strong = tune_flags & FL_STRONG;
@@ -1279,7 +1285,7 @@ arm_gen_constant (code, mode, val, target, source, subtargets, generate)
enum rtx_code
arm_canonicalize_comparison (code, op1)
enum rtx_code code;
- rtx *op1;
+ rtx * op1;
{
unsigned HOST_WIDE_INT i = INTVAL (*op1);
@@ -1538,7 +1544,7 @@ legitimize_pic_address (orig, mode, reg)
static rtx pic_rtx;
int
-is_pic(x)
+is_pic (x)
rtx x;
{
if (x == pic_rtx)
@@ -1876,7 +1882,8 @@ arm_adjust_cost (insn, link, dep, cost)
static int fpa_consts_inited = 0;
-char *strings_fpa[8] = {
+char * strings_fpa[8] =
+{
"0", "1", "2", "3",
"4", "5", "0.5", "10"
};
@@ -2401,7 +2408,7 @@ int
symbol_mentioned_p (x)
rtx x;
{
- register char *fmt;
+ register char * fmt;
register int i;
if (GET_CODE (x) == SYMBOL_REF)
@@ -2430,7 +2437,7 @@ int
label_mentioned_p (x)
rtx x;
{
- register char *fmt;
+ register char * fmt;
register int i;
if (GET_CODE (x) == LABEL_REF)
@@ -2647,11 +2654,11 @@ store_multiple_operation (op, mode)
int
load_multiple_sequence (operands, nops, regs, base, load_offset)
- rtx *operands;
+ rtx * operands;
int nops;
- int *regs;
- int *base;
- HOST_WIDE_INT *load_offset;
+ int * regs;
+ int * base;
+ HOST_WIDE_INT * load_offset;
{
int unsorted_regs[4];
HOST_WIDE_INT unsorted_offsets[4];
@@ -2820,7 +2827,7 @@ load_multiple_sequence (operands, nops, regs, base, load_offset)
char *
emit_ldm_seq (operands, nops)
- rtx *operands;
+ rtx * operands;
int nops;
{
int regs[4];
@@ -2880,11 +2887,11 @@ emit_ldm_seq (operands, nops)
int
store_multiple_sequence (operands, nops, regs, base, load_offset)
- rtx *operands;
+ rtx * operands;
int nops;
- int *regs;
- int *base;
- HOST_WIDE_INT *load_offset;
+ int * regs;
+ int * base;
+ HOST_WIDE_INT * load_offset;
{
int unsorted_regs[4];
HOST_WIDE_INT unsorted_offsets[4];
@@ -2933,7 +2940,7 @@ store_multiple_sequence (operands, nops, regs, base, load_offset)
{
if (i == 0)
{
- base_reg = REGNO(reg);
+ base_reg = REGNO (reg);
unsorted_regs[0] = (GET_CODE (operands[i]) == REG
? REGNO (operands[i])
: REGNO (SUBREG_REG (operands[i])));
@@ -3017,7 +3024,7 @@ store_multiple_sequence (operands, nops, regs, base, load_offset)
char *
emit_stm_seq (operands, nops)
- rtx *operands;
+ rtx * operands;
int nops;
{
int regs[4];
@@ -3209,7 +3216,7 @@ arm_gen_store_multiple (base_regno, count, to, up, write_back, unchanging_p,
int
arm_gen_movstrqi (operands)
- rtx *operands;
+ rtx * operands;
{
HOST_WIDE_INT in_words_to_go, out_words_to_go, last_bytes;
int i;
@@ -3291,27 +3298,27 @@ arm_gen_movstrqi (operands)
/* OUT_WORDS_TO_GO will be zero here if there are byte stores to do. */
if (out_words_to_go)
- {
- rtx sreg;
-
- mem = gen_rtx_MEM (SImode, src);
- RTX_UNCHANGING_P (mem) = src_unchanging_p;
- MEM_IN_STRUCT_P (mem) = src_in_struct_p;
- MEM_SCALAR_P (mem) = src_scalar_p;
- emit_move_insn (sreg = gen_reg_rtx (SImode), mem);
- emit_move_insn (fin_src = gen_reg_rtx (SImode), plus_constant (src, 4));
-
- mem = gen_rtx_MEM (SImode, dst);
- RTX_UNCHANGING_P (mem) = dst_unchanging_p;
- MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
- MEM_SCALAR_P (mem) = dst_scalar_p;
- emit_move_insn (mem, sreg);
- emit_move_insn (fin_dst = gen_reg_rtx (SImode), plus_constant (dst, 4));
- in_words_to_go--;
-
- if (in_words_to_go) /* Sanity check */
- abort ();
- }
+ {
+ rtx sreg;
+
+ mem = gen_rtx_MEM (SImode, src);
+ RTX_UNCHANGING_P (mem) = src_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = src_in_struct_p;
+ MEM_SCALAR_P (mem) = src_scalar_p;
+ emit_move_insn (sreg = gen_reg_rtx (SImode), mem);
+ emit_move_insn (fin_src = gen_reg_rtx (SImode), plus_constant (src, 4));
+
+ mem = gen_rtx_MEM (SImode, dst);
+ RTX_UNCHANGING_P (mem) = dst_unchanging_p;
+ MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
+ MEM_SCALAR_P (mem) = dst_scalar_p;
+ emit_move_insn (mem, sreg);
+ emit_move_insn (fin_dst = gen_reg_rtx (SImode), plus_constant (dst, 4));
+ in_words_to_go--;
+
+ if (in_words_to_go) /* Sanity check */
+ abort ();
+ }
if (in_words_to_go)
{
@@ -3344,6 +3351,7 @@ arm_gen_movstrqi (operands)
MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
MEM_SCALAR_P (mem) = dst_scalar_p;
emit_move_insn (mem, gen_rtx_SUBREG (QImode, part_bytes_reg, 0));
+
if (--last_bytes)
{
tmp = gen_reg_rtx (SImode);
@@ -3365,6 +3373,7 @@ arm_gen_movstrqi (operands)
MEM_IN_STRUCT_P (mem) = dst_in_struct_p;
MEM_SCALAR_P (mem) = dst_scalar_p;
emit_move_insn (mem, gen_rtx_SUBREG (QImode, part_bytes_reg, 0));
+
if (--last_bytes)
{
rtx tmp = gen_reg_rtx (SImode);
@@ -3613,7 +3622,7 @@ gen_compare_reg (code, x, y)
void
arm_reload_in_hi (operands)
- rtx *operands;
+ rtx * operands;
{
rtx ref = operands[1];
rtx base, scratch;
@@ -3729,7 +3738,7 @@ arm_reload_in_hi (operands)
two scratch registers for some corner cases). */
void
arm_reload_out_hi (operands)
- rtx *operands;
+ rtx * operands;
{
rtx ref = operands[0];
rtx outval = operands[1];
@@ -4047,7 +4056,7 @@ dump_table (scan)
for (i = 0; i < pool_size; i++)
{
- pool_node *p = pool_vector + i;
+ pool_node * p = pool_vector + i;
switch (GET_MODE_SIZE (p->mode))
{
@@ -4362,7 +4371,7 @@ fp_immediate_constant (x)
/* As for fp_immediate_constant, but value is passed directly, not in rtx. */
static char *
fp_const_from_val (r)
- REAL_VALUE_TYPE *r;
+ REAL_VALUE_TYPE * r;
{
int i;
@@ -4383,8 +4392,8 @@ fp_const_from_val (r)
void
print_multi_reg (stream, instr, mask, hat)
- FILE *stream;
- char *instr;
+ FILE * stream;
+ char * instr;
int mask, hat;
{
int i;
@@ -4393,11 +4402,13 @@ print_multi_reg (stream, instr, mask, hat)
fputc ('\t', stream);
fprintf (stream, instr, REGISTER_PREFIX);
fputs (", {", stream);
+
for (i = 0; i < 16; i++)
if (mask & (1 << i))
{
if (not_first)
fprintf (stream, ", ");
+
fprintf (stream, "%s%s", REGISTER_PREFIX, reg_names[i]);
not_first = TRUE;
}
@@ -4409,15 +4420,16 @@ print_multi_reg (stream, instr, mask, hat)
char *
output_call (operands)
- rtx *operands;
+ rtx * operands;
{
/* Handle calls to lr using ip (which may be clobbered in subr anyway). */
- if (REGNO (operands[0]) == 14)
+ if (REGNO (operands[0]) == LR_REGNUM)
{
- operands[0] = gen_rtx_REG (SImode, 12);
+ operands[0] = gen_rtx_REG (SImode, IP_REGNUM);
output_asm_insn ("mov%?\t%0, %|lr", operands);
}
+
output_asm_insn ("mov%?\t%|lr, %|pc", operands);
if (TARGET_THUMB_INTERWORK)
@@ -4430,32 +4442,34 @@ output_call (operands)
static int
eliminate_lr2ip (x)
- rtx *x;
+ rtx * x;
{
int something_changed = 0;
- rtx x0 = *x;
+ rtx x0 = * x;
int code = GET_CODE (x0);
register int i, j;
- register char *fmt;
+ register char * fmt;
switch (code)
{
case REG:
- if (REGNO (x0) == 14)
+ if (REGNO (x0) == LR_REGNUM)
{
- *x = gen_rtx_REG (SImode, 12);
+ *x = gen_rtx_REG (SImode, IP_REGNUM);
return 1;
}
return 0;
default:
/* Scan through the sub-elements and change any references there */
fmt = GET_RTX_FORMAT (code);
+
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
if (fmt[i] == 'e')
something_changed |= eliminate_lr2ip (&XEXP (x0, i));
else if (fmt[i] == 'E')
for (j = 0; j < XVECLEN (x0, i); j++)
something_changed |= eliminate_lr2ip (&XVECEXP (x0, i, j));
+
return something_changed;
}
}
@@ -4464,7 +4478,7 @@ eliminate_lr2ip (x)
char *
output_call_mem (operands)
- rtx *operands;
+ rtx * operands;
{
operands[0] = copy_rtx (operands[0]); /* Be ultra careful */
/* Handle calls using lr by using ip (which may be clobbered in subr anyway).
@@ -4494,13 +4508,13 @@ output_call_mem (operands)
char *
output_mov_long_double_fpu_from_arm (operands)
- rtx *operands;
+ rtx * operands;
{
int arm_reg0 = REGNO (operands[1]);
rtx ops[3];
- if (arm_reg0 == 12)
- abort();
+ if (arm_reg0 == IP_REGNUM)
+ abort ();
ops[0] = gen_rtx_REG (SImode, arm_reg0);
ops[1] = gen_rtx_REG (SImode, 1 + arm_reg0);
@@ -4508,6 +4522,7 @@ output_mov_long_double_fpu_from_arm (operands)
output_asm_insn ("stm%?fd\t%|sp!, {%0, %1, %2}", ops);
output_asm_insn ("ldf%?e\t%0, [%|sp], #12", operands);
+
return "";
}
@@ -4517,13 +4532,13 @@ output_mov_long_double_fpu_from_arm (operands)
char *
output_mov_long_double_arm_from_fpu (operands)
- rtx *operands;
+ rtx * operands;
{
int arm_reg0 = REGNO (operands[0]);
rtx ops[3];
- if (arm_reg0 == 12)
- abort();
+ if (arm_reg0 == IP_REGNUM)
+ abort ();
ops[0] = gen_rtx_REG (SImode, arm_reg0);
ops[1] = gen_rtx_REG (SImode, 1 + arm_reg0);
@@ -4539,7 +4554,7 @@ output_mov_long_double_arm_from_fpu (operands)
OPERANDS[1] is the source. */
char *
output_mov_long_double_arm_from_arm (operands)
- rtx *operands;
+ rtx * operands;
{
/* We have to be careful here because the two might overlap */
int dest_start = REGNO (operands[0]);
@@ -4576,13 +4591,14 @@ output_mov_long_double_arm_from_arm (operands)
char *
output_mov_double_fpu_from_arm (operands)
- rtx *operands;
+ rtx * operands;
{
int arm_reg0 = REGNO (operands[1]);
rtx ops[2];
- if (arm_reg0 == 12)
- abort();
+ if (arm_reg0 == IP_REGNUM)
+ abort ();
+
ops[0] = gen_rtx_REG (SImode, arm_reg0);
ops[1] = gen_rtx_REG (SImode, 1 + arm_reg0);
output_asm_insn ("stm%?fd\t%|sp!, {%0, %1}", ops);
@@ -4596,13 +4612,13 @@ output_mov_double_fpu_from_arm (operands)
char *
output_mov_double_arm_from_fpu (operands)
- rtx *operands;
+ rtx * operands;
{
int arm_reg0 = REGNO (operands[0]);
rtx ops[2];
- if (arm_reg0 == 12)
- abort();
+ if (arm_reg0 == IP_REGNUM)
+ abort ();
ops[0] = gen_rtx_REG (SImode, arm_reg0);
ops[1] = gen_rtx_REG (SImode, 1 + arm_reg0);
@@ -4632,8 +4648,8 @@ output_move_double (operands)
if (code1 == REG)
{
int reg1 = REGNO (operands[1]);
- if (reg1 == 12)
- abort();
+ if (reg1 == IP_REGNUM)
+ abort ();
/* Ensure the second source is not overwritten */
if (reg1 == reg0 + (WORDS_BIG_ENDIAN ? -1 : 1))
@@ -4783,12 +4799,12 @@ output_move_double (operands)
}
}
else
- abort(); /* Constraints should prevent this */
+ abort (); /* Constraints should prevent this */
}
else if (code0 == MEM && code1 == REG)
{
- if (REGNO (operands[1]) == 12)
- abort();
+ if (REGNO (operands[1]) == IP_REGNUM)
+ abort ();
switch (GET_CODE (XEXP (operands[0], 0)))
{
@@ -4840,7 +4856,7 @@ output_move_double (operands)
}
}
else
- abort(); /* Constraints should prevent this */
+ abort (); /* Constraints should prevent this */
return "";
}
@@ -4851,7 +4867,7 @@ output_move_double (operands)
char *
output_mov_immediate (operands)
- rtx *operands;
+ rtx * operands;
{
HOST_WIDE_INT n = INTVAL (operands[1]);
int n_ones = 0;
@@ -4894,7 +4910,7 @@ output_mov_immediate (operands)
char *
output_add_immediate (operands)
- rtx *operands;
+ rtx * operands;
{
HOST_WIDE_INT n = INTVAL (operands[2]);
@@ -4922,8 +4938,8 @@ output_add_immediate (operands)
static char *
output_multi_immediate (operands, instr1, instr2, immed_op, n)
- rtx *operands;
- char *instr1, *instr2;
+ rtx * operands;
+ char * instr1, * instr2;
int immed_op;
HOST_WIDE_INT n;
{
@@ -5001,7 +5017,7 @@ shift_op (op, amountp)
rtx op;
HOST_WIDE_INT *amountp;
{
- char *mnem;
+ char * mnem;
enum rtx_code code = GET_CODE (op);
if (GET_CODE (XEXP (op, 1)) == REG || GET_CODE (XEXP (op, 1)) == SUBREG)
@@ -5092,8 +5108,8 @@ int_log2 (power)
void
output_ascii_pseudo_op (stream, p, len)
- FILE *stream;
- unsigned char *p;
+ FILE * stream;
+ unsigned char * p;
int len;
{
int i;
@@ -5157,11 +5173,11 @@ pattern_really_clobbers_lr (x)
switch (GET_CODE (SET_DEST (x)))
{
case REG:
- return REGNO (SET_DEST (x)) == 14;
+ return REGNO (SET_DEST (x)) == LR_REGNUM;
case SUBREG:
if (GET_CODE (XEXP (SET_DEST (x), 0)) == REG)
- return REGNO (XEXP (SET_DEST (x), 0)) == 14;
+ return REGNO (XEXP (SET_DEST (x), 0)) == LR_REGNUM;
if (GET_CODE (XEXP (SET_DEST (x), 0)) == MEM)
return 0;
@@ -5181,11 +5197,11 @@ pattern_really_clobbers_lr (x)
switch (GET_CODE (XEXP (x, 0)))
{
case REG:
- return REGNO (XEXP (x, 0)) == 14;
+ return REGNO (XEXP (x, 0)) == LR_REGNUM;
case SUBREG:
if (GET_CODE (XEXP (XEXP (x, 0), 0)) == REG)
- return REGNO (XEXP (XEXP (x, 0), 0)) == 14;
+ return REGNO (XEXP (XEXP (x, 0), 0)) == LR_REGNUM;
abort ();
default:
@@ -5295,7 +5311,7 @@ output_return_instruction (operand, really_return, reverse)
return_used_this_function = 1;
- if (volatile_func)
+ if (TARGET_ABORT_NORETURN && volatile_func)
{
rtx ops[2];
/* If this function was declared non-returning, and we have found a tail
@@ -5313,7 +5329,7 @@ output_return_instruction (operand, really_return, reverse)
}
if (current_function_calls_alloca && ! really_return)
- abort();
+ abort ();
for (reg = 0; reg <= 10; reg++)
if (regs_ever_live[reg] && ! call_used_regs[reg])
@@ -5322,7 +5338,7 @@ output_return_instruction (operand, really_return, reverse)
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
live_regs++;
- if (live_regs || (regs_ever_live[14] && ! lr_save_eliminated))
+ if (live_regs || (regs_ever_live[LR_REGNUM] && ! lr_save_eliminated))
live_regs++;
if (frame_pointer_needed)
@@ -5330,7 +5346,7 @@ output_return_instruction (operand, really_return, reverse)
if (live_regs)
{
- if (lr_save_eliminated || ! regs_ever_live[14])
+ if (lr_save_eliminated || ! regs_ever_live[LR_REGNUM])
live_regs++;
if (frame_pointer_needed)
@@ -5341,7 +5357,7 @@ output_return_instruction (operand, really_return, reverse)
reverse ? "ldm%?%D0fd\t%|sp!, {" : "ldm%?%d0fd\t%|sp!, {");
for (reg = 0; reg <= 10; reg++)
- if (regs_ever_live[reg]
+ if (regs_ever_live[reg]
&& (! call_used_regs[reg]
|| (flag_pic && reg == PIC_OFFSET_TABLE_REGNUM)))
{
@@ -5361,15 +5377,15 @@ output_return_instruction (operand, really_return, reverse)
strcat (instr, ", ");
strcat (instr, "%|");
strcat (instr, TARGET_THUMB_INTERWORK || (! really_return)
- ? reg_names[14] : reg_names[15] );
+ ? reg_names[LR_REGNUM] : reg_names[PC_REGNUM] );
}
else
{
strcat (instr, "%|");
if (TARGET_THUMB_INTERWORK && really_return)
- strcat (instr, reg_names[12]);
+ strcat (instr, reg_names[IP_REGNUM]);
else
- strcat (instr, really_return ? reg_names[15] : reg_names[14]);
+ strcat (instr, really_return ? reg_names[PC_REGNUM] : reg_names[LR_REGNUM]);
}
strcat (instr, (TARGET_APCS_32 || !really_return) ? "}" : "}^");
output_asm_insn (instr, &operand);
@@ -5508,13 +5524,13 @@ output_func_prologue (f, frame_size)
if (frame_pointer_needed)
live_regs_mask |= 0xD800;
- else if (regs_ever_live[14])
+ else if (regs_ever_live[LR_REGNUM])
{
if (! current_function_args_size
&& ! function_really_clobbers_lr (get_insns ()))
lr_save_eliminated = 1;
else
- live_regs_mask |= 0x4000;
+ live_regs_mask |= 1 << LR_REGNUM;
}
if (live_regs_mask)
@@ -5524,7 +5540,7 @@ output_func_prologue (f, frame_size)
doing so, in this case we need to push lr as well, or we
will fail to get a proper return. */
- live_regs_mask |= 0x4000;
+ live_regs_mask |= 1 << LR_REGNUM;
lr_save_eliminated = 0;
}
@@ -5543,7 +5559,7 @@ output_func_prologue (f, frame_size)
void
output_func_epilogue (f, frame_size)
- FILE *f;
+ FILE * f;
int frame_size;
{
int reg, live_regs_mask = 0;
@@ -5701,12 +5717,12 @@ output_func_epilogue (f, frame_size)
reg - start_reg, REGISTER_PREFIX);
}
- if (current_function_pretend_args_size == 0 && regs_ever_live[14])
+ if (current_function_pretend_args_size == 0 && regs_ever_live[LR_REGNUM])
{
if (TARGET_THUMB_INTERWORK)
{
if (! lr_save_eliminated)
- live_regs_mask |= 0x4000;
+ live_regs_mask |= 1 << LR_REGNUM;
if (live_regs_mask != 0)
print_multi_reg (f, "ldmfd\t%ssp!", live_regs_mask, FALSE);
@@ -5723,11 +5739,11 @@ output_func_epilogue (f, frame_size)
}
else
{
- if (live_regs_mask || regs_ever_live[14])
+ if (live_regs_mask || regs_ever_live[LR_REGNUM])
{
/* Restore the integer regs, and the return address into lr */
if (! lr_save_eliminated)
- live_regs_mask |= 0x4000;
+ live_regs_mask |= 1 << LR_REGNUM;
if (live_regs_mask != 0)
print_multi_reg (f, "ldmfd\t%ssp!", live_regs_mask, FALSE);
@@ -5856,14 +5872,14 @@ arm_expand_prologue ()
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
live_regs_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
- if (regs_ever_live[14])
- live_regs_mask |= 0x4000;
+ if (regs_ever_live[LR_REGNUM])
+ live_regs_mask |= 1 << LR_REGNUM;
}
if (frame_pointer_needed)
{
live_regs_mask |= 0xD800;
- emit_insn (gen_movsi (gen_rtx_REG (SImode, 12),
+ emit_insn (gen_movsi (gen_rtx_REG (SImode, IP_REGNUM),
stack_pointer_rtx));
}
@@ -5881,7 +5897,7 @@ arm_expand_prologue ()
{
/* If we have to push any regs, then we must push lr as well, or
we won't get a proper return. */
- live_regs_mask |= 0x4000;
+ live_regs_mask |= 1 << LR_REGNUM;
emit_multi_reg_push (live_regs_mask);
}
@@ -5928,7 +5944,7 @@ arm_expand_prologue ()
}
if (frame_pointer_needed)
- emit_insn (gen_addsi3 (hard_frame_pointer_rtx, gen_rtx_REG (SImode, 12),
+ emit_insn (gen_addsi3 (hard_frame_pointer_rtx, gen_rtx_REG (SImode, IP_REGNUM),
(GEN_INT
(-(4 + current_function_pretend_args_size)))));
@@ -5963,7 +5979,7 @@ arm_expand_prologue ()
void
arm_print_operand (stream, x, code)
- FILE *stream;
+ FILE * stream;
rtx x;
int code;
{
@@ -6586,17 +6602,17 @@ arm_final_prescan_insn (insn)
rtx aof_pic_label = NULL_RTX;
struct pic_chain
{
- struct pic_chain *next;
- char *symname;
+ struct pic_chain * next;
+ char * symname;
};
-static struct pic_chain *aof_pic_chain = NULL;
+static struct pic_chain * aof_pic_chain = NULL;
rtx
aof_pic_entry (x)
rtx x;
{
- struct pic_chain **chainp;
+ struct pic_chain ** chainp;
int offset;
if (aof_pic_label == NULL_RTX)
@@ -6620,9 +6636,9 @@ aof_pic_entry (x)
void
aof_dump_pic_table (f)
- FILE *f;
+ FILE * f;
{
- struct pic_chain *chain;
+ struct pic_chain * chain;
if (aof_pic_chain == NULL)
return;
@@ -6675,17 +6691,17 @@ aof_data_section ()
struct import
{
- struct import *next;
- char *name;
+ struct import * next;
+ char * name;
};
-static struct import *imports_list = NULL;
+static struct import * imports_list = NULL;
void
aof_add_import (name)
- char *name;
+ char * name;
{
- struct import *new;
+ struct import * new;
for (new = imports_list; new; new = new->next)
if (new->name == name)
@@ -6699,9 +6715,9 @@ aof_add_import (name)
void
aof_delete_import (name)
- char *name;
+ char * name;
{
- struct import **old;
+ struct import ** old;
for (old = &imports_list; *old; old = & (*old)->next)
{
@@ -6717,7 +6733,7 @@ int arm_main_function = 0;
void
aof_dump_imports (f)
- FILE *f;
+ FILE * f;
{
/* The AOF assembler needs this to cause the startup code to be extracted
from the library. Brining in __main causes the whole thing to work