[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v3 PATCH 14/14] target-i386: Generate fences for x
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC v3 PATCH 14/14] target-i386: Generate fences for x86 |
Date: |
Tue, 21 Jun 2016 09:28:15 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
On 18/06/2016 06:03, Pranith Kumar wrote:
> Signed-off-by: Pranith Kumar <address@hidden>
> ---
> target-i386/translate.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/target-i386/translate.c b/target-i386/translate.c
> index bf33e6b..32b0f5c 100644
> --- a/target-i386/translate.c
> +++ b/target-i386/translate.c
> @@ -8012,13 +8012,17 @@ static target_ulong disas_insn(CPUX86State *env,
> DisasContext *s,
> || (prefixes & PREFIX_LOCK)) {
> goto illegal_op;
> }
> + tcg_gen_mb(TCG_MO_ST_ST | TCG_BAR_SC);
> break;
> case 0xe8 ... 0xef: /* lfence */
> + tcg_gen_mb(TCG_MO_LD_LD | TCG_BAR_SC);
> + break;
These are unnecessary. On the other hand, _each and every load_ must be
followed by a LD_LD | LD_ST barrier, and each and every store must be
preceded by a LD_ST | ST_ST barrier.
Paolo
> case 0xf0 ... 0xf7: /* mfence */
> if (!(s->cpuid_features & CPUID_SSE2)
> || (prefixes & PREFIX_LOCK)) {
> goto illegal_op;
> }
> + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC);
> break;
>
> default:
>