From 9753d4e4b1bc8b024114f36907840023c346ef57 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 11 Apr 1994 10:36:16 -0700 Subject: [PATCH] (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 --- gcc/config/mips/mips.c | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 19a00cc3ed3..562a1e98a6d 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 (); + } +} -- 2.30.2