From nobody Wed Nov 5 17:24:54 2025 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 1496795616319619.9779379469134; Tue, 6 Jun 2017 17:33:36 -0700 (PDT) Received: from localhost ([::1]:40562 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIOuk-0004AC-PL for importer@patchew.org; Tue, 06 Jun 2017 20:33:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33488) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIOsl-0002Ig-Bk for qemu-devel@nongnu.org; Tue, 06 Jun 2017 20:31:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dIOsj-0001oE-UM for qemu-devel@nongnu.org; Tue, 06 Jun 2017 20:31:31 -0400 Received: from mail-qt0-x244.google.com ([2607:f8b0:400d:c0d::244]:35978) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dIOsj-0001nw-PK for qemu-devel@nongnu.org; Tue, 06 Jun 2017 20:31:29 -0400 Received: by mail-qt0-x244.google.com with SMTP id s33so19303313qtg.3 for ; Tue, 06 Jun 2017 17:31:29 -0700 (PDT) Received: from bigtime.twiddle.net.com (71-217-91-69.tukw.qwest.net. [71.217.91.69]) by smtp.gmail.com with ESMTPSA id m47sm29286qtc.36.2017.06.06.17.31.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 06 Jun 2017 17:31:28 -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=ZbdnupYWtSaqaWBVaKxg4uD14LABlehwujsNfxC/Ls8=; b=LuVN44dTBS3IB7wKmEbV9b3UvdV4eqYUkxbyDZCAwS/+VthHDMMuaifRKHH++RbI9z XOre3oH5X9xvR1n0GTb7jzUosoA6Pmp8szUNG887T55X2hrEcxnosqfZU9Rb2es2+GAa pdD69pR/k1x+dzEkvkgLCJ1zfaSJ175g0onDfCBJkKaXc5WoAD028kYM6SrmxBHobbUN DOVHAS2qJheu0yJad+i37pqpxqrMn2cvP7nLyB/eGfqASvxPZ8oom8ZQ50pxz3T2BqaD w43mwToHScgTsYsuIrp05TQt5a+RMRlBF2Mk+3NB9O3tbNQs70mH/IJJyiqSvoDZROoC LOeQ== 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=ZbdnupYWtSaqaWBVaKxg4uD14LABlehwujsNfxC/Ls8=; b=lKdEtdn8fXk4a0SM4uVXShwPifj3A0cIh/vj7KkWzcD5FojQRhFtG3yKFpSXni9Qv2 VQ9gj6kqzsmr6YHHmQ+whuV1paq2zVZmgN3NPGhgtgk6INGr2bJThxklESFzvUHwH0K0 Ijn/DV9ew9655FIyBnaoEvfSoKt2AukwwTLqqQHHS5MT8URTFaPpSTTOW+f5wgZflYxY PjUxmri1YPh08Rq5+usKybDC/QEVfr52QUtWIwadeutO/EBI1otmyeN1C8WW3iQdZF1M Gx1zvvLVzvKgvUuY+CFaVYnb2j2Fk01Oi8UM38Gf8vwoBZjYw7SDzZ+XLZ2CedRM4wAl B2Cw== X-Gm-Message-State: AKS2vOyRRGUF6UEz74bB7G5Ka9U+zK+0VWxDsac16cHLBS0bs+XjAser kXnrjXMF28bIy3H35Ig= X-Received: by 10.237.38.71 with SMTP id z65mr35738512qtc.52.1496795488974; Tue, 06 Jun 2017 17:31:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 6 Jun 2017 17:30:12 -0700 Message-Id: <20170607003119.14778-4-rth@twiddle.net> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170607003119.14778-1-rth@twiddle.net> References: <20170607003119.14778-1-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::244 Subject: [Qemu-devel] [PULL v2 03/70] target/s390x: Move helper_ex to end of file 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: peter.maydell@linaro.org, aurelien@aurel32.net 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" This will avoid needing forward declarations in following patches. Reviewed-by: Aurelien Jarno Signed-off-by: Richard Henderson --- target/s390x/mem_helper.c | 161 +++++++++++++++++++++++-------------------= ---- 1 file changed, 81 insertions(+), 80 deletions(-) diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index e3325a4..90b62fa 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -436,86 +436,6 @@ static uint32_t helper_icm(CPUS390XState *env, uint32_= t r1, uint64_t address, return cc; } =20 -/* execute instruction - this instruction executes an insn modified with the contents of r1 - it does not change the executed instruction in memory - it does not change the program counter - in other words: tricky... - currently implemented by interpreting the cases it is most commonly use= d in -*/ -uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1, - uint64_t addr, uint64_t ret) -{ - S390CPU *cpu =3D s390_env_get_cpu(env); - uint16_t insn =3D cpu_lduw_code(env, addr); - - HELPER_LOG("%s: v1 0x%lx addr 0x%lx insn 0x%x\n", __func__, v1, addr, - insn); - if ((insn & 0xf0ff) =3D=3D 0xd000) { - uint32_t l, insn2, b1, b2, d1, d2; - - l =3D v1 & 0xff; - insn2 =3D cpu_ldl_code(env, addr + 2); - b1 =3D (insn2 >> 28) & 0xf; - b2 =3D (insn2 >> 12) & 0xf; - d1 =3D (insn2 >> 16) & 0xfff; - d2 =3D insn2 & 0xfff; - switch (insn & 0xf00) { - case 0x200: - helper_mvc(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0x400: - cc =3D helper_nc(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0x500: - cc =3D helper_clc(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0x600: - cc =3D helper_oc(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0x700: - cc =3D helper_xc(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0xc00: - helper_tr(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - case 0xd00: - cc =3D helper_trt(env, l, get_address(env, 0, b1, d1), - get_address(env, 0, b2, d2)); - break; - default: - goto abort; - } - } else if ((insn & 0xff00) =3D=3D 0x0a00) { - /* supervisor call */ - HELPER_LOG("%s: svc %ld via execute\n", __func__, (insn | v1) & 0x= ff); - env->psw.addr =3D ret - 4; - env->int_svc_code =3D (insn | v1) & 0xff; - env->int_svc_ilen =3D 4; - helper_exception(env, EXCP_SVC); - } else if ((insn & 0xff00) =3D=3D 0xbf00) { - uint32_t insn2, r1, r3, b2, d2; - - insn2 =3D cpu_ldl_code(env, addr + 2); - r1 =3D (insn2 >> 20) & 0xf; - r3 =3D (insn2 >> 16) & 0xf; - b2 =3D (insn2 >> 12) & 0xf; - d2 =3D insn2 & 0xfff; - cc =3D helper_icm(env, r1, get_address(env, 0, b2, d2), r3); - } else { - abort: - cpu_abort(CPU(cpu), "EXECUTE on instruction prefix 0x%x not implem= ented\n", - insn); - } - return cc; -} - /* load access registers r1 to r3 from memory at a2 */ void HELPER(lam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3) { @@ -1262,3 +1182,84 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t ad= dr) return ret; } #endif + +/* execute instruction + this instruction executes an insn modified with the contents of r1 + it does not change the executed instruction in memory + it does not change the program counter + in other words: tricky... + currently implemented by interpreting the cases it is most commonly use= d. +*/ +uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1, + uint64_t addr, uint64_t ret) +{ + S390CPU *cpu =3D s390_env_get_cpu(env); + uint16_t insn =3D cpu_lduw_code(env, addr); + + HELPER_LOG("%s: v1 0x%lx addr 0x%lx insn 0x%x\n", __func__, v1, addr, + insn); + if ((insn & 0xf0ff) =3D=3D 0xd000) { + uint32_t l, insn2, b1, b2, d1, d2; + + l =3D v1 & 0xff; + insn2 =3D cpu_ldl_code(env, addr + 2); + b1 =3D (insn2 >> 28) & 0xf; + b2 =3D (insn2 >> 12) & 0xf; + d1 =3D (insn2 >> 16) & 0xfff; + d2 =3D insn2 & 0xfff; + switch (insn & 0xf00) { + case 0x200: + helper_mvc(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0x400: + cc =3D helper_nc(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0x500: + cc =3D helper_clc(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0x600: + cc =3D helper_oc(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0x700: + cc =3D helper_xc(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0xc00: + helper_tr(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + case 0xd00: + cc =3D helper_trt(env, l, get_address(env, 0, b1, d1), + get_address(env, 0, b2, d2)); + break; + default: + goto abort; + } + } else if ((insn & 0xff00) =3D=3D 0x0a00) { + /* supervisor call */ + HELPER_LOG("%s: svc %ld via execute\n", __func__, (insn | v1) & 0x= ff); + env->psw.addr =3D ret - 4; + env->int_svc_code =3D (insn | v1) & 0xff; + env->int_svc_ilen =3D 4; + helper_exception(env, EXCP_SVC); + } else if ((insn & 0xff00) =3D=3D 0xbf00) { + uint32_t insn2, r1, r3, b2, d2; + + insn2 =3D cpu_ldl_code(env, addr + 2); + r1 =3D (insn2 >> 20) & 0xf; + r3 =3D (insn2 >> 16) & 0xf; + b2 =3D (insn2 >> 12) & 0xf; + d2 =3D insn2 & 0xfff; + cc =3D helper_icm(env, r1, get_address(env, 0, b2, d2), r3); + } else { + abort: + cpu_abort(CPU(cpu), + "EXECUTE on instruction prefix 0x%x not implemented\n", + insn); + } + return cc; +} --=20 2.9.4