diff mbox

[RFC,1/3] Introduce TCGOpcode for fence instruction

Message ID 20160524171856.1000-2-bobby.prani@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Pranith Kumar May 24, 2016, 5:18 p.m. UTC
This commit introduces the TCGOpcode for fence instruction.

Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
---
 tcg/i386/tcg-target.inc.c | 4 ++++
 tcg/tcg-opc.h             | 2 ++
 tcg/tcg.c                 | 2 ++
 3 files changed, 8 insertions(+)

Comments

Peter Maydell May 24, 2016, 5:32 p.m. UTC | #1
On 24 May 2016 at 18:18, Pranith Kumar <bobby.prani@gmail.com> wrote:
> This commit introduces the TCGOpcode for fence instruction.
>
> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com>
> ---
>  tcg/i386/tcg-target.inc.c | 4 ++++
>  tcg/tcg-opc.h             | 2 ++
>  tcg/tcg.c                 | 2 ++
>  3 files changed, 8 insertions(+)


Since this is a new TCG op, can we have it documented
in tcg/README, please? This should describe the semantics of
the operation in enough detail that:
 * a new TCG backend can implement it correctly
 * a TCG frontend knows when it needs to use the op

thanks
-- PMM
Pranith Kumar May 24, 2016, 6:05 p.m. UTC | #2
On Tue, May 24, 2016 at 1:32 PM, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> Since this is a new TCG op, can we have it documented
> in tcg/README, please? This should describe the semantics of
> the operation in enough detail that:
>  * a new TCG backend can implement it correctly
>  * a TCG frontend knows when it needs to use the op
>

Sure, I will add this information.

Thanks!
diff mbox

Patch

diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
index 8fd37f4..238fa10 100644
--- a/tcg/i386/tcg-target.inc.c
+++ b/tcg/i386/tcg-target.inc.c
@@ -2114,6 +2114,8 @@  static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
         }
         break;
 
+    case INDEX_op_fence:
+        break;
     case INDEX_op_mov_i32:  /* Always emitted via tcg_out_mov.  */
     case INDEX_op_mov_i64:
     case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi.  */
@@ -2179,6 +2181,8 @@  static const TCGTargetOpDef x86_op_defs[] = {
     { INDEX_op_add2_i32, { "r", "r", "0", "1", "ri", "ri" } },
     { INDEX_op_sub2_i32, { "r", "r", "0", "1", "ri", "ri" } },
 
+    { INDEX_op_fence, { } },
+
 #if TCG_TARGET_REG_BITS == 32
     { INDEX_op_brcond2_i32, { "r", "r", "ri", "ri" } },
     { INDEX_op_setcond2_i32, { "r", "r", "r", "ri", "ri" } },
diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h
index 6d0410c..4696cf1 100644
--- a/tcg/tcg-opc.h
+++ b/tcg/tcg-opc.h
@@ -42,6 +42,8 @@  DEF(br, 0, 0, 1, TCG_OPF_BB_END)
 # define IMPL64  TCG_OPF_64BIT
 #endif
 
+DEF(fence, 0, 0, 0, 0)
+
 DEF(mov_i32, 1, 1, 0, TCG_OPF_NOT_PRESENT)
 DEF(movi_i32, 1, 0, 1, TCG_OPF_NOT_PRESENT)
 DEF(setcond_i32, 1, 2, 1, 0)
diff --git a/tcg/tcg.c b/tcg/tcg.c
index b46bf1a..b5a22ba 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2443,6 +2443,8 @@  int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
             tcg_reg_alloc_call(s, op->callo, op->calli, args,
                                dead_args, sync_args);
             break;
+        case INDEX_op_fence:
+            break;
         default:
             /* Sanity check that we've not introduced any unhandled opcodes. */
             if (def->flags & TCG_OPF_NOT_PRESENT) {