From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37126) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c2KiU-0007kh-VF for qemu-devel@nongnu.org; Thu, 03 Nov 2016 12:18:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c2KiQ-0002l7-Sk for qemu-devel@nongnu.org; Thu, 03 Nov 2016 12:18:14 -0400 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:33253) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c2KiQ-0002kv-MY for qemu-devel@nongnu.org; Thu, 03 Nov 2016 12:18:10 -0400 Received: by mail-wm0-x244.google.com with SMTP id u144so8794317wmu.0 for ; Thu, 03 Nov 2016 09:18:10 -0700 (PDT) Sender: Paolo Bonzini References: <1478182068-14082-1-git-send-email-laurent@vivier.eu> <06f03abb-3a18-12c3-b359-dcdc0aaeabfe@redhat.com> <32960507-f61e-e3a1-76f3-74a755adb7e3@vivier.eu> From: Paolo Bonzini Message-ID: Date: Thu, 3 Nov 2016 17:18:07 +0100 MIME-Version: 1.0 In-Reply-To: <32960507-f61e-e3a1-76f3-74a755adb7e3@vivier.eu> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2] target-sh4: add atomic tas List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Vivier , Aurelien Jarno Cc: Richard Henderson , qemu-devel@nongnu.org, John Paul Adrian Glaubitz On 03/11/2016 16:35, Laurent Vivier wrote: > Le 03/11/2016 à 16:32, Paolo Bonzini a écrit : >> >> >> On 03/11/2016 15:07, Laurent Vivier wrote: >>> Implement real atomic tas: >>> >>> When (Rn) = 0, 1 -> T >>> Otherwise, 0 -> T >>> In both cases, 1 -> MSB of (Rn) >>> >>> using atomic_fetch_or_i32() and setcondi_i32(). >>> >>> Tested with image from: >>> http://wiki.qemu.org/download/sh-test-0.2.tar.bz2 >>> >>> This image contains a "tas_test" that runs without >>> error with this change. >>> >>> Signed-off-by: Laurent Vivier >>> --- >>> v2: >>> - don't use helper but atomic_fetch_or_i32 >>> Thank you Paolo! >>> >>> target-sh4/translate.c | 19 ++++++++----------- >>> 1 file changed, 8 insertions(+), 11 deletions(-) >>> >>> diff --git a/target-sh4/translate.c b/target-sh4/translate.c >>> index c89a147..1b83d59 100644 >>> --- a/target-sh4/translate.c >>> +++ b/target-sh4/translate.c >>> @@ -1640,18 +1640,15 @@ static void _decode_opc(DisasContext * ctx) >>> tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 16); >>> return; >>> case 0x401b: /* tas.b @Rn */ >>> - { >>> - TCGv addr, val; >>> - addr = tcg_temp_local_new(); >>> - tcg_gen_mov_i32(addr, REG(B11_8)); >>> - val = tcg_temp_local_new(); >>> - tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB); >>> + { >>> + TCGv val = tcg_temp_new(); >>> + TCGv msb = tcg_const_i32(0x80); >>> + tcg_gen_atomic_fetch_or_i32(val, REG(B11_8), msb, >>> + ctx->memidx, MO_UB); >>> + tcg_temp_free(msb); >>> tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0); >>> - tcg_gen_ori_i32(val, val, 0x80); >>> - tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB); >>> - tcg_temp_free(val); >>> - tcg_temp_free(addr); >>> - } >>> + tcg_temp_free(val); >>> + } >>> return; >>> case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ >>> CHECK_FPU_ENABLED >>> >> >> For 2.8? > > Is it possible? Well, tas_test "runs without error with this change", I suppose it fails before? In other words, is this patch enough to run multithreaded sh4 programs with qemu-user? Paolo