From: Jim Wilson Date: Mon, 11 Apr 1994 17:36:16 +0000 (-0700) Subject: (mips_select_rtx_section, mips_select_section): New functions. X-Git-Tag: misc/cutover-egcs-0~6912 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9753d4e4b1bc8b024114f36907840023c346ef57;p=thirdparty%2Fgcc.git (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 --- diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 19a00cc3ed31..562a1e98a6d2 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -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 (); + } +}