From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, aurelien@aurel32.net
Subject: [Qemu-devel] [PATCH v2 02/33] target/s390x: Move helper_ex to end of file
Date: Wed, 24 May 2017 12:22:15 -0700 [thread overview]
Message-ID: <20170524192246.15905-3-rth@twiddle.net> (raw)
In-Reply-To: <20170524192246.15905-1-rth@twiddle.net>
This will avoid needing forward declarations in following patches.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
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;
}
-/* 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 used in
-*/
-uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
- uint64_t addr, uint64_t ret)
-{
- S390CPU *cpu = s390_env_get_cpu(env);
- uint16_t insn = 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) == 0xd000) {
- uint32_t l, insn2, b1, b2, d1, d2;
-
- l = v1 & 0xff;
- insn2 = cpu_ldl_code(env, addr + 2);
- b1 = (insn2 >> 28) & 0xf;
- b2 = (insn2 >> 12) & 0xf;
- d1 = (insn2 >> 16) & 0xfff;
- d2 = 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 = helper_nc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
- break;
- case 0x500:
- cc = helper_clc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
- break;
- case 0x600:
- cc = helper_oc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
- break;
- case 0x700:
- cc = 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 = helper_trt(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
- break;
- default:
- goto abort;
- }
- } else if ((insn & 0xff00) == 0x0a00) {
- /* supervisor call */
- HELPER_LOG("%s: svc %ld via execute\n", __func__, (insn | v1) & 0xff);
- env->psw.addr = ret - 4;
- env->int_svc_code = (insn | v1) & 0xff;
- env->int_svc_ilen = 4;
- helper_exception(env, EXCP_SVC);
- } else if ((insn & 0xff00) == 0xbf00) {
- uint32_t insn2, r1, r3, b2, d2;
-
- insn2 = cpu_ldl_code(env, addr + 2);
- r1 = (insn2 >> 20) & 0xf;
- r3 = (insn2 >> 16) & 0xf;
- b2 = (insn2 >> 12) & 0xf;
- d2 = insn2 & 0xfff;
- cc = 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;
-}
-
/* 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 addr)
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 used.
+*/
+uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
+ uint64_t addr, uint64_t ret)
+{
+ S390CPU *cpu = s390_env_get_cpu(env);
+ uint16_t insn = 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) == 0xd000) {
+ uint32_t l, insn2, b1, b2, d1, d2;
+
+ l = v1 & 0xff;
+ insn2 = cpu_ldl_code(env, addr + 2);
+ b1 = (insn2 >> 28) & 0xf;
+ b2 = (insn2 >> 12) & 0xf;
+ d1 = (insn2 >> 16) & 0xfff;
+ d2 = 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 = helper_nc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2));
+ break;
+ case 0x500:
+ cc = helper_clc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2));
+ break;
+ case 0x600:
+ cc = helper_oc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2));
+ break;
+ case 0x700:
+ cc = 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 = helper_trt(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2));
+ break;
+ default:
+ goto abort;
+ }
+ } else if ((insn & 0xff00) == 0x0a00) {
+ /* supervisor call */
+ HELPER_LOG("%s: svc %ld via execute\n", __func__, (insn | v1) & 0xff);
+ env->psw.addr = ret - 4;
+ env->int_svc_code = (insn | v1) & 0xff;
+ env->int_svc_ilen = 4;
+ helper_exception(env, EXCP_SVC);
+ } else if ((insn & 0xff00) == 0xbf00) {
+ uint32_t insn2, r1, r3, b2, d2;
+
+ insn2 = cpu_ldl_code(env, addr + 2);
+ r1 = (insn2 >> 20) & 0xf;
+ r3 = (insn2 >> 16) & 0xf;
+ b2 = (insn2 >> 12) & 0xf;
+ d2 = insn2 & 0xfff;
+ cc = 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;
+}
--
2.9.4
next prev parent reply other threads:[~2017-05-24 19:22 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-24 19:22 [Qemu-devel] [PATCH v2 00/33] target/s390x unwind patches Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 01/33] target/s390x: Use cpu_loop_exit_restore for tlb_fill Richard Henderson
2017-05-24 19:22 ` Richard Henderson [this message]
2017-05-25 20:22 ` [Qemu-devel] [PATCH v2 02/33] target/s390x: Move helper_ex to end of file Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 03/33] target/s390x: Use unwind data for helper_nc Richard Henderson
2017-05-25 20:26 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 04/33] target/s390x: Use unwind data for helper_oc Richard Henderson
2017-05-25 20:26 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 05/33] target/s390x: Use unwind data for helper_xc Richard Henderson
2017-05-25 20:32 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 06/33] target/s390x: Use unwind data for helper_mvc Richard Henderson
2017-05-25 20:33 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 07/33] target/s390x: Use unwind data for helper_clc Richard Henderson
2017-05-25 20:34 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 08/33] target/s390x: Use unwind data for helper_clm Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 09/33] target/s390x: Use unwind data for helper_srst Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 10/33] target/s390x: Use unwind data for helper_clst Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 11/33] target/s390x: Use unwind data for helper_mvpg Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 12/33] target/s390x: Use unwind data for helper_mvst Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 13/33] target/s390x: Use unwind data for helper_lam Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 14/33] target/s390x: Use unwind data for helper_stam Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 15/33] target/s390x: Use unwind data for helper_mvcl Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 16/33] target/s390x: Use unwind data for helper_mvcle Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 17/33] target/s390x: Use unwind data for helper_clcle Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 18/33] target/s390x: Use unwind data for helper_cksm Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 19/33] target/s390x: Use unwind data for helper_unpk Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 20/33] target/s390x: Use unwind data for helper_tr Richard Henderson
2017-05-25 20:35 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 21/33] target/s390x: Use unwind data for helper_tre Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 22/33] target/s390x: Use unwind data for helper_trt Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 23/33] target/s390x: Use unwind data for helper_lctlg Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 24/33] target/s390x: Use unwind data for helper_lctl Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 25/33] target/s390x: Use unwind data for helper_stctl Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 26/33] target/s390x: Use unwind data for helper_testblock Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 27/33] target/s390x: Use unwind data for helper_tprot Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 28/33] target/s390x: Use unwind data for helper_lra Richard Henderson
2017-05-25 20:39 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 29/33] target/s390x: Use unwind data for helper_mvcs/mvcp Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 30/33] target/s390x: Fix some helper_ex problems Richard Henderson
2017-05-25 20:50 ` Aurelien Jarno
2017-05-26 5:58 ` Richard Henderson
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 31/33] target/s390x: Fix EXECUTE with R1==0 Richard Henderson
2017-05-25 20:51 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 32/33] target/s390x: Use atomic operations for COMPARE SWAP PURGE Richard Henderson
2017-05-25 20:52 ` Aurelien Jarno
2017-05-24 19:22 ` [Qemu-devel] [PATCH v2 33/33] target/s390x: Implement CSPG Richard Henderson
2017-05-25 20:52 ` Aurelien Jarno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170524192246.15905-3-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=aurelien@aurel32.net \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).