Commit 46b9a73c by Richard Sandiford Committed by Richard Sandiford

invoke.texi: Remove documentation of -mentry.

	* doc/invoke.texi: Remove documentation of -mentry.
	* config/mips/mips.c (mips_entry_string, mips_entry): Remove.
	(override_options, mips_save_reg_p): Remove handling.
	(compute_frame_size, mips_output_function_prologue): Likewise.
	(mips_expand_prologue, mips_expand_epilogue): Likewise.
	* config/mips/mips.h (mips_entry_string): Remove declaration.
	(TARGET_OPTIONS): Remove -mentry.
	* config/mips/mips16.S: Remove mention of -mentry.

From-SVN: r72180
parent 85363ca0
2003-10-07 Richard Sandiford <rsandifo@redhat.com>
* doc/invoke.texi: Remove documentation of -mentry.
* config/mips/mips.c (mips_entry_string, mips_entry): Remove.
(override_options, mips_save_reg_p): Remove handling.
(compute_frame_size, mips_output_function_prologue): Likewise.
(mips_expand_prologue, mips_expand_epilogue): Likewise.
* config/mips/mips.h (mips_entry_string): Remove declaration.
(TARGET_OPTIONS): Remove -mentry.
* config/mips/mips16.S: Remove mention of -mentry.
2003-10-06 Zack Weinberg <zack@codesourcery.com> 2003-10-06 Zack Weinberg <zack@codesourcery.com>
* libfuncs.h (LTI_extendsfdf2, LTI_extendsfxf2, LTI_extendsftf2) * libfuncs.h (LTI_extendsfdf2, LTI_extendsfxf2, LTI_extendsftf2)
......
...@@ -488,16 +488,8 @@ const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */ ...@@ -488,16 +488,8 @@ const char *mips_abi_string; /* for -mabi={32,n32,64,eabi} */
should arrange to call mips32 hard floating point code. */ should arrange to call mips32 hard floating point code. */
int mips16_hard_float; int mips16_hard_float;
/* This variable is set by -mentry. We only care whether -mentry
appears or not, and using a string in this fashion is just a way to
avoid using up another bit in target_flags. */
const char *mips_entry_string;
const char *mips_cache_flush_func = CACHE_FLUSH_FUNC; const char *mips_cache_flush_func = CACHE_FLUSH_FUNC;
/* Whether we should entry and exit pseudo-ops in mips16 mode. */
int mips_entry;
/* If TRUE, we split addresses into their high and low parts in the RTL. */ /* If TRUE, we split addresses into their high and low parts in the RTL. */
int mips_split_addresses; int mips_split_addresses;
...@@ -4837,19 +4829,6 @@ override_options (void) ...@@ -4837,19 +4829,6 @@ override_options (void)
target_flags &= ~MASK_EXPLICIT_RELOCS; target_flags &= ~MASK_EXPLICIT_RELOCS;
} }
/* We put -mentry in TARGET_OPTIONS rather than TARGET_SWITCHES only
to avoid using up another bit in target_flags. */
if (mips_entry_string != NULL)
{
if (*mips_entry_string != '\0')
error ("invalid option `entry%s'", mips_entry_string);
if (! TARGET_MIPS16)
warning ("-mentry is only meaningful with -mips-16");
else
mips_entry = 1;
}
/* When using explicit relocs, we call dbr_schedule from within /* When using explicit relocs, we call dbr_schedule from within
mips_reorg. */ mips_reorg. */
if (TARGET_EXPLICIT_RELOCS) if (TARGET_EXPLICIT_RELOCS)
...@@ -6030,23 +6009,15 @@ mips_save_reg_p (unsigned int regno) ...@@ -6030,23 +6009,15 @@ mips_save_reg_p (unsigned int regno)
if (regno == GP_REG_FIRST + 18 && regs_ever_live[regno]) if (regno == GP_REG_FIRST + 18 && regs_ever_live[regno])
return true; return true;
/* $31 is also a special case. When not using -mentry, it will be /* $31 is also a special case. It will be used to copy a return
used to copy a return value into the floating point registers if value into the floating point registers if the return value is
the return value is floating point. */ floating point. */
if (regno == GP_REG_FIRST + 31 if (regno == GP_REG_FIRST + 31
&& mips16_hard_float && mips16_hard_float
&& !mips_entry
&& !aggregate_value_p (return_type, current_function_decl) && !aggregate_value_p (return_type, current_function_decl)
&& GET_MODE_CLASS (DECL_MODE (return_type)) == MODE_FLOAT && GET_MODE_CLASS (DECL_MODE (return_type)) == MODE_FLOAT
&& GET_MODE_SIZE (DECL_MODE (return_type)) <= UNITS_PER_FPVALUE) && GET_MODE_SIZE (DECL_MODE (return_type)) <= UNITS_PER_FPVALUE)
return true; return true;
/* The entry and exit pseudo instructions can not save $17
without also saving $16. */
if (mips_entry
&& regno == GP_REG_FIRST + 16
&& mips_save_reg_p (GP_REG_FIRST + 17))
return true;
} }
return false; return false;
...@@ -6187,10 +6158,6 @@ compute_frame_size (HOST_WIDE_INT size) ...@@ -6187,10 +6158,6 @@ compute_frame_size (HOST_WIDE_INT size)
if (mips_abi != ABI_32 && mips_abi != ABI_O64) if (mips_abi != ABI_32 && mips_abi != ABI_O64)
total_size += MIPS_STACK_ALIGN (current_function_pretend_args_size); total_size += MIPS_STACK_ALIGN (current_function_pretend_args_size);
/* The entry pseudo instruction will allocate 32 bytes on the stack. */
if (mips_entry && total_size > 0 && total_size < 32)
total_size = 32;
/* Save other computed information. */ /* Save other computed information. */
cfun->machine->frame.total_size = total_size; cfun->machine->frame.total_size = total_size;
cfun->machine->frame.var_size = var_size; cfun->machine->frame.var_size = var_size;
...@@ -6207,13 +6174,7 @@ compute_frame_size (HOST_WIDE_INT size) ...@@ -6207,13 +6174,7 @@ compute_frame_size (HOST_WIDE_INT size)
{ {
unsigned long offset; unsigned long offset;
/* When using mips_entry, the registers are always saved at the offset = args_size + var_size + gp_reg_size - GET_MODE_SIZE (gpr_mode);
top of the stack. */
if (! mips_entry)
offset = args_size + var_size + gp_reg_size - GET_MODE_SIZE (gpr_mode);
else
offset = total_size - GET_MODE_SIZE (gpr_mode);
cfun->machine->frame.gp_sp_offset = offset; cfun->machine->frame.gp_sp_offset = offset;
cfun->machine->frame.gp_save_offset = offset - total_size; cfun->machine->frame.gp_save_offset = offset - total_size;
} }
...@@ -6650,121 +6611,6 @@ mips_output_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) ...@@ -6650,121 +6611,6 @@ mips_output_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
HIGHEST_GP_SAVED == *FRAMEREG + FRAMESIZE + GPOFFSET => can find saved regs. */ HIGHEST_GP_SAVED == *FRAMEREG + FRAMESIZE + GPOFFSET => can find saved regs. */
} }
if (mips_entry && ! mips_can_use_return_insn ())
{
int save16 = BITSET_P (cfun->machine->frame.mask, 16);
int save17 = BITSET_P (cfun->machine->frame.mask, 17);
int save31 = BITSET_P (cfun->machine->frame.mask, 31);
int savearg = 0;
rtx insn;
/* Look through the initial insns to see if any of them store
the function parameters into the incoming parameter storage
area. If they do, we delete the insn, and save the register
using the entry pseudo-instruction instead. We don't try to
look past a label, jump, or call. */
for (insn = get_insns (); insn != NULL_RTX; insn = NEXT_INSN (insn))
{
rtx note, set, src, dest, base, offset;
int hireg;
if (GET_CODE (insn) == CODE_LABEL
|| GET_CODE (insn) == JUMP_INSN
|| GET_CODE (insn) == CALL_INSN)
break;
if (GET_CODE (insn) != INSN)
continue;
set = PATTERN (insn);
if (GET_CODE (set) != SET)
continue;
/* An insn storing a function parameter will still have a
REG_EQUIV note on it mentioning the argument pointer. */
note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
if (note == NULL_RTX)
continue;
if (! reg_mentioned_p (arg_pointer_rtx, XEXP (note, 0)))
continue;
src = SET_SRC (set);
if (GET_CODE (src) != REG
|| REGNO (src) < GP_REG_FIRST + 4
|| REGNO (src) > GP_REG_FIRST + 7)
continue;
dest = SET_DEST (set);
if (GET_CODE (dest) != MEM)
continue;
if (GET_MODE_SIZE (GET_MODE (dest)) == (unsigned) UNITS_PER_WORD)
;
else if (GET_MODE_SIZE (GET_MODE (dest)) == (unsigned)2 * UNITS_PER_WORD
&& REGNO (src) < GP_REG_FIRST + 7)
;
else
continue;
offset = const0_rtx;
base = eliminate_constant_term (XEXP (dest, 0), &offset);
if (GET_CODE (base) != REG
|| GET_CODE (offset) != CONST_INT)
continue;
if (REGNO (base) == (unsigned) STACK_POINTER_REGNUM
&& INTVAL (offset) == tsize + (REGNO (src) - 4) * UNITS_PER_WORD)
;
else if (REGNO (base) == (unsigned) HARD_FRAME_POINTER_REGNUM
&& (INTVAL (offset)
== (tsize
+ (REGNO (src) - 4) * UNITS_PER_WORD
- current_function_outgoing_args_size)))
;
else
continue;
/* This insn stores a parameter onto the stack, in the same
location where the entry pseudo-instruction will put it.
Delete the insn, and arrange to tell the entry
instruction to save the register. */
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
NOTE_SOURCE_FILE (insn) = 0;
hireg = (REGNO (src)
+ HARD_REGNO_NREGS (REGNO (src), GET_MODE (dest))
- 1);
if (hireg > savearg)
savearg = hireg;
}
/* If this is a varargs function, we need to save all the
registers onto the stack anyhow. */
if (current_function_stdarg)
savearg = GP_REG_FIRST + 7;
fprintf (file, "\tentry\t");
if (savearg > 0)
{
if (savearg == GP_REG_FIRST + 4)
fprintf (file, "%s", reg_names[savearg]);
else
fprintf (file, "%s-%s", reg_names[GP_REG_FIRST + 4],
reg_names[savearg]);
}
if (save16 || save17)
{
if (savearg > 0)
fprintf (file, ",");
fprintf (file, "%s", reg_names[GP_REG_FIRST + 16]);
if (save17)
fprintf (file, "-%s", reg_names[GP_REG_FIRST + 17]);
}
if (save31)
{
if (savearg > 0 || save16 || save17)
fprintf (file, ",");
fprintf (file, "%s", reg_names[GP_REG_FIRST + 31]);
}
fprintf (file, "\n");
}
if (TARGET_ABICALLS && !TARGET_NEWABI && cfun->machine->global_pointer > 0) if (TARGET_ABICALLS && !TARGET_NEWABI && cfun->machine->global_pointer > 0)
{ {
/* Handle the initialization of $gp for SVR4 PIC. */ /* Handle the initialization of $gp for SVR4 PIC. */
...@@ -6809,7 +6655,6 @@ mips_expand_prologue (void) ...@@ -6809,7 +6655,6 @@ mips_expand_prologue (void)
tree fnargs = DECL_ARGUMENTS (fndecl); tree fnargs = DECL_ARGUMENTS (fndecl);
tree cur_arg; tree cur_arg;
CUMULATIVE_ARGS args_so_far; CUMULATIVE_ARGS args_so_far;
rtx reg_18_save = NULL_RTX;
if (cfun->machine->global_pointer > 0) if (cfun->machine->global_pointer > 0)
REGNO (pic_offset_table_rtx) = cfun->machine->global_pointer; REGNO (pic_offset_table_rtx) = cfun->machine->global_pointer;
...@@ -6848,83 +6693,6 @@ mips_expand_prologue (void) ...@@ -6848,83 +6693,6 @@ mips_expand_prologue (void)
tsize = compute_frame_size (get_frame_size ()); tsize = compute_frame_size (get_frame_size ());
/* If we are using the entry pseudo instruction, it will
automatically subtract 32 from the stack pointer, so we don't
need to. The entry pseudo instruction is emitted by
function_prologue. */
if (mips_entry && ! mips_can_use_return_insn ())
{
if (tsize > 0 && tsize <= 32 && frame_pointer_needed)
{
rtx insn;
/* If we are using a frame pointer with a small stack frame,
we need to initialize it here since it won't be done
below. */
if (TARGET_MIPS16 && current_function_outgoing_args_size != 0)
{
rtx incr = GEN_INT (current_function_outgoing_args_size);
if (Pmode == DImode)
insn = emit_insn (gen_adddi3 (hard_frame_pointer_rtx,
stack_pointer_rtx,
incr));
else
insn = emit_insn (gen_addsi3 (hard_frame_pointer_rtx,
stack_pointer_rtx,
incr));
}
else if (Pmode == DImode)
insn = emit_insn (gen_movdi (hard_frame_pointer_rtx,
stack_pointer_rtx));
else
insn = emit_insn (gen_movsi (hard_frame_pointer_rtx,
stack_pointer_rtx));
RTX_FRAME_RELATED_P (insn) = 1;
}
/* We may need to save $18, if it is used to call a function
which may return a floating point value. Set up a sequence
of instructions to do so. Later on we emit them at the right
moment. */
if (TARGET_MIPS16 && BITSET_P (cfun->machine->frame.mask, 18))
{
rtx reg_rtx = gen_rtx (REG, gpr_mode, GP_REG_FIRST + 3);
long gp_offset, base_offset;
gp_offset = cfun->machine->frame.gp_sp_offset;
if (BITSET_P (cfun->machine->frame.mask, 16))
gp_offset -= UNITS_PER_WORD;
if (BITSET_P (cfun->machine->frame.mask, 17))
gp_offset -= UNITS_PER_WORD;
if (BITSET_P (cfun->machine->frame.mask, 31))
gp_offset -= UNITS_PER_WORD;
if (tsize > 32767)
base_offset = tsize;
else
base_offset = 0;
start_sequence ();
emit_move_insn (reg_rtx,
gen_rtx (REG, gpr_mode, GP_REG_FIRST + 18));
emit_move_insn (gen_rtx (MEM, gpr_mode,
gen_rtx (PLUS, Pmode, stack_pointer_rtx,
GEN_INT (gp_offset
- base_offset))),
reg_rtx);
reg_18_save = get_insns ();
end_sequence ();
}
if (tsize > 32)
tsize -= 32;
else
{
tsize = 0;
if (reg_18_save != NULL_RTX)
emit_insn (reg_18_save);
}
}
if (tsize > 0) if (tsize > 0)
{ {
rtx tsize_rtx = GEN_INT (tsize); rtx tsize_rtx = GEN_INT (tsize);
...@@ -6953,10 +6721,7 @@ mips_expand_prologue (void) ...@@ -6953,10 +6721,7 @@ mips_expand_prologue (void)
plus_constant (stack_pointer_rtx, -tsize))); plus_constant (stack_pointer_rtx, -tsize)));
} }
if (! mips_entry) save_restore_insns (1, tmp_rtx, tsize);
save_restore_insns (1, tmp_rtx, tsize);
else if (reg_18_save != NULL_RTX)
emit_insn (reg_18_save);
if (TARGET_ABICALLS && !TARGET_NEWABI && !current_function_is_leaf) if (TARGET_ABICALLS && !TARGET_NEWABI && !current_function_is_leaf)
emit_insn (gen_cprestore emit_insn (gen_cprestore
...@@ -7129,9 +6894,6 @@ mips_expand_epilogue (int sibcall_p) ...@@ -7129,9 +6894,6 @@ mips_expand_epilogue (int sibcall_p)
return; return;
} }
if (mips_entry && ! mips_can_use_return_insn ())
tsize -= 32;
if (tsize > 32767 && ! TARGET_MIPS16) if (tsize > 32767 && ! TARGET_MIPS16)
{ {
tmp_rtx = gen_rtx_REG (Pmode, MIPS_TEMP1_REGNUM); tmp_rtx = gen_rtx_REG (Pmode, MIPS_TEMP1_REGNUM);
......
...@@ -121,7 +121,6 @@ extern const char *mips_arch_string; /* for -march=<xxx> */ ...@@ -121,7 +121,6 @@ extern const char *mips_arch_string; /* for -march=<xxx> */
extern const char *mips_tune_string; /* for -mtune=<xxx> */ extern const char *mips_tune_string; /* for -mtune=<xxx> */
extern const char *mips_isa_string; /* for -mips{1,2,3,4} */ extern const char *mips_isa_string; /* for -mips{1,2,3,4} */
extern const char *mips_abi_string; /* for -mabi={32,n32,64} */ extern const char *mips_abi_string; /* for -mabi={32,n32,64} */
extern const char *mips_entry_string; /* for -mentry */
extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */ extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */
extern int mips_string_length; /* length of strings for mips16 */ extern int mips_string_length; /* length of strings for mips16 */
extern const struct mips_cpu_info mips_cpu_info_table[]; extern const struct mips_cpu_info mips_cpu_info_table[];
...@@ -731,8 +730,6 @@ extern const struct mips_cpu_info *mips_tune_info; ...@@ -731,8 +730,6 @@ extern const struct mips_cpu_info *mips_tune_info;
N_("Specify an ABI"), 0}, \ N_("Specify an ABI"), 0}, \
{ "ips", &mips_isa_string, \ { "ips", &mips_isa_string, \
N_("Specify a Standard MIPS ISA"), 0}, \ N_("Specify a Standard MIPS ISA"), 0}, \
{ "entry", &mips_entry_string, \
N_("Use mips16 entry/exit psuedo ops"), 0}, \
{ "no-flush-func", &mips_cache_flush_func, \ { "no-flush-func", &mips_cache_flush_func, \
N_("Don't call any cache flush functions"), 0}, \ N_("Don't call any cache flush functions"), 0}, \
{ "flush-func=", &mips_cache_flush_func, \ { "flush-func=", &mips_cache_flush_func, \
......
...@@ -387,9 +387,9 @@ STARTFN (__mips16_fixdfsi) ...@@ -387,9 +387,9 @@ STARTFN (__mips16_fixdfsi)
#endif /* !__mips_single_float */ #endif /* !__mips_single_float */
/* These functions are used to return floating point values from /* These functions are used to return floating point values from
mips16 functions which do not use -mentry. In this case we can mips16 functions. In this case we can put mtc1 in a jump delay slot,
put mtc1 in a jump delay slot, because we know that the next because we know that the next instruction will not refer to a floating
instruction will not refer to a floating point register. */ point register. */
#ifdef L_m16retsf #ifdef L_m16retsf
STARTFN (__mips16_ret_sf) STARTFN (__mips16_ret_sf)
......
...@@ -8307,11 +8307,6 @@ Turns on @option{-msingle-float}, @option{-mmad}, and, at least for now, ...@@ -8307,11 +8307,6 @@ Turns on @option{-msingle-float}, @option{-mmad}, and, at least for now,
@opindex mno-mips16 @opindex mno-mips16
Enable 16-bit instructions. Enable 16-bit instructions.
@item -mentry
@opindex mentry
Use the entry and exit pseudo ops. This option can only be used with
@option{-mips16}.
@item -EL @item -EL
@opindex EL @opindex EL
Compile code for the processor in little endian mode. Compile code for the processor in little endian mode.
......
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