From nobody Mon Feb 9 19:30:27 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1498941084346982.7095017060428; Sat, 1 Jul 2017 13:31:24 -0700 (PDT) Received: from localhost ([::1]:55803 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dRP35-0005EN-1r for importer@patchew.org; Sat, 01 Jul 2017 16:31:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53878) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dROyH-0001f6-7Z for qemu-devel@nongnu.org; Sat, 01 Jul 2017 16:26:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dROyF-0006mS-T3 for qemu-devel@nongnu.org; Sat, 01 Jul 2017 16:26:25 -0400 Received: from mail-qk0-x242.google.com ([2607:f8b0:400d:c09::242]:36261) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dROyF-0006mI-Or for qemu-devel@nongnu.org; Sat, 01 Jul 2017 16:26:23 -0400 Received: by mail-qk0-x242.google.com with SMTP id v143so6825677qkb.3 for ; Sat, 01 Jul 2017 13:26:23 -0700 (PDT) Received: from bigtime.twiddle.net.com (97-113-165-157.tukw.qwest.net. [97.113.165.157]) by smtp.gmail.com with ESMTPSA id f128sm8559985qkc.13.2017.07.01.13.26.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 01 Jul 2017 13:26:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=JJoDQkjO7K+nQNesHYLrN93hhpEYga9hftYRSPAOAlM=; b=VHZB1pQ2sE+K96gjp2V7pMvE03AaJYsgyJka0XsCUtjoFGULYLGUGd/+THh4PkfkXQ JxKpet3x15UEoXUGxh64e50JjcZsB8Xtt6esB15eyRzx4s5jaXgsLw18AOkjUovfixVz tFH330rR2zOU7z+23H0Aq4xDBhWWrYqzrij8Dr04ONBKlayUrwZQLVmNQ5Rrb6dTJnD4 UDxIhiaO1SijwI2vL1A0IaVxNpQyFhRUuvyFJ0cRHQn06w1Vf9+JJcbORcc3QhmwymQ5 g1r0KPVZH2y+XMWG17ZYPOEAi7sNSWce2fjQHnxErQxU6ejqAYLejIIqhCZbL8eOZ1Gv 0atw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=JJoDQkjO7K+nQNesHYLrN93hhpEYga9hftYRSPAOAlM=; b=fd/pmDth5zFFS8d/Cg5nJkfALw9TPCxk14+mRgB/GYBQWZNiRbTTY7lBFQNRAus7gH cQnaIQhreb3wKY8pXiIR75zBlfQsvqHnvVWOZiK+6MQUlozEbrW/VW5GbYf+6Ywi2c4c t36aSFTcyIjvFnpyd5n+ac5LJa4nS/Jl8x0kXoIRmaEDiHANtuU0jok6qi6/ezbCVLaT RmUYKQ/Leng4MeyAe8XeJPrT8bF/IWSz5ybrn/jQ5zRqRH95MbXr/ORmu8IAJrEFA0U9 2MH/P7Jl3qSD/9UnrHLY7PBT8ZLzxBwoc7he3RSekfuGSBqRGHMFjlW+sbXP94iTSJG9 ZxpQ== X-Gm-Message-State: AKS2vOywE7zqzCUw3i2RTHDhJ69M1v9+6AAA9Q5SW+rA1J67FIXTtVjh 0/xZGmR7T5ZfkwS62B8= X-Received: by 10.55.77.13 with SMTP id a13mr36684841qkb.194.1498940782955; Sat, 01 Jul 2017 13:26:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 1 Jul 2017 13:25:55 -0700 Message-Id: <20170701202600.14057-4-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170701202600.14057-1-rth@twiddle.net> References: <20170701202600.14057-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::242 Subject: [Qemu-devel] [PATCH v2 3/8] target/s390x: Tidy SRST X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aurelien@aurel32.net, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Since we require all registers saved on input, read R0 from ENV instead of passing it manually. Recognize the specification exception when R0 contains incorrect data. Keep high bits of result registers unmodified when in 31 or 24-bit mode. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- target/s390x/helper.h | 2 +- target/s390x/mem_helper.c | 25 ++++++++++++++----------- target/s390x/translate.c | 9 +++++++-- target/s390x/insn-data.def | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/target/s390x/helper.h b/target/s390x/helper.h index 2793cf3..a2e5b9b 100644 --- a/target/s390x/helper.h +++ b/target/s390x/helper.h @@ -12,7 +12,7 @@ DEF_HELPER_FLAGS_3(divs32, TCG_CALL_NO_WG, s64, env, s64,= s64) DEF_HELPER_FLAGS_3(divu32, TCG_CALL_NO_WG, i64, env, i64, i64) DEF_HELPER_FLAGS_3(divs64, TCG_CALL_NO_WG, s64, env, s64, s64) DEF_HELPER_FLAGS_4(divu64, TCG_CALL_NO_WG, i64, env, i64, i64, i64) -DEF_HELPER_4(srst, i64, env, i64, i64, i64) +DEF_HELPER_3(srst, void, env, i32, i32) DEF_HELPER_4(clst, i64, env, i64, i64, i64) DEF_HELPER_FLAGS_4(mvn, TCG_CALL_NO_WG, void, env, i32, i64, i64) DEF_HELPER_FLAGS_4(mvo, TCG_CALL_NO_WG, void, env, i32, i64, i64) diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index 0b18560..74b48aa 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -538,18 +538,21 @@ static inline void set_length(CPUS390XState *env, int= reg, uint64_t length) } =20 /* search string (c is byte to search, r2 is string, r1 end of string) */ -uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0, uint64_t end, - uint64_t str) +void HELPER(srst)(CPUS390XState *env, uint32_t r1, uint32_t r2) { uintptr_t ra =3D GETPC(); + uint64_t end, str; uint32_t len; - uint8_t v, c =3D r0; + uint8_t v, c =3D env->regs[0]; =20 - str =3D wrap_address(env, str); - end =3D wrap_address(env, end); + /* Bits 32-55 must contain all 0. */ + if (env->regs[0] & 0xffffff00u) { + cpu_restore_state(ENV_GET_CPU(env), ra); + program_interrupt(env, PGM_SPECIFICATION, 6); + } =20 - /* Assume for now that R2 is unmodified. */ - env->retxl =3D str; + str =3D get_address(env, r2); + end =3D get_address(env, r1); =20 /* Lest we fail to service interrupts in a timely manner, limit the amount of work we're willing to do. For now, let's cap at 8k. */ @@ -557,20 +560,20 @@ uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0= , uint64_t end, if (str + len =3D=3D end) { /* Character not found. R1 & R2 are unmodified. */ env->cc_op =3D 2; - return end; + return; } v =3D cpu_ldub_data_ra(env, str + len, ra); if (v =3D=3D c) { /* Character found. Set R1 to the location; R2 is unmodified.= */ env->cc_op =3D 1; - return str + len; + set_address(env, r1, str + len); + return; } } =20 /* CPU-determined bytes processed. Advance R2 to next byte to process= . */ - env->retxl =3D str + len; env->cc_op =3D 3; - return end; + set_address(env, r2, str + len); } =20 /* unsigned string compare (c is string terminator) */ diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 9301daa..b887843 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -4280,9 +4280,14 @@ static ExitStatus op_stpq(DisasContext *s, DisasOps = *o) =20 static ExitStatus op_srst(DisasContext *s, DisasOps *o) { - gen_helper_srst(o->in1, cpu_env, regs[0], o->in1, o->in2); + TCGv_i32 r1 =3D tcg_const_i32(get_field(s->fields, r1)); + TCGv_i32 r2 =3D tcg_const_i32(get_field(s->fields, r2)); + + gen_helper_srst(cpu_env, r1, r2); + + tcg_temp_free_i32(r1); + tcg_temp_free_i32(r2); set_cc_static(s); - return_low128(o->in2); return NO_EXIT; } =20 diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def index 323a301..bc6ff01 100644 --- a/target/s390x/insn-data.def +++ b/target/s390x/insn-data.def @@ -736,7 +736,7 @@ C(0xec57, RXSBG, RIE_f, GIE, 0, r2, r1, 0, rosbg, 0) =20 /* SEARCH STRING */ - C(0xb25e, SRST, RRE, Z, r1_o, r2_o, 0, 0, srst, 0) + C(0xb25e, SRST, RRE, Z, 0, 0, 0, 0, srst, 0) =20 /* SET ACCESS */ C(0xb24e, SAR, RRE, Z, 0, r2_o, 0, 0, sar, 0) --=20 2.9.4