+Wed Nov 17 17:39:48 MST 1999 Diego Novillo <dnovillo@cygnus.com>
+
+ * invoke.texi: Add documentation for -muninit-const-in-rodata.
+ * config/mips/mips.h (MASK_UNINIT_CONST_IN_RODATA): Define.
+ (TARGET_UNINIT_CONST_IN_RODATA): Define.
+ (text_section): Add switches -munint-const-in-rodata and
+ -mno-uninit-const-in-rodata.
+ (ASM_OUTPUT_COMMON): Remove.
+ (ASM_OUTPUT_ALIGNED_DECL_COMMON): Define. Check if uninitialized
+ const objects should be placed in read-only data. Otherwise declare
+ them in common.
+
Wed Nov 17 16:38:32 1999 Richard Henderson <rth@cygnus.com>
* jump.c (jump_optimize_1): Revert last change.
#define MASK_MIPS16 0x01000000 /* Generate mips16 code */
#define MASK_NO_CHECK_ZERO_DIV 0x04000000 /* divide by zero checking */
#define MASK_CHECK_RANGE_DIV 0x08000000 /* divide result range checking */
+#define MASK_UNINIT_CONST_IN_RODATA 0x10000000 /* Store uninitialized
+ consts in rodata */
/* Dummy switches used only in spec's*/
#define MASK_MIPS_TFILE 0x00000000 /* flag for mips-tfile usage */
fastest code. */
#define TARGET_EMBEDDED_DATA (target_flags & MASK_EMBEDDED_DATA)
+ /* always store uninitialized const
+ variables in rodata, requires
+ TARGET_EMBEDDED_DATA. */
+#define TARGET_UNINIT_CONST_IN_RODATA (target_flags & MASK_UNINIT_CONST_IN_RODATA)
+
/* generate big endian code. */
#define TARGET_BIG_ENDIAN (target_flags & MASK_BIG_ENDIAN)
"Use ROM instead of RAM"}, \
{"no-embedded-data", -MASK_EMBEDDED_DATA, \
"Don't use ROM instead of RAM"}, \
+ {"uninit-const-in-rodata", MASK_UNINIT_CONST_IN_RODATA, \
+ "Put uninitialized constants in ROM (needs -membedded-data)"}, \
+ {"no-uninit-const-in-rodata", -MASK_UNINIT_CONST_IN_RODATA, \
+ "Don't put uninitialized constants in ROM"}, \
{"eb", MASK_BIG_ENDIAN, \
"Use big-endian byte order"}, \
{"el", -MASK_BIG_ENDIAN, \
/* This says how to define a global common symbol. */
-#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
- mips_declare_object (STREAM, NAME, "\n\t.comm\t", ",%u\n", (SIZE))
+#define ASM_OUTPUT_ALIGNED_DECL_COMMON(STREAM, DECL, NAME, SIZE, ALIGN) \
+ do { \
+ /* If the target wants uninitialized const declarations in \
+ .rdata then don't put them in .comm */ \
+ if (TARGET_EMBEDDED_DATA && TARGET_UNINIT_CONST_IN_RODATA \
+ && TREE_CODE (DECL) == VAR_DECL && TREE_READONLY (DECL) \
+ && (DECL_INITIAL (DECL) == 0 \
+ || DECL_INITIAL (DECL) == error_mark_node)) \
+ { \
+ if (TREE_PUBLIC (DECL) && DECL_NAME (DECL)) \
+ ASM_GLOBALIZE_LABEL (STREAM, NAME); \
+ \
+ READONLY_DATA_SECTION (); \
+ ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \
+ mips_declare_object (STREAM, NAME, "", ":\n\t.space\t%u\n", \
+ (SIZE)); \
+ } \
+ else \
+ mips_declare_object (STREAM, NAME, "\n\t.comm\t", ",%u\n", \
+ (SIZE)); \
+ } while (0)
+
/* This says how to define a local common symbol (ie, not visible to
linker). */
-mminimum-fp-blocks -mnohc-struct-return
@emph{MIPS Options}
--mabicalls -mcpu=@var{cpu type} -membedded-data
+-mabicalls -mcpu=@var{cpu type} -membedded-data -muninit-const-in-rodata
-membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
-mgpopt -mhalf-pic -mhard-float -mint64 -mips1
-mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy
-mmips-as -mmips-tfile -mno-abicalls
--mno-embedded-data -mno-embedded-pic
+-mno-embedded-data -mno-uninit-const-in-rodata -mno-embedded-pic
-mno-gpopt -mno-long-calls
-mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
-mrnames -msoft-float
slightly slower code than the default, but reduces the amount of RAM required
when executing, and thus may be preferred for some embedded systems.
+@item -muninit-const-in-rodata
+@itemx -mno-uninit-const-in-rodata
+When used together with -membedded-data, it will always store uninitialized
+const variables in the read-only data section.
+
@item -msingle-float
@itemx -mdouble-float
The @samp{-msingle-float} switch tells gcc to assume that the floating