This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] RISC-V: Add fence.tso instruction


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=64a336ac134ebd7f9452a7088e90e29551465251

commit 64a336ac134ebd7f9452a7088e90e29551465251
Author: Palmer Dabbelt <palmer@sifive.com>
Date:   Tue Oct 2 08:26:32 2018 -0700

    RISC-V: Add fence.tso instruction
    
    The RISC-V memory model has been ratified, and it includes an additional
    fence: "fence.tso".  This pseudo instruction extends one of the
    previously reserved full fence patterns to be less restrictive, and
    therefor will execute correctly on all existing microarchitectures.
    Thus there is no reason to allow this instruction to be disabled (or
    unconverted to a full fence), so it's just unconditionally allowed.
    
    I've added a test case for GAS to check that "fence.tso" correctly
    assembles on rv32i-based targets.  I checked to see that "fence.tso"
    appears in "gas.log", but that's the only testing I've done.
    
    gas/ChangeLog
    
    2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
    
            * testsuite/gas/riscv/fence-tso.d: New file.
            * testsuite/gas/riscv/fence-tso.s: Likewise.
    
    include/ChangeLog
    
    2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
    
            * opcode/riscv-opc.h (MATCH_FENCE_TSO): New define.
            (MASK_FENCE_TSO): Likewise.
    
    opcodes/ChangeLog
    
    2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
    
            * riscv-opc.c (riscv_opcodes) <fence.tso>: New opcode.

Diff:
---
 gas/ChangeLog                       |  5 +++++
 gas/testsuite/gas/riscv/fence-tso.d | 11 +++++++++++
 gas/testsuite/gas/riscv/fence-tso.s |  2 ++
 include/ChangeLog                   |  5 +++++
 include/opcode/riscv-opc.h          |  2 ++
 opcodes/ChangeLog                   |  4 ++++
 opcodes/riscv-opc.c                 |  1 +
 7 files changed, 30 insertions(+)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 069f9cb..d6a4380 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
+
+	* testsuite/gas/riscv/fence-tso.d: New file.
+	* testsuite/gas/riscv/fence-tso.s: Likewise.
+
 2018-09-26  Sandra Loosemore  <sandra@codesourcery.com>
 
 	* testsuite/gas/all/gas.exp: Skip "Output file must be distinct
diff --git a/gas/testsuite/gas/riscv/fence-tso.d b/gas/testsuite/gas/riscv/fence-tso.d
new file mode 100644
index 0000000..ef8a4cd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/fence-tso.d
@@ -0,0 +1,11 @@
+#as: -march=rv32ic
+#objdump: -dr
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8330000f[ 	]+fence.tso
+
diff --git a/gas/testsuite/gas/riscv/fence-tso.s b/gas/testsuite/gas/riscv/fence-tso.s
new file mode 100644
index 0000000..7770052
--- /dev/null
+++ b/gas/testsuite/gas/riscv/fence-tso.s
@@ -0,0 +1,2 @@
+target:
+	fence.tso
diff --git a/include/ChangeLog b/include/ChangeLog
index d0e0d72..98d4241 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
+
+	* opcode/riscv-opc.h (MATCH_FENCE_TSO): New define.
+	(MASK_FENCE_TSO): Likewise.
+
 2018-10-01  Cupertino Miranda <cmiranda@synopsys.com>
 
 	* arc-reloc.def (ARC_TLS_LE_32): Updated reloc formula.
diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
index 60bd2f9..f09200c 100644
--- a/include/opcode/riscv-opc.h
+++ b/include/opcode/riscv-opc.h
@@ -141,6 +141,8 @@
 #define MASK_FENCE  0x707f
 #define MATCH_FENCE_I 0x100f
 #define MASK_FENCE_I  0x707f
+#define MATCH_FENCE_TSO 0x8330000f
+#define MASK_FENCE_TSO  0xfff0707f
 #define MATCH_MUL 0x2000033
 #define MASK_MUL  0xfe00707f
 #define MATCH_MULH 0x2001033
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 9b68285..54baef0 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,7 @@
+2018-10-02  Palmer Dabbelt  <palmer@sifive.com>
+
+	* riscv-opc.c (riscv_opcodes) <fence.tso>: New opcode.
+
 2018-09-23  Sandra Loosemore  <sandra@codesourcery.com>
 
 	* nios2-dis.c (nios2_print_insn_arg): Make sure signed conversions
diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
index e0f7118..b6843f2 100644
--- a/opcodes/riscv-opc.c
+++ b/opcodes/riscv-opc.c
@@ -342,6 +342,7 @@ const struct riscv_opcode riscv_opcodes[] =
 {"fence",       0, {"I", 0},   "",  MATCH_FENCE | MASK_PRED | MASK_SUCC, MASK_FENCE | MASK_RD | MASK_RS1 | MASK_IMM, match_opcode, INSN_ALIAS },
 {"fence",       0, {"I", 0},   "P,Q",  MATCH_FENCE, MASK_FENCE | MASK_RD | MASK_RS1 | (MASK_IMM & ~MASK_PRED & ~MASK_SUCC), match_opcode, 0 },
 {"fence.i",     0, {"I", 0},   "",  MATCH_FENCE_I, MASK_FENCE | MASK_RD | MASK_RS1 | MASK_IMM, match_opcode, 0 },
+{"fence.tso",   0, {"I", 0},   "",  MATCH_FENCE_TSO, MASK_FENCE_TSO | MASK_RD | MASK_RS1, match_opcode, INSN_ALIAS },
 {"rdcycle",     0, {"I", 0},   "d",  MATCH_RDCYCLE, MASK_RDCYCLE, match_opcode, INSN_ALIAS },
 {"rdinstret",   0, {"I", 0},   "d",  MATCH_RDINSTRET, MASK_RDINSTRET, match_opcode, INSN_ALIAS },
 {"rdtime",      0, {"I", 0},   "d",  MATCH_RDTIME, MASK_RDTIME, match_opcode, INSN_ALIAS },


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]