All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, aurelien@aurel32.net
Subject: [Qemu-devel] [PULL v2 03/70] target/s390x: Move helper_ex to end of file
Date: Tue,  6 Jun 2017 17:30:12 -0700	[thread overview]
Message-ID: <20170607003119.14778-4-rth@twiddle.net> (raw)
In-Reply-To: <20170607003119.14778-1-rth@twiddle.net>

This will avoid needing forward declarations in following patches.

Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
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

  parent reply	other threads:[~2017-06-07  0:31 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-07  0:30 [Qemu-devel] [PULL v2 00/70] target/s390x tcg patches Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 01/70] target/s390x: Add support for the TEST BLOCK instruction Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 02/70] target/s390x: Use cpu_loop_exit_restore for tlb_fill Richard Henderson
2017-06-07  0:30 ` Richard Henderson [this message]
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 04/70] target/s390x: Use unwind data for helper_nc Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 05/70] target/s390x: Use unwind data for helper_oc Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 06/70] target/s390x: Use unwind data for helper_xc Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 07/70] target/s390x: Use unwind data for helper_mvc Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 08/70] target/s390x: Use unwind data for helper_clc Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 09/70] target/s390x: Use unwind data for helper_clm Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 10/70] target/s390x: Use unwind data for helper_srst Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 11/70] target/s390x: Use unwind data for helper_clst Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 12/70] target/s390x: Use unwind data for helper_mvpg Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 13/70] target/s390x: Use unwind data for helper_mvst Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 14/70] target/s390x: Use unwind data for helper_lam Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 15/70] target/s390x: Use unwind data for helper_stam Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 16/70] target/s390x: Use unwind data for helper_mvcl Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 17/70] target/s390x: Use unwind data for helper_mvcle Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 18/70] target/s390x: Use unwind data for helper_clcle Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 19/70] target/s390x: Use unwind data for helper_cksm Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 20/70] target/s390x: Use unwind data for helper_unpk Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 21/70] target/s390x: Use unwind data for helper_tr Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 22/70] target/s390x: Use unwind data for helper_tre Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 23/70] target/s390x: Use unwind data for helper_trt Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 24/70] target/s390x: Use unwind data for helper_lctlg Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 25/70] target/s390x: Use unwind data for helper_lctl Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 26/70] target/s390x: Use unwind data for helper_stctl Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 27/70] target/s390x: Use unwind data for helper_testblock Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 28/70] target/s390x: Use unwind data for helper_tprot Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 29/70] target/s390x: Use unwind data for helper_lra Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 30/70] target/s390x: Use unwind data for helper_mvcs/mvcp Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 31/70] target/s390x: Fix some helper_ex problems Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 32/70] target/s390x: Fix EXECUTE with R1==0 Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 33/70] target/s390x: Use atomic operations for COMPARE SWAP PURGE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 34/70] target/s390x: Implement CSPG Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 35/70] target/s390x: Save current ilen during translation Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 36/70] target/s390x: End the TB after EXECUTE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 37/70] target/s390x: Implement EXECUTE via new TranslationBlock Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 38/70] target/s390x: Re-implement a few EXECUTE target insns directly Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 39/70] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 40/70] target/s390x: remove dead code in translate.c Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 41/70] target/s390x: remove some Linux assumptions from IPTE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 42/70] target/s390x: implement local-TLB-clearing in IPTE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 43/70] target/s390x: implement TEST AND SET Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 44/70] target/s390x: implement TEST ADDRESSING MODE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 45/70] target/s390x: implement PACK Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 46/70] target/s390x: implement COMPARE AND SIGNAL Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 47/70] target/s390x: implement MOVE INVERSE Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 48/70] target/s390x: implement MOVE NUMERICS Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 49/70] target/s390x: implement MOVE WITH OFFSET Richard Henderson
2017-06-07  0:30 ` [Qemu-devel] [PULL v2 50/70] target/s390x: implement MOVE ZONES Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 51/70] target/s390x: improve 24-bit and 31-bit addresses read Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 52/70] target/s390x: improve 24-bit and 31-bit addresses write Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 53/70] target/s390x: improve 24-bit and 31-bit lengths read/write Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 54/70] target/s390x: fix COMPARE LOGICAL LONG EXTENDED Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 55/70] target/s390x: implement COMPARE LOGICAL LONG Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 56/70] target/s390x: fix adj_len_to_page Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 57/70] target/s390x: improve MOVE LONG and MOVE LONG EXTENDED Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 58/70] target/s390x: implement COMPARE LOGICAL LONG UNICODE Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 59/70] target/s390x: implement MOVE " Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 60/70] target/s390x: implement PACK ASCII Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 61/70] target/s390x: implement PACK UNICODE Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 62/70] target/s390x: implement UNPACK ASCII Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 63/70] target/s390x: implement UNPACK UNICODE Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 64/70] target/s390x: implement TEST DECIMAL Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 65/70] target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 66/70] target/s390x: implement LOAD PAIR FROM QUADWORD Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 67/70] target/s390x: implement STORE PAIR TO QUADWORD Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 68/70] target/s390x: check alignment in CDSG in the !CONFIG_ATOMIC128 case Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 69/70] target/s390x: mark ETF2 and ETF2-ENH facilities as available Richard Henderson
2017-06-07  0:31 ` [Qemu-devel] [PULL v2 70/70] target/s390x: addressing exceptions are suppressing Richard Henderson
2017-06-07 10:15 ` [Qemu-devel] [PULL v2 00/70] target/s390x tcg patches Peter Maydell

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=20170607003119.14778-4-rth@twiddle.net \
    --to=rth@twiddle.net \
    --cc=aurelien@aurel32.net \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.