aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPalmer Dabbelt <palmer.dabbelt@eecs.berkeley.edu>2015-12-25 23:25:55 -0800
committerPalmer Dabbelt <palmer.dabbelt@eecs.berkeley.edu>2015-12-27 19:58:28 -0800
commitcc5321b5a30c2eac394d61d070aea5293ee4a3f9 (patch)
tree1acff52889cd119c5871e1727c8e11970f5271ec /gcc
parent4bcd4f57af50b32efafa2088f996ede3142ec77b (diff)
downloadriscv-gnu-toolchain-cc5321b5a30c2eac394d61d070aea5293ee4a3f9.zip
riscv-gnu-toolchain-cc5321b5a30c2eac394d61d070aea5293ee4a3f9.tar.gz
riscv-gnu-toolchain-cc5321b5a30c2eac394d61d070aea5293ee4a3f9.tar.bz2
Bump GCC to 5.3.0
There was one change required here: support for "MEMMODEL_SYNC_*". This very long GCC post <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697> talks about the formalization of the C++ memory model. It looks like this is it to allow for some ARM stupidity where they can speculatively issue some memory operations. As far as I can tell, the right thing to do here is to just treat the SYNC versions the same as the non-SYNC versions -- this is the same thing ia64 and rs600 do. I can't find "MEMMODEL_SYNC" anywhere else interesting, so there might be some flag to set to avoid doing this, but I couldn't find it.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gcc/config/riscv/sync.md3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/gcc/config/riscv/sync.md b/gcc/gcc/config/riscv/sync.md
index c4bd8d9..e8c9a7a 100644
--- a/gcc/gcc/config/riscv/sync.md
+++ b/gcc/gcc/config/riscv/sync.md
@@ -55,12 +55,15 @@
switch (INTVAL (operands[1]))
{
case MEMMODEL_SEQ_CST:
+ case MEMMODEL_SYNC_SEQ_CST:
case MEMMODEL_ACQ_REL:
return "fence rw,rw";
case MEMMODEL_ACQUIRE:
+ case MEMMODEL_SYNC_ACQUIRE:
case MEMMODEL_CONSUME:
return "fence r,rw";
case MEMMODEL_RELEASE:
+ case MEMMODEL_SYNC_RELEASE:
return "fence rw,w";
default:
gcc_unreachable();