This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Xtensa] add -mno-serialize-volatiles option
- From: Bob Wilson <bwilson at tensilica dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 14 Mar 2008 17:45:41 -0700
- Subject: [Xtensa] add -mno-serialize-volatiles option
This patch restores an option that I removed a few years ago.
(http://gcc.gnu.org/ml/gcc-patches/2003-05/msg01889.html) At the time, we
thought it was better to always handle volatile references conservatively, but
recently we've gotten requests to have this option back. So here it is. I've
committed this on the trunk.
2008-03-14 Bob Wilson <bob.wilson@acm.org>
* doc/invoke.texi (Option Summary, Xtensa Options): Document
-mserialize-volatile and -mno-serialize-volatile Xtensa options.
* config/xtensa/xtensa.c (print_operand): Do not emit MEMW instructions
unless TARGET_SERIALIZE_VOLATILE is enabled.
* config/xtensa/xtensa.md (*lsiu, *ssiu): Likewise.
* config/xtensa/xtensa.h (TARGET_DEFAULT): Add MASK_SERIALIZE_VOLATILE.
* config/xtensa/xtensa.opt (mserialize_volatile): New option.
Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi (revision 133223)
+++ doc/invoke.texi (working copy)
@@ -800,6 +800,7 @@
@emph{Xtensa Options}
@gccoptlist{-mconst16 -mno-const16 @gol
-mfused-madd -mno-fused-madd @gol
+-mserialize-volatile -mno-serialize-volatile @gol
-mtext-section-literals -mno-text-section-literals @gol
-mtarget-align -mno-target-align @gol
-mlongcalls -mno-longcalls}
@@ -14694,6 +14695,15 @@
sensitive to the compiler's ability to combine multiply and add/subtract
operations.
+@item -mserialize-volatile
+@itemx -mno-serialize-volatile
+@opindex mserialize-volatile
+@opindex mno-serialize-volatile
+When this option is enabled, GCC inserts @code{MEMW} instructions before
+@code{volatile} memory references to guarantee sequential consistency.
+The default is @option{-mserialize-volatile}. Use
+@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
+
@item -mtext-section-literals
@itemx -mno-text-section-literals
@opindex mtext-section-literals
Index: config/xtensa/xtensa.c
===================================================================
--- config/xtensa/xtensa.c (revision 133223)
+++ config/xtensa/xtensa.c (working copy)
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Tensilica's Xtensa architecture.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
@@ -1991,7 +1991,7 @@
{
/* For a volatile memory reference, emit a MEMW before the
load or store. */
- if (MEM_VOLATILE_P (x))
+ if (MEM_VOLATILE_P (x) && TARGET_SERIALIZE_VOLATILE)
fprintf (file, "memw\n\t");
}
else
Index: config/xtensa/xtensa.h
===================================================================
--- config/xtensa/xtensa.h (revision 133223)
+++ config/xtensa/xtensa.h (working copy)
@@ -1,5 +1,5 @@
/* Definitions of Tensilica's Xtensa target machine for GNU compiler.
- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
@@ -74,8 +74,9 @@
#define TARGET_S32C1I XCHAL_HAVE_S32C1I
#define TARGET_ABSOLUTE_LITERALS XSHAL_USE_ABSOLUTE_LITERALS
-#define TARGET_DEFAULT ( \
- (XCHAL_HAVE_L32R ? 0 : MASK_CONST16))
+#define TARGET_DEFAULT \
+ ((XCHAL_HAVE_L32R ? 0 : MASK_CONST16) | \
+ MASK_SERIALIZE_VOLATILE)
#define OVERRIDE_OPTIONS override_options ()
Index: config/xtensa/xtensa.md
===================================================================
--- config/xtensa/xtensa.md (revision 133223)
+++ config/xtensa/xtensa.md (working copy)
@@ -1,5 +1,5 @@
;; GCC machine description for Tensilica's Xtensa architecture.
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
;; Free Software Foundation, Inc.
;; Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
@@ -928,7 +928,7 @@
(plus:SI (match_dup 1) (match_dup 2)))]
"TARGET_HARD_FLOAT"
{
- if (volatile_refs_p (PATTERN (insn)))
+ if (TARGET_SERIALIZE_VOLATILE && volatile_refs_p (PATTERN (insn)))
output_asm_insn ("memw", operands);
return "lsiu\t%0, %1, %2";
}
@@ -944,7 +944,7 @@
(plus:SI (match_dup 0) (match_dup 1)))]
"TARGET_HARD_FLOAT"
{
- if (volatile_refs_p (PATTERN (insn)))
+ if (TARGET_SERIALIZE_VOLATILE && volatile_refs_p (PATTERN (insn)))
output_asm_insn ("memw", operands);
return "ssiu\t%2, %0, %1";
}
Index: config/xtensa/xtensa.opt
===================================================================
--- config/xtensa/xtensa.opt (revision 133223)
+++ config/xtensa/xtensa.opt (working copy)
@@ -1,6 +1,6 @@
; Options for the Tensilica Xtensa port of the compiler.
-; Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+; Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
@@ -37,3 +37,7 @@
mtext-section-literals
Target
Intersperse literal pools with code in the text section
+
+mserialize-volatile
+Target Report Mask(SERIALIZE_VOLATILE)
+-mno-serialize-volatile Do not serialize volatile memory references with MEMW instructions