(mips_select_rtx_section, mips_select_section): New functions.

(mips_select_rtx_section, mips_select_section): New
functions.  Prefer rdata when TARGET_EMBEDDED_DATA, and prefer
sdata otherwise.

From-SVN: r7031
This commit is contained in:
Jim Wilson 1994-04-11 10:36:16 -07:00
parent 365c6a0bb8
commit 9753d4e4b1
1 changed files with 77 additions and 0 deletions

View File

@ -5185,3 +5185,80 @@ simple_epilogue_p ()
return (compute_frame_size (get_frame_size ())) == 0;
}
/* Choose the section to use for the constant rtx expression X that has
mode MODE. */
mips_select_rtx_section (mode, x)
enum machine_mode mode;
rtx x;
{
if (TARGET_EMBEDDED_DATA)
{
/* For embedded applications, always put constants in read-only data,
in order to reduce RAM usage. */
rdata_section ();
}
else
{
/* For hosted applications, always put constants in small data if
possible, as this gives the best performance. */
if (GET_MODE_SIZE (mode) <= mips_section_threshold
&& mips_section_threshold > 0)
sdata_section ();
else
rdata_section ();
}
}
/* Choose the section to use for DECL. RELOC is true if its value contains
any relocatable expression. */
mips_select_section (decl, reloc)
tree decl;
int reloc;
{
int size = int_size_in_bytes (TREE_TYPE (decl));
if (TARGET_EMBEDDED_DATA)
{
/* For embedded applications, always put an object in read-only data
if possible, in order to reduce RAM usage. */
if (((TREE_READONLY (decl) && !TREE_SIDE_EFFECTS (decl)
&& DECL_INITIAL (decl)
&& (DECL_INITIAL (decl) == error_mark_node
|| TREE_CONSTANT (DECL_INITIAL (decl))))
/* Deal with calls from output_constant_def_contents. */
|| (TREE_CODE (decl) != VAR_DECL
&& (TREE_CODE (decl) != STRING_CST
|| !flag_writable_strings)))
&& ! (flag_pic && reloc))
rdata_section ();
else if (size > 0 && size <= mips_section_threshold)
sdata_section ();
else
data_section ();
}
else
{
/* For hosted applications, always put an object in small data if
possible, as this gives the best performance. */
if (size > 0 && size <= mips_section_threshold)
sdata_section ();
else if (((TREE_READONLY (decl) && !TREE_SIDE_EFFECTS (decl)
&& DECL_INITIAL (decl)
&& (DECL_INITIAL (decl) == error_mark_node
|| TREE_CONSTANT (DECL_INITIAL (decl))))
/* Deal with calls from output_constant_def_contents. */
|| (TREE_CODE (decl) != VAR_DECL
&& (TREE_CODE (decl) != STRING_CST
|| !flag_writable_strings)))
&& ! (flag_pic && reloc))
rdata_section ();
else
data_section ();
}
}