* [Qemu-devel] [PULL 00/69] target/s390x tcg patches
@ 2017-06-04 17:34 Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 01/69] target/s390x: Add support for the TEST BLOCK instruction Richard Henderson
` (70 more replies)
0 siblings, 71 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
The queue has gotten overlong. This includes my unwinding patches,
the execute rewrite, and Aurelien's flushing out of missing Z insns.
It does *not* include Aurelian's final patch to bump the base tcg
cpu to z800. David Hildenbrand had objections to that; I expect
that we can address that in the next patch set.
r~
The following changes since commit c6e84fbd447a51e1161d74d71566a5f67b47eac5:
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2017-06-02 17:46:22 +0100)
are available in the git repository at:
git://github.com/rth7680/qemu.git tags/pull-s390-20170604
for you to fetch changes up to 2be5fdbe14165d47a88054c9d117801e09239098:
target/s390x: addressing exceptions are suppressing (2017-06-04 10:23:15 -0700)
----------------------------------------------------------------
Queued s390x tcg patches
----------------------------------------------------------------
Aurelien Jarno (29):
target/s390x: remove dead code in translate.c
target/s390x: remove some Linux assumptions from IPTE
target/s390x: implement local-TLB-clearing in IPTE
target/s390x: implement TEST AND SET
target/s390x: implement TEST ADDRESSING MODE
target/s390x: implement PACK
target/s390x: implement LOAD PAIR FROM QUADWORD
target/s390x: implement STORE PAIR TO QUADWORD
target/s390x: implement COMPARE AND SIGNAL
target/s390x: implement MOVE INVERSE
target/s390x: implement MOVE NUMERICS
target/s390x: implement MOVE WITH OFFSET
target/s390x: implement MOVE ZONES
target/s390x: improve 24-bit and 31-bit addresses read
target/s390x: improve 24-bit and 31-bit addresses write
target/s390x: improve 24-bit and 31-bit lengths read/write
target/s390x: fix COMPARE LOGICAL LONG EXTENDED
target/s390x: implement COMPARE LOGICAL LONG
target/s390x: fix adj_len_to_page
target/s390x: improve MOVE LONG and MOVE LONG EXTENDED
target/s390x: implement COMPARE LOGICAL LONG UNICODE
target/s390x: implement MOVE LONG UNICODE
target/s390x: implement PACK ASCII
target/s390x: implement PACK UNICODE
target/s390x: implement UNPACK ASCII
target/s390x: implement UNPACK UNICODE
target/s390x: implement TEST DECIMAL
target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO
target/s390x: mark ETF2 and ETF2-ENH facilities as available
David Hildenbrand (1):
target/s390x: addressing exceptions are suppressing
Richard Henderson (37):
target/s390x: Use cpu_loop_exit_restore for tlb_fill
target/s390x: Move helper_ex to end of file
target/s390x: Use unwind data for helper_nc
target/s390x: Use unwind data for helper_oc
target/s390x: Use unwind data for helper_xc
target/s390x: Use unwind data for helper_mvc
target/s390x: Use unwind data for helper_clc
target/s390x: Use unwind data for helper_clm
target/s390x: Use unwind data for helper_srst
target/s390x: Use unwind data for helper_clst
target/s390x: Use unwind data for helper_mvpg
target/s390x: Use unwind data for helper_mvst
target/s390x: Use unwind data for helper_lam
target/s390x: Use unwind data for helper_stam
target/s390x: Use unwind data for helper_mvcl
target/s390x: Use unwind data for helper_mvcle
target/s390x: Use unwind data for helper_clcle
target/s390x: Use unwind data for helper_cksm
target/s390x: Use unwind data for helper_unpk
target/s390x: Use unwind data for helper_tr
target/s390x: Use unwind data for helper_tre
target/s390x: Use unwind data for helper_trt
target/s390x: Use unwind data for helper_lctlg
target/s390x: Use unwind data for helper_lctl
target/s390x: Use unwind data for helper_stctl
target/s390x: Use unwind data for helper_testblock
target/s390x: Use unwind data for helper_tprot
target/s390x: Use unwind data for helper_lra
target/s390x: Use unwind data for helper_mvcs/mvcp
target/s390x: Fix some helper_ex problems
target/s390x: Fix EXECUTE with R1==0
target/s390x: Use atomic operations for COMPARE SWAP PURGE
target/s390x: Implement CSPG
target/s390x: Save current ilen during translation
target/s390x: End the TB after EXECUTE
target/s390x: Implement EXECUTE via new TranslationBlock
target/s390x: Re-implement a few EXECUTE target insns directly
Thomas Huth (2):
target/s390x: Add support for the TEST BLOCK instruction
target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU
target/s390x/cpu.h | 7 +-
target/s390x/cpu_models.c | 36 +-
target/s390x/fpu_helper.c | 27 +
target/s390x/helper.c | 7 +-
target/s390x/helper.h | 28 +-
target/s390x/insn-data.def | 66 ++-
target/s390x/machine.c | 19 +
target/s390x/mem_helper.c | 1297 +++++++++++++++++++++++++++++++-------------
target/s390x/misc_helper.c | 4 +-
target/s390x/mmu_helper.c | 4 +-
target/s390x/translate.c | 526 ++++++++++++++----
11 files changed, 1525 insertions(+), 496 deletions(-)
^ permalink raw reply [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 01/69] target/s390x: Add support for the TEST BLOCK instruction
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 02/69] target/s390x: Use cpu_loop_exit_restore for tlb_fill Richard Henderson
` (69 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien, Thomas Huth
From: Thomas Huth <thuth@redhat.com>
TEST BLOCK was likely once used to execute basic memory
tests, but nowadays it's just a (slow) way to clear a page.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-Id: <1495128400-23759-1-git-send-email-thuth@redhat.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/cpu.h | 1 +
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 28 ++++++++++++++++++++++++++++
target/s390x/mmu_helper.c | 2 +-
target/s390x/translate.c | 11 +++++++++++
6 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index c74b419..f463113 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -1084,6 +1084,7 @@ struct sysib_322 {
#define SIGP_ORDER_MASK 0x000000ff
void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr);
+target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr);
int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
target_ulong *raddr, int *flags, bool exc);
int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code);
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 0b70770..1fae191 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -102,6 +102,7 @@ DEF_HELPER_FLAGS_4(lctl, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(lctlg, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(stctl, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(stctg, TCG_CALL_NO_WG, void, env, i32, i64, i32)
+DEF_HELPER_FLAGS_2(testblock, TCG_CALL_NO_WG, i32, env, i64)
DEF_HELPER_FLAGS_2(tprot, TCG_CALL_NO_RWG, i32, i64, i64)
DEF_HELPER_FLAGS_2(iske, TCG_CALL_NO_RWG_SE, i64, env, i64)
DEF_HELPER_FLAGS_3(sske, TCG_CALL_NO_RWG, void, env, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 55a7c52..cac0f51 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -918,6 +918,8 @@
/* STORE USING REAL ADDRESS */
C(0xb246, STURA, RRE, Z, r1_o, r2_o, 0, 0, stura, 0)
C(0xb925, STURG, RRE, Z, r1_o, r2_o, 0, 0, sturg, 0)
+/* TEST BLOCK */
+ C(0xb22c, TB, RRE, Z, 0, r2_o, 0, 0, testblock, 0)
/* TEST PROTECTION */
C(0xe501, TPROT, SSE, Z, la1, a2, 0, 0, tprot, 0)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index f6e5bce..0c6a0d9 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -20,6 +20,7 @@
#include "qemu/osdep.h"
#include "cpu.h"
+#include "exec/address-spaces.h"
#include "exec/helper-proto.h"
#include "exec/exec-all.h"
#include "exec/cpu_ldst.h"
@@ -973,6 +974,33 @@ void HELPER(stctl)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
}
}
+uint32_t HELPER(testblock)(CPUS390XState *env, uint64_t real_addr)
+{
+ CPUState *cs = CPU(s390_env_get_cpu(env));
+ uint64_t abs_addr;
+ int i;
+
+ real_addr = fix_address(env, real_addr);
+ abs_addr = mmu_real2abs(env, real_addr) & TARGET_PAGE_MASK;
+ if (!address_space_access_valid(&address_space_memory, abs_addr,
+ TARGET_PAGE_SIZE, true)) {
+ program_interrupt(env, PGM_ADDRESSING, 4);
+ return 1;
+ }
+
+ /* Check low-address protection */
+ if ((env->cregs[0] & CR0_LOWPROT) && real_addr < 0x2000) {
+ program_interrupt(env, PGM_PROTECTION, 4);
+ return 1;
+ }
+
+ for (i = 0; i < TARGET_PAGE_SIZE; i += 8) {
+ stq_phys(cs->as, abs_addr + i, 0);
+ }
+
+ return 0;
+}
+
uint32_t HELPER(tprot)(uint64_t a1, uint64_t a2)
{
/* XXX implement */
diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c
index b11a027..31eb9ef 100644
--- a/target/s390x/mmu_helper.c
+++ b/target/s390x/mmu_helper.c
@@ -108,7 +108,7 @@ static void trigger_page_fault(CPUS390XState *env, target_ulong vaddr,
* Translate real address to absolute (= physical)
* address by taking care of the prefix mapping.
*/
-static target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr)
+target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr)
{
if (raddr < 0x2000) {
return raddr + env->psa; /* Map the lowcore. */
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 4c48c59..d6736e4 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4057,6 +4057,16 @@ static ExitStatus op_tcxb(DisasContext *s, DisasOps *o)
}
#ifndef CONFIG_USER_ONLY
+
+static ExitStatus op_testblock(DisasContext *s, DisasOps *o)
+{
+ check_privileged(s);
+ potential_page_fault(s);
+ gen_helper_testblock(cc_op, cpu_env, o->in2);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_tprot(DisasContext *s, DisasOps *o)
{
potential_page_fault(s);
@@ -4064,6 +4074,7 @@ static ExitStatus op_tprot(DisasContext *s, DisasOps *o)
set_cc_static(s);
return NO_EXIT;
}
+
#endif
static ExitStatus op_tr(DisasContext *s, DisasOps *o)
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 02/69] target/s390x: Use cpu_loop_exit_restore for tlb_fill
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 01/69] target/s390x: Add support for the TEST BLOCK instruction Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 03/69] target/s390x: Move helper_ex to end of file Richard Henderson
` (68 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 0c6a0d9..e3325a4 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -41,15 +41,9 @@
void tlb_fill(CPUState *cs, target_ulong addr, MMUAccessType access_type,
int mmu_idx, uintptr_t retaddr)
{
- int ret;
-
- ret = s390_cpu_handle_mmu_fault(cs, addr, access_type, mmu_idx);
+ int ret = s390_cpu_handle_mmu_fault(cs, addr, access_type, mmu_idx);
if (unlikely(ret != 0)) {
- if (likely(retaddr)) {
- /* now we have a real cpu fault */
- cpu_restore_state(cs, retaddr);
- }
- cpu_loop_exit(cs);
+ cpu_loop_exit_restore(cs, retaddr);
}
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 03/69] target/s390x: Move helper_ex to end of file
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 01/69] target/s390x: Add support for the TEST BLOCK instruction Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 02/69] target/s390x: Use cpu_loop_exit_restore for tlb_fill Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 04/69] target/s390x: Use unwind data for helper_nc Richard Henderson
` (67 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
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
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 04/69] target/s390x: Use unwind data for helper_nc
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (2 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 03/69] target/s390x: Move helper_ex to end of file Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 05/69] target/s390x: Use unwind data for helper_oc Richard Henderson
` (66 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 31 ++++++++++++++++++-------------
target/s390x/translate.c | 1 -
2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 90b62fa..7d6133b 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -119,23 +119,28 @@ static void fast_memmove(CPUS390XState *env, uint64_t dest, uint64_t src,
}
/* and on array */
-uint32_t HELPER(nc)(CPUS390XState *env, uint32_t l, uint64_t dest,
- uint64_t src)
+static uint32_t do_helper_nc(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src, uintptr_t ra)
{
- int i;
- unsigned char x;
- uint32_t cc = 0;
+ uint32_t i;
+ uint8_t c = 0;
HELPER_LOG("%s l %d dest %" PRIx64 " src %" PRIx64 "\n",
__func__, l, dest, src);
+
for (i = 0; i <= l; i++) {
- x = cpu_ldub_data(env, dest + i) & cpu_ldub_data(env, src + i);
- if (x) {
- cc = 1;
- }
- cpu_stb_data(env, dest + i, x);
+ uint8_t x = cpu_ldub_data_ra(env, src + i, ra);
+ x &= cpu_ldub_data_ra(env, dest + i, ra);
+ c |= x;
+ cpu_stb_data_ra(env, dest + i, x, ra);
}
- return cc;
+ return c != 0;
+}
+
+uint32_t HELPER(nc)(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src)
+{
+ return do_helper_nc(env, l, dest, src, GETPC());
}
/* xor on array */
@@ -1213,8 +1218,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
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));
+ cc = do_helper_nc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
case 0x500:
cc = helper_clc(env, l, get_address(env, 0, b1, d1),
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index d6736e4..7e4cc6c 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3043,7 +3043,6 @@ static ExitStatus op_nabsf128(DisasContext *s, DisasOps *o)
static ExitStatus op_nc(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_nc(cc_op, cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 05/69] target/s390x: Use unwind data for helper_oc
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (3 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 04/69] target/s390x: Use unwind data for helper_nc Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 06/69] target/s390x: Use unwind data for helper_xc Richard Henderson
` (65 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 31 ++++++++++++++++++-------------
target/s390x/translate.c | 1 -
2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 7d6133b..b4b50d1 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -171,23 +171,28 @@ uint32_t HELPER(xc)(CPUS390XState *env, uint32_t l, uint64_t dest,
}
/* or on array */
-uint32_t HELPER(oc)(CPUS390XState *env, uint32_t l, uint64_t dest,
- uint64_t src)
+static uint32_t do_helper_oc(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src, uintptr_t ra)
{
- int i;
- unsigned char x;
- uint32_t cc = 0;
+ uint32_t i;
+ uint8_t c = 0;
HELPER_LOG("%s l %d dest %" PRIx64 " src %" PRIx64 "\n",
__func__, l, dest, src);
+
for (i = 0; i <= l; i++) {
- x = cpu_ldub_data(env, dest + i) | cpu_ldub_data(env, src + i);
- if (x) {
- cc = 1;
- }
- cpu_stb_data(env, dest + i, x);
+ uint8_t x = cpu_ldub_data_ra(env, src + i, ra);
+ x |= cpu_ldub_data_ra(env, dest + i, ra);
+ c |= x;
+ cpu_stb_data_ra(env, dest + i, x, ra);
}
- return cc;
+ return c != 0;
+}
+
+uint32_t HELPER(oc)(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src)
+{
+ return do_helper_oc(env, l, dest, src, GETPC());
}
/* memmove */
@@ -1226,8 +1231,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
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));
+ cc = do_helper_oc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
case 0x700:
cc = helper_xc(env, l, get_address(env, 0, b1, d1),
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 7e4cc6c..db86b70 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3077,7 +3077,6 @@ static ExitStatus op_negf128(DisasContext *s, DisasOps *o)
static ExitStatus op_oc(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_oc(cc_op, cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 06/69] target/s390x: Use unwind data for helper_xc
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (4 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 05/69] target/s390x: Use unwind data for helper_oc Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 07/69] target/s390x: Use unwind data for helper_mvc Richard Henderson
` (64 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 44 ++++++++++++++++++++++++--------------------
target/s390x/translate.c | 1 -
2 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index b4b50d1..b71437a 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -57,7 +57,7 @@ void tlb_fill(CPUState *cs, target_ulong addr, MMUAccessType access_type,
#endif
/* Reduce the length so that addr + len doesn't cross a page boundary. */
-static inline uint64_t adj_len_to_page(uint64_t len, uint64_t addr)
+static inline uint32_t adj_len_to_page(uint32_t len, uint64_t addr)
{
#ifndef CONFIG_USER_ONLY
if ((addr & ~TARGET_PAGE_MASK) + len - 1 >= TARGET_PAGE_SIZE) {
@@ -68,7 +68,7 @@ static inline uint64_t adj_len_to_page(uint64_t len, uint64_t addr)
}
static void fast_memset(CPUS390XState *env, uint64_t dest, uint8_t byte,
- uint32_t l)
+ uint32_t l, uintptr_t ra)
{
int mmu_idx = cpu_mmu_index(env, false);
@@ -76,14 +76,14 @@ static void fast_memset(CPUS390XState *env, uint64_t dest, uint8_t byte,
void *p = tlb_vaddr_to_host(env, dest, MMU_DATA_STORE, mmu_idx);
if (p) {
/* Access to the whole page in write mode granted. */
- int l_adj = adj_len_to_page(l, dest);
+ uint32_t l_adj = adj_len_to_page(l, dest);
memset(p, byte, l_adj);
dest += l_adj;
l -= l_adj;
} else {
/* We failed to get access to the whole page. The next write
access will likely fill the QEMU TLB for the next iteration. */
- cpu_stb_data(env, dest, byte);
+ cpu_stb_data_ra(env, dest, byte, ra);
dest++;
l--;
}
@@ -100,7 +100,7 @@ static void fast_memmove(CPUS390XState *env, uint64_t dest, uint64_t src,
void *dest_p = tlb_vaddr_to_host(env, dest, MMU_DATA_STORE, mmu_idx);
if (src_p && dest_p) {
/* Access to both whole pages granted. */
- int l_adj = adj_len_to_page(l, src);
+ uint32_t l_adj = adj_len_to_page(l, src);
l_adj = adj_len_to_page(l_adj, dest);
memmove(dest_p, src_p, l_adj);
src += l_adj;
@@ -144,30 +144,34 @@ uint32_t HELPER(nc)(CPUS390XState *env, uint32_t l, uint64_t dest,
}
/* xor on array */
-uint32_t HELPER(xc)(CPUS390XState *env, uint32_t l, uint64_t dest,
- uint64_t src)
+static uint32_t do_helper_xc(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src, uintptr_t ra)
{
- int i;
- unsigned char x;
- uint32_t cc = 0;
+ uint32_t i;
+ uint8_t c = 0;
HELPER_LOG("%s l %d dest %" PRIx64 " src %" PRIx64 "\n",
__func__, l, dest, src);
/* xor with itself is the same as memset(0) */
if (src == dest) {
- fast_memset(env, dest, 0, l + 1);
+ fast_memset(env, dest, 0, l + 1, ra);
return 0;
}
for (i = 0; i <= l; i++) {
- x = cpu_ldub_data(env, dest + i) ^ cpu_ldub_data(env, src + i);
- if (x) {
- cc = 1;
- }
- cpu_stb_data(env, dest + i, x);
+ uint8_t x = cpu_ldub_data_ra(env, src + i, ra);
+ x ^= cpu_ldub_data_ra(env, dest + i, ra);
+ c |= x;
+ cpu_stb_data_ra(env, dest + i, x, ra);
}
- return cc;
+ return c != 0;
+}
+
+uint32_t HELPER(xc)(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src)
+{
+ return do_helper_xc(env, l, dest, src, GETPC());
}
/* or on array */
@@ -206,7 +210,7 @@ void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
/* mvc with source pointing to the byte after the destination is the
same as memset with the first source byte */
if (dest == (src + 1)) {
- fast_memset(env, dest, cpu_ldub_data(env, src), l + 1);
+ fast_memset(env, dest, cpu_ldub_data(env, src), l + 1, 0);
return;
}
@@ -1235,8 +1239,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
get_address(env, 0, b2, d2), 0);
break;
case 0x700:
- cc = helper_xc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
+ cc = do_helper_xc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
case 0xc00:
helper_tr(env, l, get_address(env, 0, b1, d1),
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index db86b70..40a4099 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4160,7 +4160,6 @@ static ExitStatus op_xc(DisasContext *s, DisasOps *o)
/* But in general we'll defer to a helper. */
o->in2 = get_address(s, 0, b2, d2);
t32 = tcg_const_i32(l);
- potential_page_fault(s);
gen_helper_xc(cc_op, cpu_env, t32, o->addr1, o->in2);
tcg_temp_free_i32(t32);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 07/69] target/s390x: Use unwind data for helper_mvc
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (5 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 06/69] target/s390x: Use unwind data for helper_xc Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 08/69] target/s390x: Use unwind data for helper_clc Richard Henderson
` (63 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 30 ++++++++++++++++++------------
target/s390x/translate.c | 1 -
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index b71437a..78a9ac1 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -91,7 +91,7 @@ static void fast_memset(CPUS390XState *env, uint64_t dest, uint8_t byte,
}
static void fast_memmove(CPUS390XState *env, uint64_t dest, uint64_t src,
- uint32_t l)
+ uint32_t l, uintptr_t ra)
{
int mmu_idx = cpu_mmu_index(env, false);
@@ -110,7 +110,7 @@ static void fast_memmove(CPUS390XState *env, uint64_t dest, uint64_t src,
/* We failed to get access to one or both whole pages. The next
read or write access will likely fill the QEMU TLB for the
next iteration. */
- cpu_stb_data(env, dest, cpu_ldub_data(env, src));
+ cpu_stb_data_ra(env, dest, cpu_ldub_data_ra(env, src, ra), ra);
src++;
dest++;
l--;
@@ -200,32 +200,38 @@ uint32_t HELPER(oc)(CPUS390XState *env, uint32_t l, uint64_t dest,
}
/* memmove */
-void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+static void do_helper_mvc(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src, uintptr_t ra)
{
- int i = 0;
+ uint32_t i;
HELPER_LOG("%s l %d dest %" PRIx64 " src %" PRIx64 "\n",
__func__, l, dest, src);
/* mvc with source pointing to the byte after the destination is the
same as memset with the first source byte */
- if (dest == (src + 1)) {
- fast_memset(env, dest, cpu_ldub_data(env, src), l + 1, 0);
+ if (dest == src + 1) {
+ fast_memset(env, dest, cpu_ldub_data_ra(env, src, ra), l + 1, ra);
return;
}
/* mvc and memmove do not behave the same when areas overlap! */
- if ((dest < src) || (src + l < dest)) {
- fast_memmove(env, dest, src, l + 1);
+ if (dest < src || src + l < dest) {
+ fast_memmove(env, dest, src, l + 1, ra);
return;
}
/* slow version with byte accesses which always work */
for (i = 0; i <= l; i++) {
- cpu_stb_data(env, dest + i, cpu_ldub_data(env, src + i));
+ cpu_stb_data_ra(env, dest + i, cpu_ldub_data_ra(env, src + i, ra), ra);
}
}
+void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+{
+ do_helper_mvc(env, l, dest, src, GETPC());
+}
+
/* compare unsigned byte arrays */
uint32_t HELPER(clc)(CPUS390XState *env, uint32_t l, uint64_t s1, uint64_t s2)
{
@@ -388,7 +394,7 @@ void HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2)
{
/* XXX missing r0 handling */
env->cc_op = 0;
- fast_memmove(env, r1, r2, TARGET_PAGE_SIZE);
+ fast_memmove(env, r1, r2, TARGET_PAGE_SIZE, 0);
}
/* string copy (c is string terminator) */
@@ -1223,8 +1229,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
d2 = insn2 & 0xfff;
switch (insn & 0xf00) {
case 0x200:
- helper_mvc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
+ do_helper_mvc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
case 0x400:
cc = do_helper_nc(env, l, get_address(env, 0, b1, d1),
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 40a4099..729924a 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2866,7 +2866,6 @@ static ExitStatus op_movx(DisasContext *s, DisasOps *o)
static ExitStatus op_mvc(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_mvc(cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 08/69] target/s390x: Use unwind data for helper_clc
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (6 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 07/69] target/s390x: Use unwind data for helper_mvc Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 09/69] target/s390x: Use unwind data for helper_clm Richard Henderson
` (62 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 29 +++++++++++++++++------------
target/s390x/translate.c | 1 -
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 78a9ac1..50689bb 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -233,32 +233,37 @@ void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
}
/* compare unsigned byte arrays */
-uint32_t HELPER(clc)(CPUS390XState *env, uint32_t l, uint64_t s1, uint64_t s2)
+static uint32_t do_helper_clc(CPUS390XState *env, uint32_t l, uint64_t s1,
+ uint64_t s2, uintptr_t ra)
{
- int i;
- unsigned char x, y;
- uint32_t cc;
+ uint32_t i;
+ uint32_t cc = 0;
HELPER_LOG("%s l %d s1 %" PRIx64 " s2 %" PRIx64 "\n",
__func__, l, s1, s2);
+
for (i = 0; i <= l; i++) {
- x = cpu_ldub_data(env, s1 + i);
- y = cpu_ldub_data(env, s2 + i);
+ uint8_t x = cpu_ldub_data_ra(env, s1 + i, ra);
+ uint8_t y = cpu_ldub_data_ra(env, s2 + i, ra);
HELPER_LOG("%02x (%c)/%02x (%c) ", x, x, y, y);
if (x < y) {
cc = 1;
- goto done;
+ break;
} else if (x > y) {
cc = 2;
- goto done;
+ break;
}
}
- cc = 0;
- done:
+
HELPER_LOG("\n");
return cc;
}
+uint32_t HELPER(clc)(CPUS390XState *env, uint32_t l, uint64_t s1, uint64_t s2)
+{
+ return do_helper_clc(env, l, s1, s2, GETPC());
+}
+
/* compare logical under mask */
uint32_t HELPER(clm)(CPUS390XState *env, uint32_t r1, uint32_t mask,
uint64_t addr)
@@ -1237,8 +1242,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
get_address(env, 0, b2, d2), 0);
break;
case 0x500:
- cc = helper_clc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
+ cc = do_helper_clc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
case 0x600:
cc = do_helper_oc(env, l, get_address(env, 0, b1, d1),
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 729924a..0f9148a 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1901,7 +1901,6 @@ static ExitStatus op_clc(DisasContext *s, DisasOps *o)
tcg_gen_qemu_ld64(cc_dst, o->in2, get_mem_index(s));
break;
default:
- potential_page_fault(s);
vl = tcg_const_i32(l);
gen_helper_clc(cc_op, cpu_env, vl, o->addr1, o->in2);
tcg_temp_free_i32(vl);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 09/69] target/s390x: Use unwind data for helper_clm
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (7 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 08/69] target/s390x: Use unwind data for helper_clc Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 10/69] target/s390x: Use unwind data for helper_srst Richard Henderson
` (61 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 11 ++++++-----
target/s390x/translate.c | 1 -
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 50689bb..3e75cae 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -268,16 +268,16 @@ uint32_t HELPER(clc)(CPUS390XState *env, uint32_t l, uint64_t s1, uint64_t s2)
uint32_t HELPER(clm)(CPUS390XState *env, uint32_t r1, uint32_t mask,
uint64_t addr)
{
- uint8_t r, d;
- uint32_t cc;
+ uintptr_t ra = GETPC();
+ uint32_t cc = 0;
HELPER_LOG("%s: r1 0x%x mask 0x%x addr 0x%" PRIx64 "\n", __func__, r1,
mask, addr);
- cc = 0;
+
while (mask) {
if (mask & 8) {
- d = cpu_ldub_data(env, addr);
- r = (r1 & 0xff000000UL) >> 24;
+ uint8_t d = cpu_ldub_data_ra(env, addr, ra);
+ uint8_t r = extract32(r1, 24, 8);
HELPER_LOG("mask 0x%x %02x/%02x (0x%" PRIx64 ") ", mask, r, d,
addr);
if (r < d) {
@@ -292,6 +292,7 @@ uint32_t HELPER(clm)(CPUS390XState *env, uint32_t r1, uint32_t mask,
mask = (mask << 1) & 0xf;
r1 <<= 8;
}
+
HELPER_LOG("\n");
return cc;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 0f9148a..34ccc22 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1928,7 +1928,6 @@ static ExitStatus op_clm(DisasContext *s, DisasOps *o)
TCGv_i32 m3 = tcg_const_i32(get_field(s->fields, m3));
TCGv_i32 t1 = tcg_temp_new_i32();
tcg_gen_extrl_i64_i32(t1, o->in1);
- potential_page_fault(s);
gen_helper_clm(cc_op, cpu_env, t1, m3, o->in2);
set_cc_static(s);
tcg_temp_free_i32(t1);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 10/69] target/s390x: Use unwind data for helper_srst
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (8 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 09/69] target/s390x: Use unwind data for helper_clm Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 11/69] target/s390x: Use unwind data for helper_clst Richard Henderson
` (60 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 3 ++-
target/s390x/translate.c | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 3e75cae..33d83e5 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -327,6 +327,7 @@ static inline uint64_t get_address_31fix(CPUS390XState *env, int reg)
uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0, uint64_t end,
uint64_t str)
{
+ uintptr_t ra = GETPC();
uint32_t len;
uint8_t v, c = r0;
@@ -344,7 +345,7 @@ uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0, uint64_t end,
env->cc_op = 2;
return end;
}
- v = cpu_ldub_data(env, str + len);
+ v = cpu_ldub_data_ra(env, str + len, ra);
if (v == c) {
/* Character found. Set R1 to the location; R2 is unmodified. */
env->cc_op = 1;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 34ccc22..cd33c51 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3972,7 +3972,6 @@ static ExitStatus op_stmh(DisasContext *s, DisasOps *o)
static ExitStatus op_srst(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
gen_helper_srst(o->in1, cpu_env, regs[0], o->in1, o->in2);
set_cc_static(s);
return_low128(o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 11/69] target/s390x: Use unwind data for helper_clst
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (9 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 10/69] target/s390x: Use unwind data for helper_srst Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 12/69] target/s390x: Use unwind data for helper_mvpg Richard Henderson
` (59 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 5 +++--
target/s390x/translate.c | 1 -
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 33d83e5..af2801e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -362,6 +362,7 @@ uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0, uint64_t end,
/* unsigned string compare (c is string terminator) */
uint64_t HELPER(clst)(CPUS390XState *env, uint64_t c, uint64_t s1, uint64_t s2)
{
+ uintptr_t ra = GETPC();
uint32_t len;
c = c & 0xff;
@@ -371,8 +372,8 @@ uint64_t HELPER(clst)(CPUS390XState *env, uint64_t c, uint64_t s1, uint64_t s2)
/* 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. */
for (len = 0; len < 0x2000; ++len) {
- uint8_t v1 = cpu_ldub_data(env, s1 + len);
- uint8_t v2 = cpu_ldub_data(env, s2 + len);
+ uint8_t v1 = cpu_ldub_data_ra(env, s1 + len, ra);
+ uint8_t v2 = cpu_ldub_data_ra(env, s2 + len, ra);
if (v1 == v2) {
if (v1 == c) {
/* Equal. CC=0, and don't advance the registers. */
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index cd33c51..a24e288 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1937,7 +1937,6 @@ static ExitStatus op_clm(DisasContext *s, DisasOps *o)
static ExitStatus op_clst(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
gen_helper_clst(o->in1, cpu_env, regs[0], o->in1, o->in2);
set_cc_static(s);
return_low128(o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 12/69] target/s390x: Use unwind data for helper_mvpg
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (10 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 11/69] target/s390x: Use unwind data for helper_clst Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 13/69] target/s390x: Use unwind data for helper_mvst Richard Henderson
` (58 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 2 +-
target/s390x/mem_helper.c | 9 +++++----
target/s390x/translate.c | 3 +--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 1fae191..ea35834 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -12,7 +12,7 @@ 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_4(clst, i64, env, i64, i64, i64)
-DEF_HELPER_4(mvpg, void, env, i64, i64, i64)
+DEF_HELPER_FLAGS_4(mvpg, TCG_CALL_NO_WG, i32, env, i64, i64, i64)
DEF_HELPER_4(mvst, i64, env, i64, i64, i64)
DEF_HELPER_5(ex, i32, env, i32, i64, i64, i64)
DEF_HELPER_FLAGS_4(stam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index af2801e..1c36a47 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -398,11 +398,12 @@ uint64_t HELPER(clst)(CPUS390XState *env, uint64_t c, uint64_t s1, uint64_t s2)
}
/* move page */
-void HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2)
+uint32_t HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2)
{
- /* XXX missing r0 handling */
- env->cc_op = 0;
- fast_memmove(env, r1, r2, TARGET_PAGE_SIZE, 0);
+ /* ??? missing r0 handling, which includes access keys, but more
+ importantly optional suppression of the exception! */
+ fast_memmove(env, r1, r2, TARGET_PAGE_SIZE, GETPC());
+ return 0; /* data moved */
}
/* string copy (c is string terminator) */
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index a24e288..f55f10a 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2916,8 +2916,7 @@ static ExitStatus op_mvcs(DisasContext *s, DisasOps *o)
static ExitStatus op_mvpg(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
- gen_helper_mvpg(cpu_env, regs[0], o->in1, o->in2);
+ gen_helper_mvpg(cc_op, cpu_env, regs[0], o->in1, o->in2);
set_cc_static(s);
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 13/69] target/s390x: Use unwind data for helper_mvst
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (11 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 12/69] target/s390x: Use unwind data for helper_mvpg Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 14/69] target/s390x: Use unwind data for helper_lam Richard Henderson
` (57 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 5 +++--
target/s390x/translate.c | 1 -
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 1c36a47..e4bfc6e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -409,6 +409,7 @@ uint32_t HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint64_t r1, uint64_t r2)
/* string copy (c is string terminator) */
uint64_t HELPER(mvst)(CPUS390XState *env, uint64_t c, uint64_t d, uint64_t s)
{
+ uintptr_t ra = GETPC();
uint32_t len;
c = c & 0xff;
@@ -418,8 +419,8 @@ uint64_t HELPER(mvst)(CPUS390XState *env, uint64_t c, uint64_t d, uint64_t s)
/* 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. */
for (len = 0; len < 0x2000; ++len) {
- uint8_t v = cpu_ldub_data(env, s + len);
- cpu_stb_data(env, d + len, v);
+ uint8_t v = cpu_ldub_data_ra(env, s + len, ra);
+ cpu_stb_data_ra(env, d + len, v, ra);
if (v == c) {
/* Complete. Set CC=1 and advance R1. */
env->cc_op = 1;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index f55f10a..86e5567 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2923,7 +2923,6 @@ static ExitStatus op_mvpg(DisasContext *s, DisasOps *o)
static ExitStatus op_mvst(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
gen_helper_mvst(o->in1, cpu_env, regs[0], o->in1, o->in2);
set_cc_static(s);
return_low128(o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 14/69] target/s390x: Use unwind data for helper_lam
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (12 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 13/69] target/s390x: Use unwind data for helper_mvst Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 15/69] target/s390x: Use unwind data for helper_stam Richard Henderson
` (56 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 3 ++-
target/s390x/translate.c | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index e4bfc6e..88e817a 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -469,10 +469,11 @@ static uint32_t helper_icm(CPUS390XState *env, uint32_t r1, uint64_t address,
/* load access registers r1 to r3 from memory at a2 */
void HELPER(lam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
+ uintptr_t ra = GETPC();
int i;
for (i = r1;; i = (i + 1) % 16) {
- env->aregs[i] = cpu_ldl_data(env, a2);
+ env->aregs[i] = cpu_ldl_data_ra(env, a2, ra);
a2 += 4;
if (i == r3) {
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 86e5567..dca2096 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2621,7 +2621,6 @@ static ExitStatus op_lam(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- potential_page_fault(s);
gen_helper_lam(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 15/69] target/s390x: Use unwind data for helper_stam
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (13 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 14/69] target/s390x: Use unwind data for helper_lam Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 16/69] target/s390x: Use unwind data for helper_mvcl Richard Henderson
` (55 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 3 ++-
target/s390x/translate.c | 1 -
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 88e817a..2acc984 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -485,10 +485,11 @@ void HELPER(lam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
/* store access registers r1 to r3 in memory at a2 */
void HELPER(stam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
+ uintptr_t ra = GETPC();
int i;
for (i = r1;; i = (i + 1) % 16) {
- cpu_stl_data(env, a2, env->aregs[i]);
+ cpu_stl_data_ra(env, a2, env->aregs[i], ra);
a2 += 4;
if (i == r3) {
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index dca2096..7af2a0b 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3862,7 +3862,6 @@ static ExitStatus op_stam(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- potential_page_fault(s);
gen_helper_stam(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 16/69] target/s390x: Use unwind data for helper_mvcl
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (14 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 15/69] target/s390x: Use unwind data for helper_stam Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 17/69] target/s390x: Use unwind data for helper_mvcle Richard Henderson
` (54 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 7 ++++---
target/s390x/translate.c | 1 -
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 2acc984..49cfc9b 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -501,6 +501,7 @@ void HELPER(stam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
/* move long */
uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
{
+ uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1] & 0xffffff;
uint64_t dest = get_address_31fix(env, r1);
uint64_t srclen = env->regs[r2 + 1] & 0xffffff;
@@ -522,12 +523,12 @@ uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
}
for (; destlen && srclen; src++, dest++, destlen--, srclen--) {
- v = cpu_ldub_data(env, src);
- cpu_stb_data(env, dest, v);
+ v = cpu_ldub_data_ra(env, src, ra);
+ cpu_stb_data_ra(env, dest, v, ra);
}
for (; destlen; dest++, destlen--) {
- cpu_stb_data(env, dest, pad);
+ cpu_stb_data_ra(env, dest, pad, ra);
}
env->regs[r1 + 1] = destlen;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 7af2a0b..fb2d6ff 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2871,7 +2871,6 @@ static ExitStatus op_mvcl(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r2 = tcg_const_i32(get_field(s->fields, r2));
- potential_page_fault(s);
gen_helper_mvcl(cc_op, cpu_env, r1, r2);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 17/69] target/s390x: Use unwind data for helper_mvcle
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (15 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 16/69] target/s390x: Use unwind data for helper_mvcl Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 18/69] target/s390x: Use unwind data for helper_clcle Richard Henderson
` (53 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 7 ++++---
target/s390x/translate.c | 1 -
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 49cfc9b..8a095ad 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -544,6 +544,7 @@ uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
+ uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1];
uint64_t dest = env->regs[r1];
uint64_t srclen = env->regs[r3 + 1];
@@ -572,12 +573,12 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
}
for (; destlen && srclen; src++, dest++, destlen--, srclen--) {
- v = cpu_ldub_data(env, src);
- cpu_stb_data(env, dest, v);
+ v = cpu_ldub_data_ra(env, src, ra);
+ cpu_stb_data_ra(env, dest, v, ra);
}
for (; destlen; dest++, destlen--) {
- cpu_stb_data(env, dest, pad);
+ cpu_stb_data_ra(env, dest, pad, ra);
}
env->regs[r1 + 1] = destlen;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index fb2d6ff..b42acae 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2882,7 +2882,6 @@ static ExitStatus op_mvcle(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- potential_page_fault(s);
gen_helper_mvcle(cc_op, cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 18/69] target/s390x: Use unwind data for helper_clcle
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (16 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 17/69] target/s390x: Use unwind data for helper_mvcle Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 19/69] target/s390x: Use unwind data for helper_cksm Richard Henderson
` (52 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 6 +++---
target/s390x/translate.c | 1 -
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 8a095ad..f5a3044 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -595,12 +595,12 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
+ uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1];
uint64_t dest = get_address_31fix(env, r1);
uint64_t srclen = env->regs[r3 + 1];
uint64_t src = get_address_31fix(env, r3);
uint8_t pad = a2 & 0xff;
- uint8_t v1 = 0, v2 = 0;
uint32_t cc = 0;
if (!(destlen || srclen)) {
@@ -612,8 +612,8 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
}
for (; destlen || srclen; src++, dest++, destlen--, srclen--) {
- v1 = srclen ? cpu_ldub_data(env, src) : pad;
- v2 = destlen ? cpu_ldub_data(env, dest) : pad;
+ uint8_t v1 = srclen ? cpu_ldub_data_ra(env, src, ra) : pad;
+ uint8_t v2 = destlen ? cpu_ldub_data_ra(env, dest, ra) : pad;
if (v1 != v2) {
cc = (v1 < v2) ? 1 : 2;
break;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index b42acae..9270067 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1915,7 +1915,6 @@ static ExitStatus op_clcle(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- potential_page_fault(s);
gen_helper_clcle(cc_op, cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 19/69] target/s390x: Use unwind data for helper_cksm
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (17 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 18/69] target/s390x: Use unwind data for helper_clcle Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 20/69] target/s390x: Use unwind data for helper_unpk Richard Henderson
` (51 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 11 ++++++-----
target/s390x/translate.c | 1 -
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index f5a3044..d4ee364 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -633,6 +633,7 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint64_t HELPER(cksm)(CPUS390XState *env, uint64_t r1,
uint64_t src, uint64_t src_len)
{
+ uintptr_t ra = GETPC();
uint64_t max_len, len;
uint64_t cksm = (uint32_t)r1;
@@ -642,21 +643,21 @@ uint64_t HELPER(cksm)(CPUS390XState *env, uint64_t r1,
/* Process full words as available. */
for (len = 0; len + 4 <= max_len; len += 4, src += 4) {
- cksm += (uint32_t)cpu_ldl_data(env, src);
+ cksm += (uint32_t)cpu_ldl_data_ra(env, src, ra);
}
switch (max_len - len) {
case 1:
- cksm += cpu_ldub_data(env, src) << 24;
+ cksm += cpu_ldub_data_ra(env, src, ra) << 24;
len += 1;
break;
case 2:
- cksm += cpu_lduw_data(env, src) << 16;
+ cksm += cpu_lduw_data_ra(env, src, ra) << 16;
len += 2;
break;
case 3:
- cksm += cpu_lduw_data(env, src) << 16;
- cksm += cpu_ldub_data(env, src + 2) << 8;
+ cksm += cpu_lduw_data_ra(env, src, ra) << 16;
+ cksm += cpu_ldub_data_ra(env, src + 2, ra) << 8;
len += 3;
break;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 9270067..76910bc 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1866,7 +1866,6 @@ static ExitStatus op_cksm(DisasContext *s, DisasOps *o)
int r2 = get_field(s->fields, r2);
TCGv_i64 len = tcg_temp_new_i64();
- potential_page_fault(s);
gen_helper_cksm(len, cpu_env, o->in1, o->in2, regs[r2 + 1]);
set_cc_static(s);
return_low128(o->out);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 20/69] target/s390x: Use unwind data for helper_unpk
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (18 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 19/69] target/s390x: Use unwind data for helper_cksm Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 21/69] target/s390x: Use unwind data for helper_tr Richard Henderson
` (50 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 9 +++++----
target/s390x/translate.c | 1 -
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index d4ee364..0701e10 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -679,6 +679,7 @@ uint64_t HELPER(cksm)(CPUS390XState *env, uint64_t r1,
void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint64_t src)
{
+ uintptr_t ra = GETPC();
int len_dest = len >> 4;
int len_src = len & 0xf;
uint8_t b;
@@ -688,8 +689,8 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
src += len_src;
/* last byte is special, it only flips the nibbles */
- b = cpu_ldub_data(env, src);
- cpu_stb_data(env, dest, (b << 4) | (b >> 4));
+ b = cpu_ldub_data_ra(env, src, ra);
+ cpu_stb_data_ra(env, dest, (b << 4) | (b >> 4), ra);
src--;
len_src--;
@@ -699,7 +700,7 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint8_t cur_byte = 0;
if (len_src > 0) {
- cur_byte = cpu_ldub_data(env, src);
+ cur_byte = cpu_ldub_data_ra(env, src, ra);
}
len_dest--;
@@ -718,7 +719,7 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
/* zone bits */
cur_byte |= 0xf0;
- cpu_stb_data(env, dest, cur_byte);
+ cpu_stb_data_ra(env, dest, cur_byte, ra);
}
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 76910bc..4978f19 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4094,7 +4094,6 @@ static ExitStatus op_trt(DisasContext *s, DisasOps *o)
static ExitStatus op_unpk(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_unpk(cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 21/69] target/s390x: Use unwind data for helper_tr
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (19 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 20/69] target/s390x: Use unwind data for helper_unpk Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 22/69] target/s390x: Use unwind data for helper_tre Richard Henderson
` (49 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 25 +++++++++++++++----------
target/s390x/translate.c | 1 -
2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 0701e10..b37a963 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -723,19 +723,24 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
}
}
-void HELPER(tr)(CPUS390XState *env, uint32_t len, uint64_t array,
- uint64_t trans)
+static void do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
+ uint64_t trans, uintptr_t ra)
{
- int i;
+ uint32_t i;
for (i = 0; i <= len; i++) {
- uint8_t byte = cpu_ldub_data(env, array + i);
- uint8_t new_byte = cpu_ldub_data(env, trans + byte);
-
- cpu_stb_data(env, array + i, new_byte);
+ uint8_t byte = cpu_ldub_data_ra(env, array + i, ra);
+ uint8_t new_byte = cpu_ldub_data_ra(env, trans + byte, ra);
+ cpu_stb_data_ra(env, array + i, new_byte, ra);
}
}
+void HELPER(tr)(CPUS390XState *env, uint32_t len, uint64_t array,
+ uint64_t trans)
+{
+ return do_helper_tr(env, len, array, trans, GETPC());
+}
+
uint64_t HELPER(tre)(CPUS390XState *env, uint64_t array,
uint64_t len, uint64_t trans)
{
@@ -1265,9 +1270,9 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
get_address(env, 0, b2, d2), 0);
break;
case 0xc00:
- helper_tr(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
- break;
+ do_helper_tr(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return cc;
case 0xd00:
cc = helper_trt(env, l, get_address(env, 0, b1, d1),
get_address(env, 0, b2, d2));
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 4978f19..1842cc3 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4065,7 +4065,6 @@ static ExitStatus op_tprot(DisasContext *s, DisasOps *o)
static ExitStatus op_tr(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_tr(cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 22/69] target/s390x: Use unwind data for helper_tre
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (20 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 21/69] target/s390x: Use unwind data for helper_tr Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 23/69] target/s390x: Use unwind data for helper_trt Richard Henderson
` (48 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 15 ++++++++-------
target/s390x/translate.c | 1 -
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index b37a963..fd6dbf7 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -744,9 +744,11 @@ void HELPER(tr)(CPUS390XState *env, uint32_t len, uint64_t array,
uint64_t HELPER(tre)(CPUS390XState *env, uint64_t array,
uint64_t len, uint64_t trans)
{
+ uintptr_t ra = GETPC();
uint8_t end = env->regs[0] & 0xff;
uint64_t l = len;
uint64_t i;
+ uint32_t cc = 0;
if (!(env->psw.mask & PSW_MASK_64)) {
array &= 0x7fffffff;
@@ -757,25 +759,24 @@ uint64_t HELPER(tre)(CPUS390XState *env, uint64_t array,
amount of work we're willing to do. For now, let's cap at 8k. */
if (l > 0x2000) {
l = 0x2000;
- env->cc_op = 3;
- } else {
- env->cc_op = 0;
+ cc = 3;
}
for (i = 0; i < l; i++) {
uint8_t byte, new_byte;
- byte = cpu_ldub_data(env, array + i);
+ byte = cpu_ldub_data_ra(env, array + i, ra);
if (byte == end) {
- env->cc_op = 1;
+ cc = 1;
break;
}
- new_byte = cpu_ldub_data(env, trans + byte);
- cpu_stb_data(env, array + i, new_byte);
+ new_byte = cpu_ldub_data_ra(env, trans + byte, ra);
+ cpu_stb_data_ra(env, array + i, new_byte, ra);
}
+ env->cc_op = cc;
env->retxl = len - i;
return array + i;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 1842cc3..447ba07 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4073,7 +4073,6 @@ static ExitStatus op_tr(DisasContext *s, DisasOps *o)
static ExitStatus op_tre(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
gen_helper_tre(o->out, cpu_env, o->out, o->out2, o->in2);
return_low128(o->out2);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 23/69] target/s390x: Use unwind data for helper_trt
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (21 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 22/69] target/s390x: Use unwind data for helper_tre Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 24/69] target/s390x: Use unwind data for helper_lctlg Richard Henderson
` (47 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 28 ++++++++++++++++------------
target/s390x/translate.c | 1 -
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index fd6dbf7..ff12777 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -781,25 +781,29 @@ uint64_t HELPER(tre)(CPUS390XState *env, uint64_t array,
return array + i;
}
-uint32_t HELPER(trt)(CPUS390XState *env, uint32_t len, uint64_t array,
- uint64_t trans)
+static uint32_t do_helper_trt(CPUS390XState *env, uint32_t len, uint64_t array,
+ uint64_t trans, uintptr_t ra)
{
- uint32_t cc = 0;
- int i;
+ uint32_t i;
for (i = 0; i <= len; i++) {
- uint8_t byte = cpu_ldub_data(env, array + i);
- uint8_t sbyte = cpu_ldub_data(env, trans + byte);
+ uint8_t byte = cpu_ldub_data_ra(env, array + i, ra);
+ uint8_t sbyte = cpu_ldub_data_ra(env, trans + byte, ra);
if (sbyte != 0) {
env->regs[1] = array + i;
- env->regs[2] = (env->regs[2] & ~0xff) | sbyte;
- cc = (i == len) ? 2 : 1;
- break;
+ env->regs[2] = deposit64(env->regs[2], 0, 8, sbyte);
+ return (i == len) ? 2 : 1;
}
}
- return cc;
+ return 0;
+}
+
+uint32_t HELPER(trt)(CPUS390XState *env, uint32_t len, uint64_t array,
+ uint64_t trans)
+{
+ return do_helper_trt(env, len, array, trans, GETPC());
}
void HELPER(cdsg)(CPUS390XState *env, uint64_t addr,
@@ -1275,8 +1279,8 @@ uint32_t HELPER(ex)(CPUS390XState *env, uint32_t cc, uint64_t v1,
get_address(env, 0, b2, d2), 0);
return cc;
case 0xd00:
- cc = helper_trt(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2));
+ cc = do_helper_trt(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
break;
default:
goto abort;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 447ba07..fed9f17 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4082,7 +4082,6 @@ static ExitStatus op_tre(DisasContext *s, DisasOps *o)
static ExitStatus op_trt(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
- potential_page_fault(s);
gen_helper_trt(cc_op, cpu_env, l, o->addr1, o->in2);
tcg_temp_free_i32(l);
set_cc_static(s);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 24/69] target/s390x: Use unwind data for helper_lctlg
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (22 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 23/69] target/s390x: Use unwind data for helper_trt Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 25/69] target/s390x: Use unwind data for helper_lctl Richard Henderson
` (46 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 8 ++++----
target/s390x/translate.c | 1 -
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index ff12777..68e3817 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -848,20 +848,20 @@ void HELPER(cdsg)(CPUS390XState *env, uint64_t addr,
#if !defined(CONFIG_USER_ONLY)
void HELPER(lctlg)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
+ uintptr_t ra = GETPC();
S390CPU *cpu = s390_env_get_cpu(env);
bool PERchanged = false;
- int i;
uint64_t src = a2;
- uint64_t val;
+ uint32_t i;
for (i = r1;; i = (i + 1) % 16) {
- val = cpu_ldq_data(env, src);
+ uint64_t val = cpu_ldq_data_ra(env, src, ra);
if (env->cregs[i] != val && i >= 9 && i <= 11) {
PERchanged = true;
}
env->cregs[i] = val;
HELPER_LOG("load ctl %d from 0x%" PRIx64 " == 0x%" PRIx64 "\n",
- i, src, env->cregs[i]);
+ i, src, val);
src += sizeof(uint64_t);
if (i == r3) {
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index fed9f17..65ae573 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2552,7 +2552,6 @@ static ExitStatus op_lctlg(DisasContext *s, DisasOps *o)
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
check_privileged(s);
- potential_page_fault(s);
gen_helper_lctlg(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 25/69] target/s390x: Use unwind data for helper_lctl
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (23 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 24/69] target/s390x: Use unwind data for helper_lctlg Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 26/69] target/s390x: Use unwind data for helper_stctl Richard Henderson
` (45 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 9 +++++----
target/s390x/translate.c | 1 -
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 68e3817..614cdb2 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -878,18 +878,19 @@ void HELPER(lctlg)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
void HELPER(lctl)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
+ uintptr_t ra = GETPC();
S390CPU *cpu = s390_env_get_cpu(env);
bool PERchanged = false;
- int i;
uint64_t src = a2;
- uint32_t val;
+ uint32_t i;
for (i = r1;; i = (i + 1) % 16) {
- val = cpu_ldl_data(env, src);
+ uint32_t val = cpu_ldl_data_ra(env, src, ra);
if ((uint32_t)env->cregs[i] != val && i >= 9 && i <= 11) {
PERchanged = true;
}
- env->cregs[i] = (env->cregs[i] & 0xFFFFFFFF00000000ULL) | val;
+ env->cregs[i] = deposit64(env->cregs[i], 0, 32, val);
+ HELPER_LOG("load ctl %d from 0x%" PRIx64 " == 0x%x\n", i, src, val);
src += sizeof(uint32_t);
if (i == r3) {
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 65ae573..26f6b37 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2540,7 +2540,6 @@ static ExitStatus op_lctl(DisasContext *s, DisasOps *o)
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
check_privileged(s);
- potential_page_fault(s);
gen_helper_lctl(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 26/69] target/s390x: Use unwind data for helper_stctl
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (24 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 25/69] target/s390x: Use unwind data for helper_lctl Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 27/69] target/s390x: Use unwind data for helper_testblock Richard Henderson
` (44 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 10 ++++++----
target/s390x/translate.c | 2 --
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 614cdb2..b64c04e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -907,11 +907,12 @@ void HELPER(lctl)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
void HELPER(stctg)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
- int i;
+ uintptr_t ra = GETPC();
uint64_t dest = a2;
+ uint32_t i;
for (i = r1;; i = (i + 1) % 16) {
- cpu_stq_data(env, dest, env->cregs[i]);
+ cpu_stq_data_ra(env, dest, env->cregs[i], ra);
dest += sizeof(uint64_t);
if (i == r3) {
@@ -922,11 +923,12 @@ void HELPER(stctg)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
void HELPER(stctl)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
{
- int i;
+ uintptr_t ra = GETPC();
uint64_t dest = a2;
+ uint32_t i;
for (i = r1;; i = (i + 1) % 16) {
- cpu_stl_data(env, dest, env->cregs[i]);
+ cpu_stl_data_ra(env, dest, env->cregs[i], ra);
dest += sizeof(uint32_t);
if (i == r3) {
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 26f6b37..669da89 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3612,7 +3612,6 @@ static ExitStatus op_stctg(DisasContext *s, DisasOps *o)
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
check_privileged(s);
- potential_page_fault(s);
gen_helper_stctg(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
@@ -3624,7 +3623,6 @@ static ExitStatus op_stctl(DisasContext *s, DisasOps *o)
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
check_privileged(s);
- potential_page_fault(s);
gen_helper_stctl(cpu_env, r1, o->in2, r3);
tcg_temp_free_i32(r1);
tcg_temp_free_i32(r3);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 27/69] target/s390x: Use unwind data for helper_testblock
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (25 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 26/69] target/s390x: Use unwind data for helper_stctl Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 28/69] target/s390x: Use unwind data for helper_tprot Richard Henderson
` (43 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 3 +++
target/s390x/translate.c | 1 -
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index b64c04e..7df2e53 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -939,6 +939,7 @@ void HELPER(stctl)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
uint32_t HELPER(testblock)(CPUS390XState *env, uint64_t real_addr)
{
+ uintptr_t ra = GETPC();
CPUState *cs = CPU(s390_env_get_cpu(env));
uint64_t abs_addr;
int i;
@@ -947,12 +948,14 @@ uint32_t HELPER(testblock)(CPUS390XState *env, uint64_t real_addr)
abs_addr = mmu_real2abs(env, real_addr) & TARGET_PAGE_MASK;
if (!address_space_access_valid(&address_space_memory, abs_addr,
TARGET_PAGE_SIZE, true)) {
+ cpu_restore_state(cs, ra);
program_interrupt(env, PGM_ADDRESSING, 4);
return 1;
}
/* Check low-address protection */
if ((env->cregs[0] & CR0_LOWPROT) && real_addr < 0x2000) {
+ cpu_restore_state(cs, ra);
program_interrupt(env, PGM_PROTECTION, 4);
return 1;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 669da89..cd017ce 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4042,7 +4042,6 @@ static ExitStatus op_tcxb(DisasContext *s, DisasOps *o)
static ExitStatus op_testblock(DisasContext *s, DisasOps *o)
{
check_privileged(s);
- potential_page_fault(s);
gen_helper_testblock(cc_op, cpu_env, o->in2);
set_cc_static(s);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 28/69] target/s390x: Use unwind data for helper_tprot
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (26 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 27/69] target/s390x: Use unwind data for helper_testblock Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 29/69] target/s390x: Use unwind data for helper_lra Richard Henderson
` (42 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 1 -
target/s390x/translate.c | 1 -
2 files changed, 2 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 7df2e53..a8c85c9 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -970,7 +970,6 @@ uint32_t HELPER(testblock)(CPUS390XState *env, uint64_t real_addr)
uint32_t HELPER(tprot)(uint64_t a1, uint64_t a2)
{
/* XXX implement */
-
return 0;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index cd017ce..7b9c111 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4049,7 +4049,6 @@ static ExitStatus op_testblock(DisasContext *s, DisasOps *o)
static ExitStatus op_tprot(DisasContext *s, DisasOps *o)
{
- potential_page_fault(s);
gen_helper_tprot(cc_op, o->addr1, o->in2);
set_cc_static(s);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 29/69] target/s390x: Use unwind data for helper_lra
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (27 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 28/69] target/s390x: Use unwind data for helper_tprot Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 30/69] target/s390x: Use unwind data for helper_mvcs/mvcp Richard Henderson
` (41 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Fix saving exception_index around mmu_translate; eliminate a dead store.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 6 +++---
target/s390x/translate.c | 1 -
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index a8c85c9..17d8257 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1208,17 +1208,17 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
uint32_t cc = 0;
- int old_exc = cs->exception_index;
uint64_t asc = env->psw.mask & PSW_MASK_ASC;
uint64_t ret;
- int flags;
+ int old_exc, flags;
/* XXX incomplete - has more corner cases */
if (!(env->psw.mask & PSW_MASK_64) && (addr >> 32)) {
+ cpu_restore_state(cs, GETPC());
program_interrupt(env, PGM_SPECIAL_OP, 2);
}
- cs->exception_index = old_exc;
+ old_exc = cs->exception_index;
if (mmu_translate(env, addr, 0, asc, &ret, &flags, true)) {
cc = 3;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 7b9c111..141be22 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2560,7 +2560,6 @@ static ExitStatus op_lctlg(DisasContext *s, DisasOps *o)
static ExitStatus op_lra(DisasContext *s, DisasOps *o)
{
check_privileged(s);
- potential_page_fault(s);
gen_helper_lra(o->out, cpu_env, o->in2);
set_cc_static(s);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 30/69] target/s390x: Use unwind data for helper_mvcs/mvcp
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (28 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 29/69] target/s390x: Use unwind data for helper_lra Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 31/69] target/s390x: Fix some helper_ex problems Richard Henderson
` (40 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 8 ++++++--
target/s390x/translate.c | 2 --
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 17d8257..a73d486 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1082,6 +1082,7 @@ uint32_t HELPER(csp)(CPUS390XState *env, uint32_t r1, uint64_t r2)
uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
{
+ uintptr_t ra = GETPC();
int cc = 0, i;
HELPER_LOG("%s: %16" PRIx64 " %16" PRIx64 " %16" PRIx64 "\n",
@@ -1095,7 +1096,8 @@ uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
/* XXX replace w/ memcpy */
for (i = 0; i < l; i++) {
- cpu_stb_secondary(env, a1 + i, cpu_ldub_primary(env, a2 + i));
+ uint8_t x = cpu_ldub_primary_ra(env, a2 + i, ra);
+ cpu_stb_secondary_ra(env, a1 + i, x, ra);
}
return cc;
@@ -1103,6 +1105,7 @@ uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
{
+ uintptr_t ra = GETPC();
int cc = 0, i;
HELPER_LOG("%s: %16" PRIx64 " %16" PRIx64 " %16" PRIx64 "\n",
@@ -1116,7 +1119,8 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
/* XXX replace w/ memcpy */
for (i = 0; i < l; i++) {
- cpu_stb_primary(env, a1 + i, cpu_ldub_secondary(env, a2 + i));
+ uint8_t x = cpu_ldub_secondary_ra(env, a2 + i, ra);
+ cpu_stb_primary_ra(env, a1 + i, x, ra);
}
return cc;
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 141be22..422bbf1 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2889,7 +2889,6 @@ static ExitStatus op_mvcp(DisasContext *s, DisasOps *o)
{
int r1 = get_field(s->fields, l1);
check_privileged(s);
- potential_page_fault(s);
gen_helper_mvcp(cc_op, cpu_env, regs[r1], o->addr1, o->in2);
set_cc_static(s);
return NO_EXIT;
@@ -2899,7 +2898,6 @@ static ExitStatus op_mvcs(DisasContext *s, DisasOps *o)
{
int r1 = get_field(s->fields, l1);
check_privileged(s);
- potential_page_fault(s);
gen_helper_mvcs(cc_op, cpu_env, regs[r1], o->addr1, o->in2);
set_cc_static(s);
return NO_EXIT;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 31/69] target/s390x: Fix some helper_ex problems
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (29 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 30/69] target/s390x: Use unwind data for helper_mvcs/mvcp Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 32/69] target/s390x: Fix EXECUTE with R1==0 Richard Henderson
` (39 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
(1) The OR of the low bits or R1 into INSN were not being done
consistently; it was forgotten along all but the SVC path.
(2) The setting of ILEN was wrong on SVC path for EXRL.
(3) The data load for ICM read too much.
Fix these by consolidating data load at the beginning, using
get_ilen to control the number of bytes loaded, and ORing in
the byte from R1. Use extract64 from the full aligned insn
to extract arguments.
Pass in ILEN rather than RET as the more natural way to give
the required data along the SVC path.
Modify ENV->CC_OP directly rather than include it in the
functional interface.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 2 +-
target/s390x/mem_helper.c | 135 +++++++++++++++++++++++++---------------------
target/s390x/translate.c | 8 +--
3 files changed, 78 insertions(+), 67 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index ea35834..3819409 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -14,7 +14,7 @@ DEF_HELPER_4(srst, i64, env, i64, i64, i64)
DEF_HELPER_4(clst, i64, env, i64, i64, i64)
DEF_HELPER_FLAGS_4(mvpg, TCG_CALL_NO_WG, i32, env, i64, i64, i64)
DEF_HELPER_4(mvst, i64, env, i64, i64, i64)
-DEF_HELPER_5(ex, i32, env, i32, i64, i64, i64)
+DEF_HELPER_4(ex, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(stam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(lam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_4(mvcle, i32, env, i32, i64, i32)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index a73d486..fa03129 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1245,76 +1245,87 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)
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)
+void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
{
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:
+ uint64_t insn = cpu_lduw_code(env, addr);
+ uint8_t opc = insn >> 8;
+
+ /* Or in the contents of R1[56:63]. */
+ insn |= r1 & 0xff;
+
+ /* Load the rest of the instruction. */
+ insn <<= 48;
+ switch (get_ilen(opc)) {
+ case 2:
+ break;
+ case 4:
+ insn |= (uint64_t)cpu_lduw_code(env, addr + 2) << 32;
+ break;
+ case 6:
+ insn |= (uint64_t)(uint32_t)cpu_ldl_code(env, addr + 2) << 16;
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ HELPER_LOG("%s: addr 0x%lx insn 0x%" PRIx64 "\n", __func__, addr, insn);
+
+ if ((opc & 0xf0) == 0xd0) {
+ uint32_t l, b1, b2, d1, d2;
+
+ l = extract64(insn, 48, 8);
+ b1 = extract64(insn, 44, 4);
+ b2 = extract64(insn, 28, 4);
+ d1 = extract64(insn, 32, 12);
+ d2 = extract64(insn, 16, 12);
+ switch (opc & 0xf) {
+ case 0x2:
do_helper_mvc(env, l, get_address(env, 0, b1, d1),
get_address(env, 0, b2, d2), 0);
- break;
- case 0x400:
- cc = do_helper_nc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x500:
- cc = do_helper_clc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x600:
- cc = do_helper_oc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x700:
- cc = do_helper_xc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0xc00:
+ return;
+ case 0x4:
+ env->cc_op = do_helper_nc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return;
+ case 0x5:
+ env->cc_op = do_helper_clc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return;
+ case 0x6:
+ env->cc_op = do_helper_oc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return;
+ case 0x7:
+ env->cc_op = do_helper_xc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return;
+ case 0xc:
do_helper_tr(env, l, get_address(env, 0, b1, d1),
get_address(env, 0, b2, d2), 0);
- return cc;
- case 0xd00:
- cc = do_helper_trt(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- default:
- goto abort;
+ return;
+ case 0xd:
+ env->cc_op = do_helper_trt(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ return;
}
- } else if ((insn & 0xff00) == 0x0a00) {
+ } else if (opc == 0x0a) {
/* 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;
+ env->int_svc_code = extract64(insn, 48, 8);
+ env->int_svc_ilen = ilen;
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;
+ } else if (opc == 0xbf) {
+ uint32_t r1, r3, b2, d2;
+
+ r1 = extract64(insn, 52, 4);
+ r3 = extract64(insn, 48, 4);
+ b2 = extract64(insn, 44, 4);
+ d2 = extract64(insn, 32, 12);
+ env->cc_op = helper_icm(env, r1, get_address(env, 0, b2, d2), r3);
+ return;
}
- return cc;
+
+ cpu_abort(CPU(cpu), "EXECUTE on instruction prefix 0x%x not implemented\n",
+ opc);
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 422bbf1..921a842 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2159,14 +2159,14 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o)
MVC inside of memcpy, which needs a helper call anyway. So
perhaps this doesn't bear thinking about any further. */
- TCGv_i64 tmp;
+ TCGv_i32 ilen;
update_psw_addr(s);
gen_op_calc_cc(s);
- tmp = tcg_const_i64(s->next_pc);
- gen_helper_ex(cc_op, cpu_env, cc_op, o->in1, o->in2, tmp);
- tcg_temp_free_i64(tmp);
+ ilen = tcg_const_i32(s->next_pc - s->pc);
+ gen_helper_ex(cpu_env, ilen, o->in1, o->in2);
+ tcg_temp_free_i32(ilen);
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 32/69] target/s390x: Fix EXECUTE with R1==0
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (30 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 31/69] target/s390x: Fix some helper_ex problems Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 33/69] target/s390x: Use atomic operations for COMPARE SWAP PURGE Richard Henderson
` (38 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
The PoO specifies that when R1==0, no ORing into the insn
loaded from storage takes place. Load a zero for this case.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/insn-data.def | 4 ++--
target/s390x/translate.c | 14 +++++++++++++-
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index cac0f51..3c3541c 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -327,9 +327,9 @@
C(0xeb57, XIY, SIY, LD, m1_8u, i2_8u, new, m1_8, xor, nz64)
/* EXECUTE */
- C(0x4400, EX, RX_a, Z, r1_o, a2, 0, 0, ex, 0)
+ C(0x4400, EX, RX_a, Z, 0, a2, 0, 0, ex, 0)
/* EXECUTE RELATIVE LONG */
- C(0xc600, EXRL, RIL_b, EE, r1_o, ri2, 0, 0, ex, 0)
+ C(0xc600, EXRL, RIL_b, EE, 0, ri2, 0, 0, ex, 0)
/* EXTRACT ACCESS */
C(0xb24f, EAR, RRE, Z, 0, 0, new, r1_32, ear, 0)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 921a842..b7b4843 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2159,15 +2159,27 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o)
MVC inside of memcpy, which needs a helper call anyway. So
perhaps this doesn't bear thinking about any further. */
+ int r1 = get_field(s->fields, r1);
TCGv_i32 ilen;
+ TCGv_i64 v1;
update_psw_addr(s);
gen_op_calc_cc(s);
+ if (r1 == 0) {
+ v1 = tcg_const_i64(0);
+ } else {
+ v1 = regs[r1];
+ }
+
ilen = tcg_const_i32(s->next_pc - s->pc);
- gen_helper_ex(cpu_env, ilen, o->in1, o->in2);
+ gen_helper_ex(cpu_env, ilen, v1, o->in2);
tcg_temp_free_i32(ilen);
+ if (r1 == 0) {
+ tcg_temp_free_i64(v1);
+ }
+
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 33/69] target/s390x: Use atomic operations for COMPARE SWAP PURGE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (31 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 32/69] target/s390x: Fix EXECUTE with R1==0 Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 34/69] target/s390x: Implement CSPG Richard Henderson
` (37 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Also provide the cross-cpu tlb flushing required by the PoO.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 2 +-
target/s390x/insn-data.def | 2 +-
target/s390x/mem_helper.c | 32 ++++++++------------------------
target/s390x/translate.c | 42 ++++++++++++++++++++++++++++++++++++++----
4 files changed, 48 insertions(+), 30 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 3819409..cc451c7 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -107,13 +107,13 @@ DEF_HELPER_FLAGS_2(tprot, TCG_CALL_NO_RWG, i32, i64, i64)
DEF_HELPER_FLAGS_2(iske, TCG_CALL_NO_RWG_SE, i64, env, i64)
DEF_HELPER_FLAGS_3(sske, TCG_CALL_NO_RWG, void, env, i64, i64)
DEF_HELPER_FLAGS_2(rrbe, TCG_CALL_NO_RWG, i32, env, i64)
-DEF_HELPER_3(csp, i32, env, i32, i64)
DEF_HELPER_4(mvcs, i32, env, i64, i64, i64)
DEF_HELPER_4(mvcp, i32, env, i64, i64, i64)
DEF_HELPER_4(sigp, i32, env, i64, i32, i64)
DEF_HELPER_FLAGS_2(sacf, TCG_CALL_NO_WG, void, env, i64)
DEF_HELPER_FLAGS_3(ipte, TCG_CALL_NO_RWG, void, env, i64, i64)
DEF_HELPER_FLAGS_1(ptlb, TCG_CALL_NO_RWG, void, env)
+DEF_HELPER_FLAGS_1(purge, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_2(lra, i64, env, i64)
DEF_HELPER_FLAGS_2(lura, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_2(lurag, TCG_CALL_NO_WG, i64, env, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 3c3541c..4c91f30 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -837,7 +837,7 @@
#ifndef CONFIG_USER_ONLY
/* COMPARE AND SWAP AND PURGE */
- C(0xb250, CSP, RRE, Z, 0, ra2, 0, 0, csp, 0)
+ D(0xb250, CSP, RRE, Z, r1_32u, ra2, r1_P, 0, csp, 0, MO_TEUL)
/* DIAGNOSE (KVM hypercall) */
C(0x8300, DIAG, RSI, Z, 0, 0, 0, 0, diag, 0)
/* INSERT STORAGE KEY EXTENDED */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index fa03129..4b96c27 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1056,30 +1056,6 @@ uint32_t HELPER(rrbe)(CPUS390XState *env, uint64_t r2)
return re >> 1;
}
-/* compare and swap and purge */
-uint32_t HELPER(csp)(CPUS390XState *env, uint32_t r1, uint64_t r2)
-{
- S390CPU *cpu = s390_env_get_cpu(env);
- uint32_t cc;
- uint32_t o1 = env->regs[r1];
- uint64_t a2 = r2 & ~3ULL;
- uint32_t o2 = cpu_ldl_data(env, a2);
-
- if (o1 == o2) {
- cpu_stl_data(env, a2, env->regs[(r1 + 1) & 15]);
- if (r2 & 0x3) {
- /* flush TLB / ALB */
- tlb_flush(CPU(cpu));
- }
- cc = 0;
- } else {
- env->regs[r1] = (env->regs[r1] & 0xffffffff00000000ULL) | o2;
- cc = 1;
- }
-
- return cc;
-}
-
uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
{
uintptr_t ra = GETPC();
@@ -1161,6 +1137,14 @@ void HELPER(ptlb)(CPUS390XState *env)
tlb_flush(CPU(cpu));
}
+/* flush global tlb */
+void HELPER(purge)(CPUS390XState *env)
+{
+ S390CPU *cpu = s390_env_get_cpu(env);
+
+ tlb_flush_all_cpus_synced(CPU(cpu));
+}
+
/* load using real address */
uint64_t HELPER(lura)(CPUS390XState *env, uint64_t addr)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index b7b4843..a3fb324 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2001,11 +2001,45 @@ static ExitStatus op_cdsg(DisasContext *s, DisasOps *o)
#ifndef CONFIG_USER_ONLY
static ExitStatus op_csp(DisasContext *s, DisasOps *o)
{
- TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
+ TCGMemOp mop = s->insn->data;
+ TCGv_i64 addr, old, cc;
+ TCGLabel *lab = gen_new_label();
+
+ /* Note that in1 = R1 (zero-extended expected value),
+ out = R1 (original reg), out2 = R1+1 (new value). */
+
check_privileged(s);
- gen_helper_csp(cc_op, cpu_env, r1, o->in2);
- tcg_temp_free_i32(r1);
- set_cc_static(s);
+ addr = tcg_temp_new_i64();
+ old = tcg_temp_new_i64();
+ tcg_gen_andi_i64(addr, o->in2, -1ULL << (mop & MO_SIZE));
+ tcg_gen_atomic_cmpxchg_i64(old, addr, o->in1, o->out2,
+ get_mem_index(s), mop | MO_ALIGN);
+ tcg_temp_free_i64(addr);
+
+ /* Are the memory and expected values (un)equal? */
+ cc = tcg_temp_new_i64();
+ tcg_gen_setcond_i64(TCG_COND_NE, cc, o->in1, old);
+ tcg_gen_extrl_i64_i32(cc_op, cc);
+
+ /* Write back the output now, so that it happens before the
+ following branch, so that we don't need local temps. */
+ if ((mop & MO_SIZE) == MO_32) {
+ tcg_gen_deposit_i64(o->out, o->out, old, 0, 32);
+ } else {
+ tcg_gen_mov_i64(o->out, old);
+ }
+ tcg_temp_free_i64(old);
+
+ /* If the comparison was equal, and the LSB of R2 was set,
+ then we need to flush the TLB (for all cpus). */
+ tcg_gen_xori_i64(cc, cc, 1);
+ tcg_gen_and_i64(cc, cc, o->in2);
+ tcg_gen_brcondi_i64(TCG_COND_EQ, cc, 0, lab);
+ tcg_temp_free_i64(cc);
+
+ gen_helper_purge(cpu_env);
+ gen_set_label(lab);
+
return NO_EXIT;
}
#endif
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 34/69] target/s390x: Implement CSPG
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (32 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 33/69] target/s390x: Use atomic operations for COMPARE SWAP PURGE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 35/69] target/s390x: Save current ilen during translation Richard Henderson
` (36 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/insn-data.def | 1 +
target/s390x/translate.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 4c91f30..f818437 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -838,6 +838,7 @@
#ifndef CONFIG_USER_ONLY
/* COMPARE AND SWAP AND PURGE */
D(0xb250, CSP, RRE, Z, r1_32u, ra2, r1_P, 0, csp, 0, MO_TEUL)
+ D(0xb98a, CSPG, RRE, DAT_ENH, r1_o, ra2, r1_P, 0, csp, 0, MO_TEQ)
/* DIAGNOSE (KVM hypercall) */
C(0x8300, DIAG, RSI, Z, 0, 0, 0, 0, diag, 0)
/* INSERT STORAGE KEY EXTENDED */
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index a3fb324..4bd16d9 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1195,6 +1195,7 @@ typedef enum DisasFacility {
FAC_SFLE, /* store facility list extended */
FAC_ILA, /* interlocked access facility 1 */
FAC_LPP, /* load-program-parameter */
+ FAC_DAT_ENH, /* DAT-enhancement */
} DisasFacility;
struct DisasInsn {
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 35/69] target/s390x: Save current ilen during translation
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (33 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 34/69] target/s390x: Implement CSPG Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 36/69] target/s390x: End the TB after EXECUTE Richard Henderson
` (35 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Use this saved value instead of recomputing from next_pc difference.
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/translate.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 4bd16d9..5b8333f 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -58,6 +58,7 @@ struct DisasContext {
const DisasInsn *insn;
DisasFields *fields;
uint64_t pc, next_pc;
+ uint32_t ilen;
enum cc_op cc_op;
bool singlestep_enabled;
};
@@ -349,7 +350,7 @@ static void gen_program_exception(DisasContext *s, int code)
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUS390XState, int_pgm_code));
tcg_temp_free_i32(tmp);
- tmp = tcg_const_i32(s->next_pc - s->pc);
+ tmp = tcg_const_i32(s->ilen);
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUS390XState, int_pgm_ilen));
tcg_temp_free_i32(tmp);
@@ -2207,7 +2208,7 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o)
v1 = regs[r1];
}
- ilen = tcg_const_i32(s->next_pc - s->pc);
+ ilen = tcg_const_i32(s->ilen);
gen_helper_ex(cpu_env, ilen, v1, o->in2);
tcg_temp_free_i32(ilen);
@@ -4052,7 +4053,7 @@ static ExitStatus op_svc(DisasContext *s, DisasOps *o)
tcg_gen_st_i32(t, cpu_env, offsetof(CPUS390XState, int_svc_code));
tcg_temp_free_i32(t);
- t = tcg_const_i32(s->next_pc - s->pc);
+ t = tcg_const_i32(s->ilen);
tcg_gen_st_i32(t, cpu_env, offsetof(CPUS390XState, int_svc_ilen));
tcg_temp_free_i32(t);
@@ -5191,6 +5192,7 @@ static const DisasInsn *extract_insn(CPUS390XState *env, DisasContext *s,
op = (insn >> 8) & 0xff;
ilen = get_ilen(op);
s->next_pc = s->pc + ilen;
+ s->ilen = ilen;
switch (ilen) {
case 2:
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 36/69] target/s390x: End the TB after EXECUTE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (34 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 35/69] target/s390x: Save current ilen during translation Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 37/69] target/s390x: Implement EXECUTE via new TranslationBlock Richard Henderson
` (34 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
This split will be required for implementing EXECUTE properly.
Do this now as a separate step to aid comparison of before and
after TB listings.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 54 ++++++++++++++++++++++++++++-------------------
target/s390x/translate.c | 6 +++++-
2 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 4b96c27..d57d5b1 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1234,6 +1234,7 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
S390CPU *cpu = s390_env_get_cpu(env);
uint64_t insn = cpu_lduw_code(env, addr);
uint8_t opc = insn >> 8;
+ uint32_t cc;
/* Or in the contents of R1[56:63]. */
insn |= r1 & 0xff;
@@ -1263,42 +1264,46 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
b2 = extract64(insn, 28, 4);
d1 = extract64(insn, 32, 12);
d2 = extract64(insn, 16, 12);
+
+ cc = env->cc_op;
switch (opc & 0xf) {
case 0x2:
do_helper_mvc(env, l, get_address(env, 0, b1, d1),
get_address(env, 0, b2, d2), 0);
- return;
+ break;
case 0x4:
- env->cc_op = do_helper_nc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- return;
+ cc = do_helper_nc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ break;
case 0x5:
- env->cc_op = do_helper_clc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- return;
+ cc = do_helper_clc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ break;
case 0x6:
- env->cc_op = do_helper_oc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- return;
+ cc = do_helper_oc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ break;
case 0x7:
- env->cc_op = do_helper_xc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- return;
+ cc = do_helper_xc(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ break;
case 0xc:
do_helper_tr(env, l, get_address(env, 0, b1, d1),
get_address(env, 0, b2, d2), 0);
- return;
+ break;
case 0xd:
- env->cc_op = do_helper_trt(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- return;
+ cc = do_helper_trt(env, l, get_address(env, 0, b1, d1),
+ get_address(env, 0, b2, d2), 0);
+ break;
+ default:
+ goto abort;
}
} else if (opc == 0x0a) {
/* supervisor call */
env->int_svc_code = extract64(insn, 48, 8);
env->int_svc_ilen = ilen;
helper_exception(env, EXCP_SVC);
- return;
+ g_assert_not_reached();
} else if (opc == 0xbf) {
uint32_t r1, r3, b2, d2;
@@ -1306,10 +1311,15 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
r3 = extract64(insn, 48, 4);
b2 = extract64(insn, 44, 4);
d2 = extract64(insn, 32, 12);
- env->cc_op = helper_icm(env, r1, get_address(env, 0, b2, d2), r3);
- return;
+ 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",
+ opc);
+ g_assert_not_reached();
}
- cpu_abort(CPU(cpu), "EXECUTE on instruction prefix 0x%x not implemented\n",
- opc);
+ env->cc_op = cc;
+ env->psw.addr += ilen;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 5b8333f..70212c8 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1163,6 +1163,8 @@ typedef enum {
the PC (for whatever reason), so there's no need to do it again on
exiting the TB. */
EXIT_PC_UPDATED,
+ /* We have updated the PC and CC values. */
+ EXIT_PC_CC_UPDATED,
/* We are exiting the TB, but have neither emitted a goto_tb, nor
updated the PC for the next instruction to be executed. */
EXIT_PC_STALE,
@@ -2216,7 +2218,7 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o)
tcg_temp_free_i64(v1);
}
- return NO_EXIT;
+ return EXIT_PC_CC_UPDATED;
}
static ExitStatus op_fieb(DisasContext *s, DisasOps *o)
@@ -5489,6 +5491,8 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
/* Next TB starts off with CC_OP_DYNAMIC, so make sure the
cc op type is in env */
update_cc_op(&dc);
+ /* FALLTHRU */
+ case EXIT_PC_CC_UPDATED:
/* Exit the TB, either by raising a debug exception or by return. */
if (do_debug) {
gen_exception(EXCP_DEBUG);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 37/69] target/s390x: Implement EXECUTE via new TranslationBlock
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (35 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 36/69] target/s390x: End the TB after EXECUTE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 38/69] target/s390x: Re-implement a few EXECUTE target insns directly Richard Henderson
` (33 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
Previously, helper_ex would construct the insn and then implement
the insn via direct calls other helpers. This was sufficient to
boot Linux but that is all.
It is easy enough to go the whole nine yards by stashing state for
EXECUTE within the cpu, and then rely on a new TB to be created
that properly and completely interprets the insn.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/cpu.h | 4 +-
target/s390x/helper.c | 5 ++
target/s390x/machine.c | 19 ++++++++
target/s390x/mem_helper.c | 118 +++++-----------------------------------------
target/s390x/translate.c | 80 ++++++++++++++++++-------------
5 files changed, 85 insertions(+), 141 deletions(-)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index f463113..fdb2f50 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -107,6 +107,8 @@ typedef struct CPUS390XState {
uint64_t cc_dst;
uint64_t cc_vr;
+ uint64_t ex_value;
+
uint64_t __excp_addr;
uint64_t psa;
@@ -393,7 +395,7 @@ static inline void cpu_get_tb_cpu_state(CPUS390XState* env, target_ulong *pc,
target_ulong *cs_base, uint32_t *flags)
{
*pc = env->psw.addr;
- *cs_base = 0;
+ *cs_base = env->ex_value;
*flags = ((env->psw.mask >> 32) & ~FLAG_MASK_CC) |
((env->psw.mask & PSW_MASK_32) ? FLAG_MASK_32 : 0);
}
diff --git a/target/s390x/helper.c b/target/s390x/helper.c
index 4f8aadf..291db72 100644
--- a/target/s390x/helper.c
+++ b/target/s390x/helper.c
@@ -642,6 +642,11 @@ bool s390_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
S390CPU *cpu = S390_CPU(cs);
CPUS390XState *env = &cpu->env;
+ if (env->ex_value) {
+ /* Execution of the target insn is indivisible from
+ the parent EXECUTE insn. */
+ return false;
+ }
if (env->psw.mask & PSW_MASK_EXT) {
s390_cpu_do_interrupt(cs);
return true;
diff --git a/target/s390x/machine.c b/target/s390x/machine.c
index 8503fa1..8f908bb 100644
--- a/target/s390x/machine.c
+++ b/target/s390x/machine.c
@@ -34,6 +34,7 @@ static int cpu_post_load(void *opaque, int version_id)
return 0;
}
+
static void cpu_pre_save(void *opaque)
{
S390CPU *cpu = opaque;
@@ -156,6 +157,23 @@ const VMStateDescription vmstate_riccb = {
}
};
+static bool exval_needed(void *opaque)
+{
+ S390CPU *cpu = opaque;
+ return cpu->env.ex_value != 0;
+}
+
+const VMStateDescription vmstate_exval = {
+ .name = "cpu/exval",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = exval_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(env.ex_value, S390CPU),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
const VMStateDescription vmstate_s390_cpu = {
.name = "cpu",
.post_load = cpu_post_load,
@@ -188,6 +206,7 @@ const VMStateDescription vmstate_s390_cpu = {
&vmstate_fpu,
&vmstate_vregs,
&vmstate_riccb,
+ &vmstate_exval,
NULL
},
};
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index d57d5b1..3a77edc 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -435,37 +435,6 @@ uint64_t HELPER(mvst)(CPUS390XState *env, uint64_t c, uint64_t d, uint64_t s)
return d + len;
}
-static uint32_t helper_icm(CPUS390XState *env, uint32_t r1, uint64_t address,
- uint32_t mask)
-{
- int pos = 24; /* top of the lower half of r1 */
- uint64_t rmask = 0xff000000ULL;
- uint8_t val = 0;
- int ccd = 0;
- uint32_t cc = 0;
-
- while (mask) {
- if (mask & 8) {
- env->regs[r1] &= ~rmask;
- val = cpu_ldub_data(env, address);
- if ((val & 0x80) && !ccd) {
- cc = 1;
- }
- ccd = 1;
- if (val && cc == 0) {
- cc = 2;
- }
- env->regs[r1] |= (uint64_t)val << pos;
- address++;
- }
- mask = (mask << 1) & 0xf;
- pos -= 8;
- rmask >>= 8;
- }
-
- 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)
{
@@ -1222,19 +1191,17 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)
}
#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.
+/* 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.
+
+ Perform this by recording the modified instruction in env->ex_value.
+ This will be noticed by cpu_get_tb_cpu_state and thus tb translation.
*/
void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
{
- S390CPU *cpu = s390_env_get_cpu(env);
uint64_t insn = cpu_lduw_code(env, addr);
uint8_t opc = insn >> 8;
- uint32_t cc;
/* Or in the contents of R1[56:63]. */
insn |= r1 & 0xff;
@@ -1254,72 +1221,9 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
g_assert_not_reached();
}
- HELPER_LOG("%s: addr 0x%lx insn 0x%" PRIx64 "\n", __func__, addr, insn);
-
- if ((opc & 0xf0) == 0xd0) {
- uint32_t l, b1, b2, d1, d2;
-
- l = extract64(insn, 48, 8);
- b1 = extract64(insn, 44, 4);
- b2 = extract64(insn, 28, 4);
- d1 = extract64(insn, 32, 12);
- d2 = extract64(insn, 16, 12);
-
- cc = env->cc_op;
- switch (opc & 0xf) {
- case 0x2:
- do_helper_mvc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x4:
- cc = do_helper_nc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x5:
- cc = do_helper_clc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x6:
- cc = do_helper_oc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0x7:
- cc = do_helper_xc(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0xc:
- do_helper_tr(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- case 0xd:
- cc = do_helper_trt(env, l, get_address(env, 0, b1, d1),
- get_address(env, 0, b2, d2), 0);
- break;
- default:
- goto abort;
- }
- } else if (opc == 0x0a) {
- /* supervisor call */
- env->int_svc_code = extract64(insn, 48, 8);
- env->int_svc_ilen = ilen;
- helper_exception(env, EXCP_SVC);
- g_assert_not_reached();
- } else if (opc == 0xbf) {
- uint32_t r1, r3, b2, d2;
-
- r1 = extract64(insn, 52, 4);
- r3 = extract64(insn, 48, 4);
- b2 = extract64(insn, 44, 4);
- d2 = extract64(insn, 32, 12);
- 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",
- opc);
- g_assert_not_reached();
- }
-
- env->cc_op = cc;
- env->psw.addr += ilen;
+ /* Record the insn we want to execute as well as the ilen to use
+ during the execution of the target insn. This will also ensure
+ that ex_value is non-zero, which flags that we are in a state
+ that requires such execution. */
+ env->ex_value = insn | ilen;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 70212c8..97ca639 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -57,6 +57,7 @@ struct DisasContext {
struct TranslationBlock *tb;
const DisasInsn *insn;
DisasFields *fields;
+ uint64_t ex_value;
uint64_t pc, next_pc;
uint32_t ilen;
enum cc_op cc_op;
@@ -2186,23 +2187,18 @@ static ExitStatus op_epsw(DisasContext *s, DisasOps *o)
static ExitStatus op_ex(DisasContext *s, DisasOps *o)
{
- /* ??? Perhaps a better way to implement EXECUTE is to set a bit in
- tb->flags, (ab)use the tb->cs_base field as the address of
- the template in memory, and grab 8 bits of tb->flags/cflags for
- the contents of the register. We would then recognize all this
- in gen_intermediate_code_internal, generating code for exactly
- one instruction. This new TB then gets executed normally.
-
- On the other hand, this seems to be mostly used for modifying
- MVC inside of memcpy, which needs a helper call anyway. So
- perhaps this doesn't bear thinking about any further. */
-
int r1 = get_field(s->fields, r1);
TCGv_i32 ilen;
TCGv_i64 v1;
+ /* Nested EXECUTE is not allowed. */
+ if (unlikely(s->ex_value)) {
+ gen_program_exception(s, PGM_EXECUTE);
+ return EXIT_NORETURN;
+ }
+
update_psw_addr(s);
- gen_op_calc_cc(s);
+ update_cc_op(s);
if (r1 == 0) {
v1 = tcg_const_i64(0);
@@ -5190,25 +5186,36 @@ static const DisasInsn *extract_insn(CPUS390XState *env, DisasContext *s,
int op, op2, ilen;
const DisasInsn *info;
- insn = ld_code2(env, pc);
- op = (insn >> 8) & 0xff;
- ilen = get_ilen(op);
- s->next_pc = s->pc + ilen;
- s->ilen = ilen;
+ if (unlikely(s->ex_value)) {
+ /* Drop the EX data now, so that it's clear on exception paths. */
+ TCGv_i64 zero = tcg_const_i64(0);
+ tcg_gen_st_i64(zero, cpu_env, offsetof(CPUS390XState, ex_value));
+ tcg_temp_free_i64(zero);
- switch (ilen) {
- case 2:
- insn = insn << 48;
- break;
- case 4:
- insn = ld_code4(env, pc) << 32;
- break;
- case 6:
- insn = (insn << 48) | (ld_code4(env, pc + 2) << 16);
- break;
- default:
- abort();
+ /* Extract the values saved by EXECUTE. */
+ insn = s->ex_value & 0xffffffffffff0000ull;
+ ilen = s->ex_value & 0xf;
+ op = insn >> 56;
+ } else {
+ insn = ld_code2(env, pc);
+ op = (insn >> 8) & 0xff;
+ ilen = get_ilen(op);
+ switch (ilen) {
+ case 2:
+ insn = insn << 48;
+ break;
+ case 4:
+ insn = ld_code4(env, pc) << 32;
+ break;
+ case 6:
+ insn = (insn << 48) | (ld_code4(env, pc + 2) << 16);
+ break;
+ default:
+ g_assert_not_reached();
+ }
}
+ s->next_pc = s->pc + ilen;
+ s->ilen = ilen;
/* We can't actually determine the insn format until we've looked up
the full insn opcode. Which we can't do without locating the
@@ -5425,6 +5432,7 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
dc.tb = tb;
dc.pc = pc_start;
dc.cc_op = CC_OP_DYNAMIC;
+ dc.ex_value = tb->cs_base;
do_debug = dc.singlestep_enabled = cs->singlestep_enabled;
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
@@ -5471,7 +5479,8 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
|| tcg_op_buf_full()
|| num_insns >= max_insns
|| singlestep
- || cs->singlestep_enabled)) {
+ || cs->singlestep_enabled
+ || dc.ex_value)) {
status = EXIT_PC_STALE;
}
} while (status == NO_EXIT);
@@ -5513,9 +5522,14 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)
&& qemu_log_in_addr_range(pc_start)) {
qemu_log_lock();
- qemu_log("IN: %s\n", lookup_symbol(pc_start));
- log_target_disas(cs, pc_start, dc.pc - pc_start, 1);
- qemu_log("\n");
+ if (unlikely(dc.ex_value)) {
+ /* ??? Unfortunately log_target_disas can't use host memory. */
+ qemu_log("IN: EXECUTE %016" PRIx64 "\n", dc.ex_value);
+ } else {
+ qemu_log("IN: %s\n", lookup_symbol(pc_start));
+ log_target_disas(cs, pc_start, dc.pc - pc_start, 1);
+ qemu_log("\n");
+ }
qemu_log_unlock();
}
#endif
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 38/69] target/s390x: Re-implement a few EXECUTE target insns directly
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (36 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 37/69] target/s390x: Implement EXECUTE via new TranslationBlock Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 39/69] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU Richard Henderson
` (32 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
While the previous patch is required for proper conformance,
the vast majority of target insns are MVC and XC for implementing
memmove and memset respectively. The next most common are CLC,
TR, and SVC.
Implementing these (and a few others for which we already have
an implementation) directly is faster than going through full
translation to a TB.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 66 ++++++++++++++++++++++++++++++++++++-----------
1 file changed, 51 insertions(+), 15 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 3a77edc..e35571e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -200,31 +200,30 @@ uint32_t HELPER(oc)(CPUS390XState *env, uint32_t l, uint64_t dest,
}
/* memmove */
-static void do_helper_mvc(CPUS390XState *env, uint32_t l, uint64_t dest,
- uint64_t src, uintptr_t ra)
+static uint32_t do_helper_mvc(CPUS390XState *env, uint32_t l, uint64_t dest,
+ uint64_t src, uintptr_t ra)
{
uint32_t i;
HELPER_LOG("%s l %d dest %" PRIx64 " src %" PRIx64 "\n",
__func__, l, dest, src);
+ /* mvc and memmove do not behave the same when areas overlap! */
/* mvc with source pointing to the byte after the destination is the
same as memset with the first source byte */
if (dest == src + 1) {
fast_memset(env, dest, cpu_ldub_data_ra(env, src, ra), l + 1, ra);
- return;
- }
-
- /* mvc and memmove do not behave the same when areas overlap! */
- if (dest < src || src + l < dest) {
+ } else if (dest < src || src + l < dest) {
fast_memmove(env, dest, src, l + 1, ra);
- return;
+ } else {
+ /* slow version with byte accesses which always work */
+ for (i = 0; i <= l; i++) {
+ uint8_t x = cpu_ldub_data_ra(env, src + i, ra);
+ cpu_stb_data_ra(env, dest + i, x, ra);
+ }
}
- /* slow version with byte accesses which always work */
- for (i = 0; i <= l; i++) {
- cpu_stb_data_ra(env, dest + i, cpu_ldub_data_ra(env, src + i, ra), ra);
- }
+ return env->cc_op;
}
void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
@@ -692,8 +691,8 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
}
}
-static void do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
- uint64_t trans, uintptr_t ra)
+static uint32_t do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
+ uint64_t trans, uintptr_t ra)
{
uint32_t i;
@@ -702,12 +701,14 @@ static void do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
uint8_t new_byte = cpu_ldub_data_ra(env, trans + byte, ra);
cpu_stb_data_ra(env, array + i, new_byte, ra);
}
+
+ return env->cc_op;
}
void HELPER(tr)(CPUS390XState *env, uint32_t len, uint64_t array,
uint64_t trans)
{
- return do_helper_tr(env, len, array, trans, GETPC());
+ do_helper_tr(env, len, array, trans, GETPC());
}
uint64_t HELPER(tre)(CPUS390XState *env, uint64_t array,
@@ -1221,6 +1222,41 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
g_assert_not_reached();
}
+ /* The very most common cases can be sped up by avoiding a new TB. */
+ if ((opc & 0xf0) == 0xd0) {
+ typedef uint32_t (*dx_helper)(CPUS390XState *, uint32_t, uint64_t,
+ uint64_t, uintptr_t);
+ static const dx_helper dx[16] = {
+ [0x2] = do_helper_mvc,
+ [0x4] = do_helper_nc,
+ [0x5] = do_helper_clc,
+ [0x6] = do_helper_oc,
+ [0x7] = do_helper_xc,
+ [0xc] = do_helper_tr,
+ [0xd] = do_helper_trt,
+ };
+ dx_helper helper = dx[opc & 0xf];
+
+ if (helper) {
+ uint32_t l = extract64(insn, 48, 8);
+ uint32_t b1 = extract64(insn, 44, 4);
+ uint32_t d1 = extract64(insn, 32, 12);
+ uint32_t b2 = extract64(insn, 28, 4);
+ uint32_t d2 = extract64(insn, 16, 12);
+ uint64_t a1 = get_address(env, 0, b1, d1);
+ uint64_t a2 = get_address(env, 0, b2, d2);
+
+ env->cc_op = helper(env, l, a1, a2, 0);
+ env->psw.addr += ilen;
+ return;
+ }
+ } else if (opc == 0x0a) {
+ env->int_svc_code = extract64(insn, 48, 8);
+ env->int_svc_ilen = ilen;
+ helper_exception(env, EXCP_SVC);
+ g_assert_not_reached();
+ }
+
/* Record the insn we want to execute as well as the ilen to use
during the execution of the target insn. This will also ensure
that ex_value is non-zero, which flags that we are in a state
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 39/69] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (37 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 38/69] target/s390x: Re-implement a few EXECUTE target insns directly Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 40/69] target/s390x: remove dead code in translate.c Richard Henderson
` (31 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien, Thomas Huth
From: Thomas Huth <thuth@redhat.com>
Currently we only present the plain z900 feature bits to the guest,
but QEMU already emulates some additional features (but not all of
the next CPU generation, so we can not use the next CPU level as
default yet). Since newer Linux kernels are checking the feature bits
and refuse to work if a required feature is missing, it would be nice
to have a way to present more of the supported features when we are
running with the "qemu" CPU.
This patch now adds the supported features to the "full_feat" bitmap,
so that additional features can be enabled on the command line now,
for example with:
qemu-system-s390x -cpu qemu,stfle=true,ldisp=true,eimm=true,stckf=true
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-Id: <1495704132-5675-1-git-send-email-thuth@redhat.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/cpu_models.c | 34 +++++++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 8d27363..e5e005a 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -658,6 +658,30 @@ static void check_compatibility(const S390CPUModel *max_model,
"available in the configuration: ");
}
+/**
+ * The base TCG CPU model "qemu" is based on the z900. However, we already
+ * can also emulate some additional features of later CPU generations, so
+ * we add these additional feature bits here.
+ */
+static void add_qemu_cpu_model_features(S390FeatBitmap fbm)
+{
+ static const int feats[] = {
+ S390_FEAT_STFLE,
+ S390_FEAT_EXTENDED_IMMEDIATE,
+ S390_FEAT_LONG_DISPLACEMENT,
+ S390_FEAT_LONG_DISPLACEMENT_FAST,
+ S390_FEAT_STORE_CLOCK_FAST,
+ S390_FEAT_GENERAL_INSTRUCTIONS_EXT,
+ S390_FEAT_EXECUTE_EXT,
+ S390_FEAT_STFLE_45,
+ };
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(feats); i++) {
+ set_bit(feats[i], fbm);
+ }
+}
+
static S390CPUModel *get_max_cpu_model(Error **errp)
{
static S390CPUModel max_model;
@@ -670,10 +694,11 @@ static S390CPUModel *get_max_cpu_model(Error **errp)
if (kvm_enabled()) {
kvm_s390_get_host_cpu_model(&max_model, errp);
} else {
- /* TCG emulates a z900 */
+ /* TCG emulates a z900 (with some optional additional features) */
max_model.def = &s390_cpu_defs[0];
bitmap_copy(max_model.features, max_model.def->default_feat,
S390_FEAT_MAX);
+ add_qemu_cpu_model_features(max_model.features);
}
if (!*errp) {
cached = true;
@@ -925,11 +950,14 @@ static void s390_host_cpu_model_initfn(Object *obj)
static void s390_qemu_cpu_model_initfn(Object *obj)
{
+ static S390CPUDef s390_qemu_cpu_defs;
S390CPU *cpu = S390_CPU(obj);
cpu->model = g_malloc0(sizeof(*cpu->model));
- /* TCG emulates a z900 */
- cpu->model->def = &s390_cpu_defs[0];
+ /* TCG emulates a z900 (with some optional additional features) */
+ memcpy(&s390_qemu_cpu_defs, &s390_cpu_defs[0], sizeof(s390_qemu_cpu_defs));
+ add_qemu_cpu_model_features(s390_qemu_cpu_defs.full_feat);
+ cpu->model->def = &s390_qemu_cpu_defs;
bitmap_copy(cpu->model->features, cpu->model->def->default_feat,
S390_FEAT_MAX);
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 40/69] target/s390x: remove dead code in translate.c
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (38 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 39/69] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 41/69] target/s390x: remove some Linux assumptions from IPTE Richard Henderson
` (30 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-2-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/translate.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 97ca639..f759818 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -5467,10 +5467,7 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
gen_io_start();
}
- status = NO_EXIT;
- if (status == NO_EXIT) {
- status = translate_one(env, &dc);
- }
+ status = translate_one(env, &dc);
/* If we reach a page boundary, are single stepping,
or exhaust instruction count, stop generation. */
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 41/69] target/s390x: remove some Linux assumptions from IPTE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (39 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 40/69] target/s390x: remove dead code in translate.c Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 42/69] target/s390x: implement local-TLB-clearing in IPTE Richard Henderson
` (29 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-3-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/cpu.h | 2 ++
target/s390x/mem_helper.c | 17 ++++++++++-------
target/s390x/mmu_helper.c | 2 --
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index fdb2f50..a4d31df 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -1035,6 +1035,8 @@ struct sysib_322 {
#define _SEGMENT_ENTRY_RO 0x200 /* page protection bit */
#define _SEGMENT_ENTRY_INV 0x20 /* invalid segment table entry */
+#define VADDR_PX 0xff000 /* page index bits */
+
#define _PAGE_RO 0x200 /* HW read-only bit */
#define _PAGE_INVALID 0x400 /* HW invalid bit */
#define _PAGE_RES0 0x800 /* bit must be zero */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index e35571e..0ebd65d 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1073,19 +1073,22 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
}
/* invalidate pte */
-void HELPER(ipte)(CPUS390XState *env, uint64_t pte_addr, uint64_t vaddr)
+void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
uint64_t page = vaddr & TARGET_PAGE_MASK;
- uint64_t pte = 0;
+ uint64_t pte_addr, pte;
/* XXX broadcast to other CPUs */
- /* XXX Linux is nice enough to give us the exact pte address.
- According to spec we'd have to find it out ourselves */
- /* XXX Linux is fine with overwriting the pte, the spec requires
- us to only set the invalid bit */
- stq_phys(cs->as, pte_addr, pte | _PAGE_INVALID);
+ /* Compute the page table entry address */
+ pte_addr = (pto & _SEGMENT_ENTRY_ORIGIN);
+ pte_addr += (vaddr & _VADDR_PX) >> 9;
+
+ /* Mark the page table entry as invalid */
+ pte = ldq_phys(cs->as, pte_addr);
+ pte |= _PAGE_INVALID;
+ stq_phys(cs->as, pte_addr, pte);
/* XXX we exploit the fact that Linux passes the exact virtual
address here - it's not obliged to! */
diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c
index 31eb9ef..501e390 100644
--- a/target/s390x/mmu_helper.c
+++ b/target/s390x/mmu_helper.c
@@ -143,8 +143,6 @@ static int mmu_translate_pte(CPUS390XState *env, target_ulong vaddr,
return 0;
}
-#define VADDR_PX 0xff000 /* Page index bits */
-
/* Decode segment table entry */
static int mmu_translate_segment(CPUS390XState *env, target_ulong vaddr,
uint64_t asc, uint64_t st_entry,
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 42/69] target/s390x: implement local-TLB-clearing in IPTE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (40 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 41/69] target/s390x: remove some Linux assumptions from IPTE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 43/69] target/s390x: implement TEST AND SET Richard Henderson
` (28 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
And at the same time make IPTE SMP aware.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-4-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 2 +-
target/s390x/mem_helper.c | 21 +++++++++++++--------
target/s390x/translate.c | 6 +++++-
3 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index cc451c7..3f5a05d 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -111,7 +111,7 @@ DEF_HELPER_4(mvcs, i32, env, i64, i64, i64)
DEF_HELPER_4(mvcp, i32, env, i64, i64, i64)
DEF_HELPER_4(sigp, i32, env, i64, i32, i64)
DEF_HELPER_FLAGS_2(sacf, TCG_CALL_NO_WG, void, env, i64)
-DEF_HELPER_FLAGS_3(ipte, TCG_CALL_NO_RWG, void, env, i64, i64)
+DEF_HELPER_FLAGS_4(ipte, TCG_CALL_NO_RWG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_1(ptlb, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_FLAGS_1(purge, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_2(lra, i64, env, i64)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 0ebd65d..ddbebcd 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1073,17 +1073,16 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
}
/* invalidate pte */
-void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr)
+void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr,
+ uint32_t m4)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
uint64_t page = vaddr & TARGET_PAGE_MASK;
uint64_t pte_addr, pte;
- /* XXX broadcast to other CPUs */
-
/* Compute the page table entry address */
pte_addr = (pto & _SEGMENT_ENTRY_ORIGIN);
- pte_addr += (vaddr & _VADDR_PX) >> 9;
+ pte_addr += (vaddr & VADDR_PX) >> 9;
/* Mark the page table entry as invalid */
pte = ldq_phys(cs->as, pte_addr);
@@ -1092,13 +1091,19 @@ void HELPER(ipte)(CPUS390XState *env, uint64_t pto, uint64_t vaddr)
/* XXX we exploit the fact that Linux passes the exact virtual
address here - it's not obliged to! */
- tlb_flush_page(cs, page);
+ /* XXX: the LC bit should be considered as 0 if the local-TLB-clearing
+ facility is not installed. */
+ if (m4 & 1) {
+ tlb_flush_page(cs, page);
+ } else {
+ tlb_flush_page_all_cpus_synced(cs, page);
+ }
/* XXX 31-bit hack */
- if (page & 0x80000000) {
- tlb_flush_page(cs, page & ~0x80000000);
+ if (m4 & 1) {
+ tlb_flush_page(cs, page ^ 0x80000000);
} else {
- tlb_flush_page(cs, page | 0x80000000);
+ tlb_flush_page_all_cpus_synced(cs, page ^ 0x80000000);
}
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index f759818..f160b62 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2352,8 +2352,12 @@ static ExitStatus op_ipm(DisasContext *s, DisasOps *o)
#ifndef CONFIG_USER_ONLY
static ExitStatus op_ipte(DisasContext *s, DisasOps *o)
{
+ TCGv_i32 m4;
+
check_privileged(s);
- gen_helper_ipte(cpu_env, o->in1, o->in2);
+ m4 = tcg_const_i32(get_field(s->fields, m4));
+ gen_helper_ipte(cpu_env, o->in1, o->in2, m4);
+ tcg_temp_free_i32(m4);
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 43/69] target/s390x: implement TEST AND SET
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (41 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 42/69] target/s390x: implement local-TLB-clearing in IPTE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 44/69] target/s390x: implement TEST ADDRESSING MODE Richard Henderson
` (27 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-5-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/insn-data.def | 3 +++
target/s390x/translate.c | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index f818437..0f70ace 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -810,6 +810,9 @@
/* SUPERVISOR CALL */
C(0x0a00, SVC, I, Z, 0, 0, 0, 0, svc, 0)
+/* TEST AND SET */
+ C(0x9300, TS, S, Z, 0, a2, 0, 0, ts, 0)
+
/* TEST DATA CLASS */
C(0xed10, TCEB, RXE, Z, e1, a2, 0, 0, tceb, 0)
C(0xed11, TCDB, RXE, Z, f1_o, a2, 0, 0, tcdb, 0)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index f160b62..0cfa8cc 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4129,6 +4129,16 @@ static ExitStatus op_trt(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_ts(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 t1 = tcg_const_i32(0xff);
+ tcg_gen_atomic_xchg_i32(t1, o->in2, t1, get_mem_index(s), MO_UB);
+ tcg_gen_extract_i32(cc_op, t1, 7, 1);
+ tcg_temp_free_i32(t1);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_unpk(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 44/69] target/s390x: implement TEST ADDRESSING MODE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (42 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 43/69] target/s390x: implement TEST AND SET Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 45/69] target/s390x: implement PACK Richard Henderson
` (26 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-6-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/insn-data.def | 3 +++
target/s390x/translate.c | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 0f70ace..170b50e 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -810,6 +810,9 @@
/* SUPERVISOR CALL */
C(0x0a00, SVC, I, Z, 0, 0, 0, 0, svc, 0)
+/* TEST ADDRESSING MODE */
+ C(0x010b, TAM, E, Z, 0, 0, 0, 0, tam, 0)
+
/* TEST AND SET */
C(0x9300, TS, S, Z, 0, a2, 0, 0, ts, 0)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 0cfa8cc..7f265ae 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4063,6 +4063,16 @@ static ExitStatus op_svc(DisasContext *s, DisasOps *o)
return EXIT_NORETURN;
}
+static ExitStatus op_tam(DisasContext *s, DisasOps *o)
+{
+ int cc = 0;
+
+ cc |= (s->tb->flags & FLAG_MASK_64) ? 2 : 0;
+ cc |= (s->tb->flags & FLAG_MASK_32) ? 1 : 0;
+ gen_op_movi_cc(s, cc);
+ return NO_EXIT;
+}
+
static ExitStatus op_tceb(DisasContext *s, DisasOps *o)
{
gen_helper_tceb(cc_op, cpu_env, o->in1, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 45/69] target/s390x: implement PACK
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (43 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 44/69] target/s390x: implement TEST ADDRESSING MODE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 46/69] target/s390x: implement LOAD PAIR FROM QUADWORD Richard Henderson
` (25 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-7-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 5 +++++
target/s390x/mem_helper.c | 37 +++++++++++++++++++++++++++++++++++++
target/s390x/translate.c | 8 ++++++++
4 files changed, 51 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 3f5a05d..c6fbc3b 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -75,6 +75,7 @@ DEF_HELPER_FLAGS_2(sqeb, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_2(sqdb, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_3(sqxb, TCG_CALL_NO_WG, i64, env, i64, i64)
DEF_HELPER_FLAGS_1(cvd, TCG_CALL_NO_RWG_SE, i64, s32)
+DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 170b50e..f92bfde 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -639,6 +639,11 @@
C(0x9600, OI, SI, Z, m1_8u, i2_8u, new, m1_8, or, nz64)
C(0xeb56, OIY, SIY, LD, m1_8u, i2_8u, new, m1_8, or, nz64)
+/* PACK */
+ /* Really format SS_b, but we pack both lengths into one argument
+ for the helper call, so we might as well leave one 8-bit field. */
+ C(0xf200, PACK, SS_a, Z, la1, a2, 0, 0, pack, 0)
+
/* PREFETCH */
/* Implemented as nops of course. */
C(0xe336, PFD, RXY_b, GIE, 0, 0, 0, 0, 0, 0)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index ddbebcd..850472e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -644,6 +644,43 @@ uint64_t HELPER(cksm)(CPUS390XState *env, uint64_t r1,
return len;
}
+void HELPER(pack)(CPUS390XState *env, uint32_t len, uint64_t dest, uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int len_dest = len >> 4;
+ int len_src = len & 0xf;
+ uint8_t b;
+
+ dest += len_dest;
+ src += len_src;
+
+ /* last byte is special, it only flips the nibbles */
+ b = cpu_ldub_data_ra(env, src, ra);
+ cpu_stb_data_ra(env, dest, (b << 4) | (b >> 4), ra);
+ src--;
+ len_src--;
+
+ /* now pack every value */
+ while (len_dest >= 0) {
+ b = 0;
+
+ if (len_src > 0) {
+ b = cpu_ldub_data_ra(env, src, ra) & 0x0f;
+ src--;
+ len_src--;
+ }
+ if (len_src > 0) {
+ b |= cpu_ldub_data_ra(env, src, ra) << 4;
+ src--;
+ len_src--;
+ }
+
+ len_dest--;
+ dest--;
+ cpu_stb_data_ra(env, dest, b, ra);
+ }
+}
+
void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint64_t src)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 7f265ae..00b91c4 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3139,6 +3139,14 @@ static ExitStatus op_ori(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_pack(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
+ gen_helper_pack(cpu_env, l, o->addr1, o->in2);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_popcnt(DisasContext *s, DisasOps *o)
{
gen_helper_popcnt(o->out, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 46/69] target/s390x: implement LOAD PAIR FROM QUADWORD
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (44 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 45/69] target/s390x: implement PACK Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 47/69] target/s390x: implement STORE PAIR TO QUADWORD Richard Henderson
` (24 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-8-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 13 +++++++++++++
target/s390x/translate.c | 7 +++++++
4 files changed, 23 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index c6fbc3b..ca78d1b 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -87,6 +87,7 @@ DEF_HELPER_FLAGS_2(sfas, TCG_CALL_NO_WG, void, env, i64)
DEF_HELPER_FLAGS_1(popcnt, TCG_CALL_NO_RWG_SE, i64, i64)
DEF_HELPER_FLAGS_1(stfl, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_2(stfle, i32, env, i64)
+DEF_HELPER_FLAGS_2(lpq, TCG_CALL_NO_WG, i64, env, i64)
#ifndef CONFIG_USER_ONLY
DEF_HELPER_3(servc, i32, env, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index f92bfde..53c86d5 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -507,6 +507,8 @@
/* LOAD PAIR DISJOINT */
D(0xc804, LPD, SSF, ILA, 0, 0, new_P, r3_P32, lpd, 0, MO_TEUL)
D(0xc805, LPDG, SSF, ILA, 0, 0, new_P, r3_P64, lpd, 0, MO_TEQ)
+/* LOAD PAIR FROM QUADWORD */
+ C(0xe38f, LPQ, RXY_a, Z, 0, a2, r1_P, 0, lpq, 0)
/* LOAD POSITIVE */
C(0x1000, LPR, RR_a, Z, 0, r2_32s, new, r1_32, abs, abs32)
C(0xb900, LPGR, RRE, Z, 0, r2, r1, 0, abs, abs64)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 850472e..4f34f87 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1237,6 +1237,19 @@ uint64_t HELPER(lra)(CPUS390XState *env, uint64_t addr)
}
#endif
+/* load pair from quadword */
+uint64_t HELPER(lpq)(CPUS390XState *env, uint64_t addr)
+{
+ uintptr_t ra = GETPC();
+ int mem_idx = cpu_mmu_index(env, false);
+ TCGMemOpIdx oi = make_memop_idx(MO_TEQ | MO_ALIGN_16, mem_idx);
+
+ Int128 v = helper_atomic_ldo_be_mmu(env, addr, oi, ra);
+
+ env->retxl = int128_getlo(v);
+ return int128_gethi(v);
+}
+
/* 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.
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 00b91c4..ec61590 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2830,6 +2830,13 @@ static ExitStatus op_lpd(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_lpq(DisasContext *s, DisasOps *o)
+{
+ gen_helper_lpq(o->out, cpu_env, o->in2);
+ return_low128(o->out2);
+ return NO_EXIT;
+}
+
#ifndef CONFIG_USER_ONLY
static ExitStatus op_lura(DisasContext *s, DisasOps *o)
{
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 47/69] target/s390x: implement STORE PAIR TO QUADWORD
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (45 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 46/69] target/s390x: implement LOAD PAIR FROM QUADWORD Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 48/69] target/s390x: implement COMPARE AND SIGNAL Richard Henderson
` (23 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-9-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 12 ++++++++++++
target/s390x/translate.c | 6 ++++++
4 files changed, 21 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index ca78d1b..596fec2 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -88,6 +88,7 @@ DEF_HELPER_FLAGS_1(popcnt, TCG_CALL_NO_RWG_SE, i64, i64)
DEF_HELPER_FLAGS_1(stfl, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_2(stfle, i32, env, i64)
DEF_HELPER_FLAGS_2(lpq, TCG_CALL_NO_WG, i64, env, i64)
+DEF_HELPER_FLAGS_4(stpq, TCG_CALL_NO_WG, void, env, i64, i64, i64)
#ifndef CONFIG_USER_ONLY
DEF_HELPER_3(servc, i32, env, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 53c86d5..5314162 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -770,6 +770,8 @@
/* STORE ACCESS MULTIPLE */
C(0x9b00, STAM, RS_a, Z, 0, a2, 0, 0, stam, 0)
C(0xeb9b, STAMY, RSY_a, LD, 0, a2, 0, 0, stam, 0)
+/* STORE PAIR TO QUADWORD */
+ C(0xe38e, STPQ, RXY_a, Z, 0, a2, r1_P, 0, stpq, 0)
/* SUBTRACT */
C(0x1b00, SR, RR_a, Z, r1, r2, new, r1_32, sub, subs32)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 4f34f87..15b5f45 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1250,6 +1250,18 @@ uint64_t HELPER(lpq)(CPUS390XState *env, uint64_t addr)
return int128_gethi(v);
}
+/* store pair to quadword */
+void HELPER(stpq)(CPUS390XState *env, uint64_t addr,
+ uint64_t low, uint64_t high)
+{
+ uintptr_t ra = GETPC();
+ int mem_idx = cpu_mmu_index(env, false);
+ TCGMemOpIdx oi = make_memop_idx(MO_TEQ | MO_ALIGN_16, mem_idx);
+
+ Int128 v = int128_make128(low, high);
+ helper_atomic_sto_be_mmu(env, addr, v, oi, ra);
+}
+
/* 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.
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index ec61590..6635877 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4019,6 +4019,12 @@ static ExitStatus op_stmh(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_stpq(DisasContext *s, DisasOps *o)
+{
+ gen_helper_stpq(cpu_env, o->in2, o->out2, o->out);
+ return NO_EXIT;
+}
+
static ExitStatus op_srst(DisasContext *s, DisasOps *o)
{
gen_helper_srst(o->in1, cpu_env, regs[0], o->in1, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 48/69] target/s390x: implement COMPARE AND SIGNAL
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (46 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 47/69] target/s390x: implement STORE PAIR TO QUADWORD Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 49/69] target/s390x: implement MOVE INVERSE Richard Henderson
` (22 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
These functions differ from COMPARE by generating an exception for a
QNaN input. Use the non quiet version of floatXX_compare.
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-10-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/fpu_helper.c | 27 +++++++++++++++++++++++++++
target/s390x/helper.h | 3 +++
target/s390x/insn-data.def | 6 ++++++
target/s390x/translate.c | 21 +++++++++++++++++++++
4 files changed, 57 insertions(+)
diff --git a/target/s390x/fpu_helper.c b/target/s390x/fpu_helper.c
index e604e9f..26f124f 100644
--- a/target/s390x/fpu_helper.c
+++ b/target/s390x/fpu_helper.c
@@ -585,6 +585,33 @@ uint64_t HELPER(fixb)(CPUS390XState *env, uint64_t ah, uint64_t al, uint32_t m3)
return RET128(ret);
}
+/* 32-bit FP compare and signal */
+uint32_t HELPER(keb)(CPUS390XState *env, uint64_t f1, uint64_t f2)
+{
+ int cmp = float32_compare(f1, f2, &env->fpu_status);
+ handle_exceptions(env, GETPC());
+ return float_comp_to_cc(env, cmp);
+}
+
+/* 64-bit FP compare and signal */
+uint32_t HELPER(kdb)(CPUS390XState *env, uint64_t f1, uint64_t f2)
+{
+ int cmp = float64_compare(f1, f2, &env->fpu_status);
+ handle_exceptions(env, GETPC());
+ return float_comp_to_cc(env, cmp);
+}
+
+/* 128-bit FP compare and signal */
+uint32_t HELPER(kxb)(CPUS390XState *env, uint64_t ah, uint64_t al,
+ uint64_t bh, uint64_t bl)
+{
+ int cmp = float128_compare(make_float128(ah, al),
+ make_float128(bh, bl),
+ &env->fpu_status);
+ handle_exceptions(env, GETPC());
+ return float_comp_to_cc(env, cmp);
+}
+
/* 32-bit FP multiply and add */
uint64_t HELPER(maeb)(CPUS390XState *env, uint64_t f1,
uint64_t f2, uint64_t f3)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 596fec2..4ada894 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -89,6 +89,9 @@ DEF_HELPER_FLAGS_1(stfl, TCG_CALL_NO_RWG, void, env)
DEF_HELPER_2(stfle, i32, env, i64)
DEF_HELPER_FLAGS_2(lpq, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_4(stpq, TCG_CALL_NO_WG, void, env, i64, i64, i64)
+DEF_HELPER_FLAGS_3(keb, TCG_CALL_NO_WG, i32, env, i64, i64)
+DEF_HELPER_FLAGS_3(kdb, TCG_CALL_NO_WG, i32, env, i64, i64)
+DEF_HELPER_FLAGS_5(kxb, TCG_CALL_NO_WG, i32, env, i64, i64, i64, i64)
#ifndef CONFIG_USER_ONLY
DEF_HELPER_3(servc, i32, env, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 5314162..0127894 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -154,6 +154,12 @@
C(0xb349, CXBR, RRE, Z, x1_o, x2_o, 0, 0, cxb, 0)
C(0xed09, CEB, RXE, Z, e1, m2_32u, 0, 0, ceb, 0)
C(0xed19, CDB, RXE, Z, f1_o, m2_64, 0, 0, cdb, 0)
+/* COMPARE AND SIGNAL */
+ C(0xb308, KEBR, RRE, Z, e1, e2, 0, 0, keb, 0)
+ C(0xb318, KDBR, RRE, Z, f1_o, f2_o, 0, 0, kdb, 0)
+ C(0xb348, KXBR, RRE, Z, x1_o, x2_o, 0, 0, kxb, 0)
+ C(0xed08, KEB, RXE, Z, e1, m2_32u, 0, 0, keb, 0)
+ C(0xed18, KDB, RXE, Z, f1_o, m2_64, 0, 0, kdb, 0)
/* COMPARE IMMEDIATE */
C(0xc20d, CFI, RIL_a, EI, r1, i2, 0, 0, 0, cmps32)
C(0xc20c, CGFI, RIL_a, EI, r1, i2, 0, 0, 0, cmps64)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 6635877..30d0575 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2369,6 +2369,27 @@ static ExitStatus op_iske(DisasContext *s, DisasOps *o)
}
#endif
+static ExitStatus op_keb(DisasContext *s, DisasOps *o)
+{
+ gen_helper_keb(cc_op, cpu_env, o->in1, o->in2);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
+static ExitStatus op_kdb(DisasContext *s, DisasOps *o)
+{
+ gen_helper_kdb(cc_op, cpu_env, o->in1, o->in2);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
+static ExitStatus op_kxb(DisasContext *s, DisasOps *o)
+{
+ gen_helper_kxb(cc_op, cpu_env, o->out, o->out2, o->in1, o->in2);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_laa(DisasContext *s, DisasOps *o)
{
/* The real output is indeed the original value in memory;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 49/69] target/s390x: implement MOVE INVERSE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (47 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 48/69] target/s390x: implement COMPARE AND SIGNAL Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 50/69] target/s390x: implement MOVE NUMERICS Richard Henderson
` (21 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-11-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 12 ++++++++++++
target/s390x/translate.c | 8 ++++++++
4 files changed, 23 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 4ada894..a618fe5 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -3,6 +3,7 @@ DEF_HELPER_FLAGS_4(nc, TCG_CALL_NO_WG, i32, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(oc, TCG_CALL_NO_WG, i32, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(xc, TCG_CALL_NO_WG, i32, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(mvc, TCG_CALL_NO_WG, void, env, i32, i64, i64)
+DEF_HELPER_FLAGS_4(mvcin, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(clc, TCG_CALL_NO_WG, i32, env, i32, i64, i64)
DEF_HELPER_3(mvcl, i32, env, i32, i32)
DEF_HELPER_FLAGS_4(clm, TCG_CALL_NO_WG, i32, env, i32, i32, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 0127894..c8f7761 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -572,6 +572,8 @@
C(0xe548, MVGHI, SIL, GIE, la1, i2, 0, m1_64, mov2, 0)
C(0x9200, MVI, SI, Z, la1, i2, 0, m1_8, mov2, 0)
C(0xeb52, MVIY, SIY, LD, la1, i2, 0, m1_8, mov2, 0)
+/* MOVE INVERSE */
+ C(0xe800, MVCIN, SS_a, Z, la1, a2, 0, 0, mvcin, 0)
/* MOVE LONG */
C(0x0e00, MVCL, RR_a, Z, 0, 0, 0, 0, mvcl, 0)
/* MOVE LONG EXTENDED */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 15b5f45..eef7547 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -231,6 +231,18 @@ void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
do_helper_mvc(env, l, dest, src, GETPC());
}
+/* move inverse */
+void HELPER(mvcin)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int i;
+
+ for (i = 0; i <= l; i++) {
+ uint8_t v = cpu_ldub_data_ra(env, src - i, ra);
+ cpu_stb_data_ra(env, dest + i, v, ra);
+ }
+}
+
/* compare unsigned byte arrays */
static uint32_t do_helper_clc(CPUS390XState *env, uint32_t l, uint64_t s1,
uint64_t s2, uintptr_t ra)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 30d0575..61373df 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2940,6 +2940,14 @@ static ExitStatus op_mvc(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_mvcin(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
+ gen_helper_mvcin(cpu_env, l, o->addr1, o->in2);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_mvcl(DisasContext *s, DisasOps *o)
{
TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 50/69] target/s390x: implement MOVE NUMERICS
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (48 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 49/69] target/s390x: implement MOVE INVERSE Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 51/69] target/s390x: implement MOVE WITH OFFSET Richard Henderson
` (20 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-12-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 13 +++++++++++++
target/s390x/translate.c | 8 ++++++++
4 files changed, 24 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index a618fe5..e62e455 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -13,6 +13,7 @@ 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_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(mvpg, TCG_CALL_NO_WG, i32, env, i64, i64, i64)
DEF_HELPER_4(mvst, i64, env, i64, i64, i64)
DEF_HELPER_4(ex, void, env, i32, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index c8f7761..6af7176 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -578,6 +578,8 @@
C(0x0e00, MVCL, RR_a, Z, 0, 0, 0, 0, mvcl, 0)
/* MOVE LONG EXTENDED */
C(0xa800, MVCLE, RS_a, Z, 0, a2, 0, 0, mvcle, 0)
+/* MOVE NUMERICS */
+ C(0xd100, MVN, SS_a, Z, la1, a2, 0, 0, mvn, 0)
/* MOVE PAGE */
C(0xb254, MVPG, RRE, Z, r1_o, r2_o, 0, 0, mvpg, 0)
/* MOVE STRING */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index eef7547..5385278 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -243,6 +243,19 @@ void HELPER(mvcin)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
}
}
+/* move numerics */
+void HELPER(mvn)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int i;
+
+ for (i = 0; i <= l; i++) {
+ uint8_t v = cpu_ldub_data_ra(env, dest + i, ra) & 0xf0;
+ v |= cpu_ldub_data_ra(env, src + i, ra) & 0x0f;
+ cpu_stb_data_ra(env, dest + i, v, ra);
+ }
+}
+
/* compare unsigned byte arrays */
static uint32_t do_helper_clc(CPUS390XState *env, uint32_t l, uint64_t s1,
uint64_t s2, uintptr_t ra)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 61373df..4e72112 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2990,6 +2990,14 @@ static ExitStatus op_mvcs(DisasContext *s, DisasOps *o)
}
#endif
+static ExitStatus op_mvn(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
+ gen_helper_mvn(cpu_env, l, o->addr1, o->in2);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_mvpg(DisasContext *s, DisasOps *o)
{
gen_helper_mvpg(cc_op, cpu_env, regs[0], o->in1, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 51/69] target/s390x: implement MOVE WITH OFFSET
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (49 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 50/69] target/s390x: implement MOVE NUMERICS Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 52/69] target/s390x: implement MOVE ZONES Richard Henderson
` (19 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-13-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 4 ++++
target/s390x/mem_helper.c | 31 +++++++++++++++++++++++++++++++
target/s390x/translate.c | 8 ++++++++
4 files changed, 44 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index e62e455..a197b8b 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -14,6 +14,7 @@ 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_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)
DEF_HELPER_FLAGS_4(mvpg, TCG_CALL_NO_WG, i32, env, i64, i64, i64)
DEF_HELPER_4(mvst, i64, env, i64, i64, i64)
DEF_HELPER_4(ex, void, env, i32, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 6af7176..47542ee 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -584,6 +584,10 @@
C(0xb254, MVPG, RRE, Z, r1_o, r2_o, 0, 0, mvpg, 0)
/* MOVE STRING */
C(0xb255, MVST, RRE, Z, r1_o, r2_o, 0, 0, mvst, 0)
+/* MOVE WITH OFFSET */
+ /* Really format SS_b, but we pack both lengths into one argument
+ for the helper call, so we might as well leave one 8-bit field. */
+ C(0xf100, MVO, SS_a, Z, la1, a2, 0, 0, mvo, 0)
/* MULTIPLY */
C(0x1c00, MR, RR_a, Z, r1p1_32s, r2_32s, new, r1_D32, mul, 0)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 5385278..3601bb9 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -256,6 +256,37 @@ void HELPER(mvn)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
}
}
+/* move with offset */
+void HELPER(mvo)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int len_dest = l >> 4;
+ int len_src = l & 0xf;
+ uint8_t byte_dest, byte_src;
+ int i;
+
+ src += len_src;
+ dest += len_dest;
+
+ /* Handle rightmost byte */
+ byte_src = cpu_ldub_data_ra(env, src, ra);
+ byte_dest = cpu_ldub_data_ra(env, dest, ra);
+ byte_dest = (byte_dest & 0x0f) | (byte_src << 4);
+ cpu_stb_data_ra(env, dest, byte_dest, ra);
+
+ /* Process remaining bytes from right to left */
+ for (i = 1; i <= len_dest; i++) {
+ byte_dest = byte_src >> 4;
+ if (len_src - i >= 0) {
+ byte_src = cpu_ldub_data_ra(env, src - i, ra);
+ } else {
+ byte_src = 0;
+ }
+ byte_dest |= byte_src << 4;
+ cpu_stb_data_ra(env, dest - i, byte_dest, ra);
+ }
+}
+
/* compare unsigned byte arrays */
static uint32_t do_helper_clc(CPUS390XState *env, uint32_t l, uint64_t s1,
uint64_t s2, uintptr_t ra)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 4e72112..b1877cf 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2998,6 +2998,14 @@ static ExitStatus op_mvn(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_mvo(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
+ gen_helper_mvo(cpu_env, l, o->addr1, o->in2);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_mvpg(DisasContext *s, DisasOps *o)
{
gen_helper_mvpg(cc_op, cpu_env, regs[0], o->in1, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 52/69] target/s390x: implement MOVE ZONES
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (50 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 51/69] target/s390x: implement MOVE WITH OFFSET Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 53/69] target/s390x: improve 24-bit and 31-bit addresses read Richard Henderson
` (18 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-14-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 13 +++++++++++++
target/s390x/translate.c | 8 ++++++++
4 files changed, 24 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index a197b8b..ba21e4d 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -16,6 +16,7 @@ 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)
DEF_HELPER_FLAGS_4(mvpg, TCG_CALL_NO_WG, i32, env, i64, i64, i64)
+DEF_HELPER_FLAGS_4(mvz, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(mvst, i64, env, i64, i64, i64)
DEF_HELPER_4(ex, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(stam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 47542ee..b40611b 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -588,6 +588,8 @@
/* Really format SS_b, but we pack both lengths into one argument
for the helper call, so we might as well leave one 8-bit field. */
C(0xf100, MVO, SS_a, Z, la1, a2, 0, 0, mvo, 0)
+/* MOVE ZONES */
+ C(0xd300, MVZ, SS_a, Z, la1, a2, 0, 0, mvz, 0)
/* MULTIPLY */
C(0x1c00, MR, RR_a, Z, r1p1_32s, r2_32s, new, r1_D32, mul, 0)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 3601bb9..95f701d 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -287,6 +287,19 @@ void HELPER(mvo)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
}
}
+/* move zones */
+void HELPER(mvz)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int i;
+
+ for (i = 0; i <= l; i++) {
+ uint8_t b = cpu_ldub_data_ra(env, dest + i, ra) & 0x0f;
+ b |= cpu_ldub_data_ra(env, src + i, ra) & 0xf0;
+ cpu_stb_data_ra(env, dest + i, b, ra);
+ }
+}
+
/* compare unsigned byte arrays */
static uint32_t do_helper_clc(CPUS390XState *env, uint32_t l, uint64_t s1,
uint64_t s2, uintptr_t ra)
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index b1877cf..95ca53c 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3021,6 +3021,14 @@ static ExitStatus op_mvst(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_mvz(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
+ gen_helper_mvz(cpu_env, l, o->addr1, o->in2);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_mul(DisasContext *s, DisasOps *o)
{
tcg_gen_mul_i64(o->out, o->in1, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 53/69] target/s390x: improve 24-bit and 31-bit addresses read
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (51 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 52/69] target/s390x: implement MOVE ZONES Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 54/69] target/s390x: improve 24-bit and 31-bit addresses write Richard Henderson
` (17 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Improve fix_address to also handle the 24-bit mode. Rename fix_address
to wrap_address to better explain what is changed.
Replace the calls to get_address with x2 = 0 and b2 = 0 by
call to wrap_address, leading to the removal of this function. Rename
get_address_31fix into get_address.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-15-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 71 +++++++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 40 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 95f701d..2425bfc 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -365,30 +365,23 @@ uint32_t HELPER(clm)(CPUS390XState *env, uint32_t r1, uint32_t mask,
return cc;
}
-static inline uint64_t fix_address(CPUS390XState *env, uint64_t a)
+static inline uint64_t wrap_address(CPUS390XState *env, uint64_t a)
{
- /* 31-Bit mode */
if (!(env->psw.mask & PSW_MASK_64)) {
- a &= 0x7fffffff;
+ if (!(env->psw.mask & PSW_MASK_32)) {
+ /* 24-Bit mode */
+ a &= 0x00ffffff;
+ } else {
+ /* 31-Bit mode */
+ a &= 0x7fffffff;
+ }
}
return a;
}
-static inline uint64_t get_address(CPUS390XState *env, int x2, int b2, int d2)
-{
- uint64_t r = d2;
- if (x2) {
- r += env->regs[x2];
- }
- if (b2) {
- r += env->regs[b2];
- }
- return fix_address(env, r);
-}
-
-static inline uint64_t get_address_31fix(CPUS390XState *env, int reg)
+static inline uint64_t get_address(CPUS390XState *env, int reg)
{
- return fix_address(env, env->regs[reg]);
+ return wrap_address(env, env->regs[reg]);
}
/* search string (c is byte to search, r2 is string, r1 end of string) */
@@ -399,8 +392,8 @@ uint64_t HELPER(srst)(CPUS390XState *env, uint64_t r0, uint64_t end,
uint32_t len;
uint8_t v, c = r0;
- str = fix_address(env, str);
- end = fix_address(env, end);
+ str = wrap_address(env, str);
+ end = wrap_address(env, end);
/* Assume for now that R2 is unmodified. */
env->retxl = str;
@@ -434,8 +427,8 @@ uint64_t HELPER(clst)(CPUS390XState *env, uint64_t c, uint64_t s1, uint64_t s2)
uint32_t len;
c = c & 0xff;
- s1 = fix_address(env, s1);
- s2 = fix_address(env, s2);
+ s1 = wrap_address(env, s1);
+ s2 = wrap_address(env, s2);
/* 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. */
@@ -481,8 +474,8 @@ uint64_t HELPER(mvst)(CPUS390XState *env, uint64_t c, uint64_t d, uint64_t s)
uint32_t len;
c = c & 0xff;
- d = fix_address(env, d);
- s = fix_address(env, s);
+ d = wrap_address(env, d);
+ s = wrap_address(env, s);
/* 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. */
@@ -540,9 +533,9 @@ uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
{
uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1] & 0xffffff;
- uint64_t dest = get_address_31fix(env, r1);
+ uint64_t dest = get_address(env, r1);
uint64_t srclen = env->regs[r2 + 1] & 0xffffff;
- uint64_t src = get_address_31fix(env, r2);
+ uint64_t src = get_address(env, r2);
uint8_t pad = env->regs[r2 + 1] >> 24;
uint8_t v;
uint32_t cc;
@@ -583,9 +576,9 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
{
uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1];
- uint64_t dest = env->regs[r1];
+ uint64_t dest = get_address(env, r1);
uint64_t srclen = env->regs[r3 + 1];
- uint64_t src = env->regs[r3];
+ uint64_t src = get_address(env, r3);
uint8_t pad = a2 & 0xff;
uint8_t v;
uint32_t cc;
@@ -593,8 +586,6 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
if (!(env->psw.mask & PSW_MASK_64)) {
destlen = (uint32_t)destlen;
srclen = (uint32_t)srclen;
- dest &= 0x7fffffff;
- src &= 0x7fffffff;
}
if (destlen == srclen) {
@@ -634,9 +625,9 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
{
uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1];
- uint64_t dest = get_address_31fix(env, r1);
+ uint64_t dest = get_address(env, r1);
uint64_t srclen = env->regs[r3 + 1];
- uint64_t src = get_address_31fix(env, r3);
+ uint64_t src = get_address(env, r3);
uint8_t pad = a2 & 0xff;
uint32_t cc = 0;
@@ -1020,7 +1011,7 @@ uint32_t HELPER(testblock)(CPUS390XState *env, uint64_t real_addr)
uint64_t abs_addr;
int i;
- real_addr = fix_address(env, real_addr);
+ real_addr = wrap_address(env, real_addr);
abs_addr = mmu_real2abs(env, real_addr) & TARGET_PAGE_MASK;
if (!address_space_access_valid(&address_space_memory, abs_addr,
TARGET_PAGE_SIZE, true)) {
@@ -1054,7 +1045,7 @@ uint64_t HELPER(iske)(CPUS390XState *env, uint64_t r2)
{
static S390SKeysState *ss;
static S390SKeysClass *skeyclass;
- uint64_t addr = get_address(env, 0, 0, r2);
+ uint64_t addr = wrap_address(env, r2);
uint8_t key;
if (addr > ram_size) {
@@ -1077,7 +1068,7 @@ void HELPER(sske)(CPUS390XState *env, uint64_t r1, uint64_t r2)
{
static S390SKeysState *ss;
static S390SKeysClass *skeyclass;
- uint64_t addr = get_address(env, 0, 0, r2);
+ uint64_t addr = wrap_address(env, r2);
uint8_t key;
if (addr > ram_size) {
@@ -1234,14 +1225,14 @@ uint64_t HELPER(lura)(CPUS390XState *env, uint64_t addr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
- return (uint32_t)ldl_phys(cs->as, get_address(env, 0, 0, addr));
+ return (uint32_t)ldl_phys(cs->as, wrap_address(env, addr));
}
uint64_t HELPER(lurag)(CPUS390XState *env, uint64_t addr)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
- return ldq_phys(cs->as, get_address(env, 0, 0, addr));
+ return ldq_phys(cs->as, wrap_address(env, addr));
}
/* store using real address */
@@ -1249,7 +1240,7 @@ void HELPER(stura)(CPUS390XState *env, uint64_t addr, uint64_t v1)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
- stl_phys(cs->as, get_address(env, 0, 0, addr), (uint32_t)v1);
+ stl_phys(cs->as, wrap_address(env, addr), (uint32_t)v1);
if ((env->psw.mask & PSW_MASK_PER) &&
(env->cregs[9] & PER_CR9_EVENT_STORE) &&
@@ -1264,7 +1255,7 @@ void HELPER(sturg)(CPUS390XState *env, uint64_t addr, uint64_t v1)
{
CPUState *cs = CPU(s390_env_get_cpu(env));
- stq_phys(cs->as, get_address(env, 0, 0, addr), v1);
+ stq_phys(cs->as, wrap_address(env, addr), v1);
if ((env->psw.mask & PSW_MASK_PER) &&
(env->cregs[9] & PER_CR9_EVENT_STORE) &&
@@ -1382,8 +1373,8 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
uint32_t d1 = extract64(insn, 32, 12);
uint32_t b2 = extract64(insn, 28, 4);
uint32_t d2 = extract64(insn, 16, 12);
- uint64_t a1 = get_address(env, 0, b1, d1);
- uint64_t a2 = get_address(env, 0, b2, d2);
+ uint64_t a1 = wrap_address(env, env->regs[b1] + d1);
+ uint64_t a2 = wrap_address(env, env->regs[b2] + d2);
env->cc_op = helper(env, l, a1, a2, 0);
env->psw.addr += ilen;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 54/69] target/s390x: improve 24-bit and 31-bit addresses write
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (52 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 53/69] target/s390x: improve 24-bit and 31-bit addresses read Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 55/69] target/s390x: improve 24-bit and 31-bit lengths read/write Richard Henderson
` (16 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-16-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 37 ++++++++++++++++++++++++++++++-------
1 file changed, 30 insertions(+), 7 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 2425bfc..2113494 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -384,6 +384,29 @@ static inline uint64_t get_address(CPUS390XState *env, int reg)
return wrap_address(env, env->regs[reg]);
}
+static inline void set_address(CPUS390XState *env, int reg, uint64_t address)
+{
+ if (env->psw.mask & PSW_MASK_64) {
+ /* 64-Bit mode */
+ env->regs[reg] = address;
+ } else {
+ if (!(env->psw.mask & PSW_MASK_32)) {
+ /* 24-Bit mode. According to the PoO it is implementation
+ dependent if bits 32-39 remain unchanged or are set to
+ zeros. Choose the former so that the function can also be
+ used for TRT. */
+ env->regs[reg] = deposit64(env->regs[reg], 0, 24, address);
+ } else {
+ /* 31-Bit mode. According to the PoO it is implementation
+ dependent if bit 32 remains unchanged or is set to zero.
+ Choose the latter so that the function can also be used for
+ TRT. */
+ address &= 0x7fffffff;
+ env->regs[reg] = deposit64(env->regs[reg], 0, 32, address);
+ }
+ }
+}
+
/* 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)
@@ -564,8 +587,8 @@ uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
env->regs[r1 + 1] = destlen;
/* can't use srclen here, we trunc'ed it */
env->regs[r2 + 1] -= src - env->regs[r2];
- env->regs[r1] = dest;
- env->regs[r2] = src;
+ set_address(env, r1, dest);
+ set_address(env, r2, src);
return cc;
}
@@ -613,8 +636,8 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
/* can't use srclen here, we trunc'ed it */
/* FIXME: 31-bit mode! */
env->regs[r3 + 1] -= src - env->regs[r3];
- env->regs[r1] = dest;
- env->regs[r3] = src;
+ set_address(env, r1, dest);
+ set_address(env, r3, src);
return cc;
}
@@ -651,8 +674,8 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
env->regs[r1 + 1] = destlen;
/* can't use srclen here, we trunc'ed it */
env->regs[r3 + 1] -= src - env->regs[r3];
- env->regs[r1] = dest;
- env->regs[r3] = src;
+ set_address(env, r1, dest);
+ set_address(env, r3, src);
return cc;
}
@@ -858,7 +881,7 @@ static uint32_t do_helper_trt(CPUS390XState *env, uint32_t len, uint64_t array,
uint8_t sbyte = cpu_ldub_data_ra(env, trans + byte, ra);
if (sbyte != 0) {
- env->regs[1] = array + i;
+ set_address(env, 1, array + i);
env->regs[2] = deposit64(env->regs[2], 0, 8, sbyte);
return (i == len) ? 2 : 1;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 55/69] target/s390x: improve 24-bit and 31-bit lengths read/write
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (53 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 54/69] target/s390x: improve 24-bit and 31-bit addresses write Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 56/69] target/s390x: fix COMPARE LOGICAL LONG EXTENDED Richard Henderson
` (15 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-17-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 47 +++++++++++++++++++++++++++++++++--------------
1 file changed, 33 insertions(+), 14 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 2113494..98a7aa2 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -407,6 +407,31 @@ static inline void set_address(CPUS390XState *env, int reg, uint64_t address)
}
}
+static inline uint64_t wrap_length(CPUS390XState *env, uint64_t length)
+{
+ if (!(env->psw.mask & PSW_MASK_64)) {
+ /* 24-Bit and 31-Bit mode */
+ length &= 0x7fffffff;
+ }
+ return length;
+}
+
+static inline uint64_t get_length(CPUS390XState *env, int reg)
+{
+ return wrap_length(env, env->regs[reg]);
+}
+
+static inline void set_length(CPUS390XState *env, int reg, uint64_t length)
+{
+ if (env->psw.mask & PSW_MASK_64) {
+ /* 64-Bit mode */
+ env->regs[reg] = length;
+ } else {
+ /* 24-Bit and 31-Bit mode */
+ env->regs[reg] = deposit64(env->regs[reg], 0, 32, length);
+ }
+}
+
/* 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)
@@ -598,19 +623,14 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
uintptr_t ra = GETPC();
- uint64_t destlen = env->regs[r1 + 1];
+ uint64_t destlen = get_length(env, r1 + 1);
uint64_t dest = get_address(env, r1);
- uint64_t srclen = env->regs[r3 + 1];
+ uint64_t srclen = get_length(env, r3 + 1);
uint64_t src = get_address(env, r3);
uint8_t pad = a2 & 0xff;
uint8_t v;
uint32_t cc;
- if (!(env->psw.mask & PSW_MASK_64)) {
- destlen = (uint32_t)destlen;
- srclen = (uint32_t)srclen;
- }
-
if (destlen == srclen) {
cc = 0;
} else if (destlen < srclen) {
@@ -632,10 +652,9 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
cpu_stb_data_ra(env, dest, pad, ra);
}
- env->regs[r1 + 1] = destlen;
+ set_length(env, r1 + 1 , destlen);
/* can't use srclen here, we trunc'ed it */
- /* FIXME: 31-bit mode! */
- env->regs[r3 + 1] -= src - env->regs[r3];
+ set_length(env, r3 + 1, env->regs[r3 + 1] - src - env->regs[r3]);
set_address(env, r1, dest);
set_address(env, r3, src);
@@ -647,9 +666,9 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
uintptr_t ra = GETPC();
- uint64_t destlen = env->regs[r1 + 1];
+ uint64_t destlen = get_length(env, r1 + 1);
uint64_t dest = get_address(env, r1);
- uint64_t srclen = env->regs[r3 + 1];
+ uint64_t srclen = get_length(env, r3 + 1);
uint64_t src = get_address(env, r3);
uint8_t pad = a2 & 0xff;
uint32_t cc = 0;
@@ -671,9 +690,9 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
}
}
- env->regs[r1 + 1] = destlen;
+ set_length(env, r1 + 1, destlen);
/* can't use srclen here, we trunc'ed it */
- env->regs[r3 + 1] -= src - env->regs[r3];
+ set_length(env, r3 + 1, env->regs[r3 + 1] - src - env->regs[r3]);
set_address(env, r1, dest);
set_address(env, r3, src);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 56/69] target/s390x: fix COMPARE LOGICAL LONG EXTENDED
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (54 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 55/69] target/s390x: improve 24-bit and 31-bit lengths read/write Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 57/69] target/s390x: implement COMPARE LOGICAL LONG Richard Henderson
` (14 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
There are multiple issues with the COMPARE LOGICAL LONG EXTENDED
instruction:
- The test between the two operands is inverted, leading to an inversion
of the cc values 1 and 2.
- The address and length of an operand continue to be decreased after
reaching the end of this operand. These values are then wrong write
back to the registers.
- We should limit the amount of bytes to process, so that interrupts can
be served correctly.
At the same time rename dest into src1 and src into src3 to match the
operand names and make the code less confusing.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-18-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 54 ++++++++++++++++++++++++++++++++---------------
target/s390x/translate.c | 20 +++++++++++++-----
2 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 98a7aa2..e992fd9 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -666,35 +666,55 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
uintptr_t ra = GETPC();
- uint64_t destlen = get_length(env, r1 + 1);
- uint64_t dest = get_address(env, r1);
- uint64_t srclen = get_length(env, r3 + 1);
- uint64_t src = get_address(env, r3);
+ uint64_t src1len = get_length(env, r1 + 1);
+ uint64_t src1 = get_address(env, r1);
+ uint64_t src3len = get_length(env, r3 + 1);
+ uint64_t src3 = get_address(env, r3);
uint8_t pad = a2 & 0xff;
+ uint64_t len = MAX(src1len, src3len);
uint32_t cc = 0;
- if (!(destlen || srclen)) {
+ if (!len) {
return cc;
}
- if (srclen > destlen) {
- srclen = destlen;
+ /* 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. */
+ if (len > 0x2000) {
+ len = 0x2000;
+ cc = 3;
}
- for (; destlen || srclen; src++, dest++, destlen--, srclen--) {
- uint8_t v1 = srclen ? cpu_ldub_data_ra(env, src, ra) : pad;
- uint8_t v2 = destlen ? cpu_ldub_data_ra(env, dest, ra) : pad;
- if (v1 != v2) {
- cc = (v1 < v2) ? 1 : 2;
+ for (; len; len--) {
+ uint8_t v1 = pad;
+ uint8_t v3 = pad;
+
+ if (src1len) {
+ v1 = cpu_ldub_data_ra(env, src1, ra);
+ }
+ if (src3len) {
+ v3 = cpu_ldub_data_ra(env, src3, ra);
+ }
+
+ if (v1 != v3) {
+ cc = (v1 < v3) ? 1 : 2;
break;
}
+
+ if (src1len) {
+ src1++;
+ src1len--;
+ }
+ if (src3len) {
+ src3++;
+ src3len--;
+ }
}
- set_length(env, r1 + 1, destlen);
- /* can't use srclen here, we trunc'ed it */
- set_length(env, r3 + 1, env->regs[r3 + 1] - src - env->regs[r3]);
- set_address(env, r1, dest);
- set_address(env, r3, src);
+ set_length(env, r1 + 1, src1len);
+ set_length(env, r3 + 1, src3len);
+ set_address(env, r1, src1);
+ set_address(env, r3, src3);
return cc;
}
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 95ca53c..9309e58 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1917,11 +1917,21 @@ static ExitStatus op_clc(DisasContext *s, DisasOps *o)
static ExitStatus op_clcle(DisasContext *s, DisasOps *o)
{
- TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
- TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- gen_helper_clcle(cc_op, cpu_env, r1, o->in2, r3);
- tcg_temp_free_i32(r1);
- tcg_temp_free_i32(r3);
+ int r1 = get_field(s->fields, r1);
+ int r3 = get_field(s->fields, r3);
+ TCGv_i32 t1, t3;
+
+ /* r1 and r3 must be even. */
+ if (r1 & 1 || r3 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t3 = tcg_const_i32(r3);
+ gen_helper_clcle(cc_op, cpu_env, t1, o->in2, t3);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t3);
set_cc_static(s);
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 57/69] target/s390x: implement COMPARE LOGICAL LONG
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (55 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 56/69] target/s390x: fix COMPARE LOGICAL LONG EXTENDED Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 58/69] target/s390x: fix adj_len_to_page Richard Henderson
` (13 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
As CLCL and CLCLE mostly differ by their operands, use a common do_clcl
helper. Another difference is that CLCL is not interruptible.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-19-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 84 +++++++++++++++++++++++++++++++++-------------
target/s390x/translate.c | 21 ++++++++++++
4 files changed, 84 insertions(+), 24 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index ba21e4d..546beec 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -6,6 +6,7 @@ DEF_HELPER_FLAGS_4(mvc, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(mvcin, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(clc, TCG_CALL_NO_WG, i32, env, i32, i64, i64)
DEF_HELPER_3(mvcl, i32, env, i32, i32)
+DEF_HELPER_3(clcl, i32, env, i32, i32)
DEF_HELPER_FLAGS_4(clm, TCG_CALL_NO_WG, i32, env, i32, i32, i64)
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)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index b40611b..1aa2b8b 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -216,6 +216,8 @@
C(0xc60e, CLGFRL, RIL_b, GIE, r1_o, mri2_32u, 0, 0, 0, cmpu64)
C(0xc607, CLHRL, RIL_b, GIE, r1_o, mri2_16u, 0, 0, 0, cmpu32)
C(0xc606, CLGHRL, RIL_b, GIE, r1_o, mri2_16u, 0, 0, 0, cmpu64)
+/* COMPARE LOGICAL LONG */
+ C(0x0f00, CLCL, RR_a, Z, 0, 0, 0, 0, clcl, 0)
/* COMPARE LOGICAL LONG EXTENDED */
C(0xa900, CLCLE, RS_a, Z, 0, a2, 0, 0, clcle, 0)
/* COMPARE LOGICAL CHARACTERS UNDER MASK */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index e992fd9..aaa347c 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -661,17 +661,14 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
return cc;
}
-/* compare logical long extended memcompare insn with padding */
-uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
- uint32_t r3)
-{
- uintptr_t ra = GETPC();
- uint64_t src1len = get_length(env, r1 + 1);
- uint64_t src1 = get_address(env, r1);
- uint64_t src3len = get_length(env, r3 + 1);
- uint64_t src3 = get_address(env, r3);
- uint8_t pad = a2 & 0xff;
- uint64_t len = MAX(src1len, src3len);
+/* compare logical long helper */
+static inline uint32_t do_clcl(CPUS390XState *env,
+ uint64_t *src1, uint64_t *src1len,
+ uint64_t *src3, uint64_t *src3len,
+ uint8_t pad, uint64_t limit,
+ uintptr_t ra)
+{
+ uint64_t len = MAX(*src1len, *src3len);
uint32_t cc = 0;
if (!len) {
@@ -679,9 +676,9 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
}
/* 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. */
- if (len > 0x2000) {
- len = 0x2000;
+ amount of work we're willing to do. */
+ if (len > limit) {
+ len = limit;
cc = 3;
}
@@ -689,11 +686,11 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint8_t v1 = pad;
uint8_t v3 = pad;
- if (src1len) {
- v1 = cpu_ldub_data_ra(env, src1, ra);
+ if (*src1len) {
+ v1 = cpu_ldub_data_ra(env, *src1, ra);
}
- if (src3len) {
- v3 = cpu_ldub_data_ra(env, src3, ra);
+ if (*src3len) {
+ v3 = cpu_ldub_data_ra(env, *src3, ra);
}
if (v1 != v3) {
@@ -701,16 +698,55 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
break;
}
- if (src1len) {
- src1++;
- src1len--;
+ if (*src1len) {
+ *src1 += 1;
+ *src1len -= 1;
}
- if (src3len) {
- src3++;
- src3len--;
+ if (*src3len) {
+ *src3 += 1;
+ *src3len -= 1;
}
}
+ return cc;
+}
+
+
+/* compare logical long */
+uint32_t HELPER(clcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
+{
+ uintptr_t ra = GETPC();
+ uint64_t src1len = extract64(env->regs[r1 + 1], 0, 24);
+ uint64_t src1 = get_address(env, r1);
+ uint64_t src3len = extract64(env->regs[r2 + 1], 0, 24);
+ uint64_t src3 = get_address(env, r2);
+ uint8_t pad = env->regs[r2 + 1] >> 24;
+ uint32_t cc;
+
+ cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, -1, ra);
+
+ env->regs[r1 + 1] = deposit64(env->regs[r1 + 1], 0, 24, src1len);
+ env->regs[r2 + 1] = deposit64(env->regs[r2 + 1], 0, 24, src3len);
+ set_address(env, r1, src1);
+ set_address(env, r2, src3);
+
+ return cc;
+}
+
+/* compare logical long extended memcompare insn with padding */
+uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
+ uint32_t r3)
+{
+ uintptr_t ra = GETPC();
+ uint64_t src1len = get_length(env, r1 + 1);
+ uint64_t src1 = get_address(env, r1);
+ uint64_t src3len = get_length(env, r3 + 1);
+ uint64_t src3 = get_address(env, r3);
+ uint8_t pad = a2;
+ uint32_t cc;
+
+ cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, 0x2000, ra);
+
set_length(env, r1 + 1, src1len);
set_length(env, r3 + 1, src3len);
set_address(env, r1, src1);
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 9309e58..999d716 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1915,6 +1915,27 @@ static ExitStatus op_clc(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_clcl(DisasContext *s, DisasOps *o)
+{
+ int r1 = get_field(s->fields, r1);
+ int r2 = get_field(s->fields, r2);
+ TCGv_i32 t1, t2;
+
+ /* r1 and r2 must be even. */
+ if (r1 & 1 || r2 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t2 = tcg_const_i32(r2);
+ gen_helper_clcl(cc_op, cpu_env, t1, t2);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t2);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_clcle(DisasContext *s, DisasOps *o)
{
int r1 = get_field(s->fields, r1);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 58/69] target/s390x: fix adj_len_to_page
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (56 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 57/69] target/s390x: implement COMPARE LOGICAL LONG Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 59/69] target/s390x: improve MOVE LONG and MOVE LONG EXTENDED Richard Henderson
` (12 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
adj_len_to_page doesn't return the correct result when the address
is already page aligned and the length is bigger than a page. Fix that.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-20-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index aaa347c..6dfa087 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -61,7 +61,7 @@ static inline uint32_t adj_len_to_page(uint32_t len, uint64_t addr)
{
#ifndef CONFIG_USER_ONLY
if ((addr & ~TARGET_PAGE_MASK) + len - 1 >= TARGET_PAGE_SIZE) {
- return -addr & ~TARGET_PAGE_MASK;
+ return -(addr | TARGET_PAGE_MASK);
}
#endif
return len;
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 59/69] target/s390x: improve MOVE LONG and MOVE LONG EXTENDED
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (57 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 58/69] target/s390x: fix adj_len_to_page Richard Henderson
@ 2017-06-04 17:34 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 60/69] target/s390x: implement COMPARE LOGICAL LONG UNICODE Richard Henderson
` (11 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:34 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
As MVCL and MVCLE only differ by their operands, use a common
do_mvcl helper. Optimize it calling fast_memmove and fast_memset.
Correctly write back addresses. Check that r1 and r2/r3 registers
are even.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-21-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/mem_helper.c | 90 +++++++++++++++++++++--------------------------
target/s390x/translate.c | 40 +++++++++++++++------
2 files changed, 70 insertions(+), 60 deletions(-)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 6dfa087..cb0ec3e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -576,49 +576,60 @@ void HELPER(stam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
}
}
-/* move long */
-uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
+/* move long helper */
+static inline uint32_t do_mvcl(CPUS390XState *env,
+ uint64_t *dest, uint64_t *destlen,
+ uint64_t *src, uint64_t *srclen,
+ uint8_t pad, uintptr_t ra)
{
- uintptr_t ra = GETPC();
- uint64_t destlen = env->regs[r1 + 1] & 0xffffff;
- uint64_t dest = get_address(env, r1);
- uint64_t srclen = env->regs[r2 + 1] & 0xffffff;
- uint64_t src = get_address(env, r2);
- uint8_t pad = env->regs[r2 + 1] >> 24;
- uint8_t v;
+ uint64_t len = MIN(*srclen, *destlen);
uint32_t cc;
- if (destlen == srclen) {
+ if (*destlen == *srclen) {
cc = 0;
- } else if (destlen < srclen) {
+ } else if (*destlen < *srclen) {
cc = 1;
} else {
cc = 2;
}
- if (srclen > destlen) {
- srclen = destlen;
- }
+ /* Copy the src array */
+ fast_memmove(env, *dest, *src, len, ra);
+ *src += len;
+ *srclen -= len;
+ *dest += len;
+ *destlen -= len;
- for (; destlen && srclen; src++, dest++, destlen--, srclen--) {
- v = cpu_ldub_data_ra(env, src, ra);
- cpu_stb_data_ra(env, dest, v, ra);
- }
+ /* Pad the remaining area */
+ fast_memset(env, *dest, pad, *destlen, ra);
+ *dest += *destlen;
+ *destlen = 0;
- for (; destlen; dest++, destlen--) {
- cpu_stb_data_ra(env, dest, pad, ra);
- }
+ return cc;
+}
- env->regs[r1 + 1] = destlen;
- /* can't use srclen here, we trunc'ed it */
- env->regs[r2 + 1] -= src - env->regs[r2];
+/* move long */
+uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
+{
+ uintptr_t ra = GETPC();
+ uint64_t destlen = env->regs[r1 + 1] & 0xffffff;
+ uint64_t dest = get_address(env, r1);
+ uint64_t srclen = env->regs[r2 + 1] & 0xffffff;
+ uint64_t src = get_address(env, r2);
+ uint8_t pad = env->regs[r2 + 1] >> 24;
+ uint32_t cc;
+
+ cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, ra);
+
+ env->regs[r1 + 1] = deposit64(env->regs[r1 + 1], 0, 24, destlen);
+ env->regs[r2 + 1] = deposit64(env->regs[r2 + 1], 0, 24, srclen);
set_address(env, r1, dest);
set_address(env, r2, src);
return cc;
}
-/* move long extended another memcopy insn with more bells and whistles */
+/* move long extended */
uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint32_t r3)
{
@@ -627,34 +638,13 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint64_t dest = get_address(env, r1);
uint64_t srclen = get_length(env, r3 + 1);
uint64_t src = get_address(env, r3);
- uint8_t pad = a2 & 0xff;
- uint8_t v;
+ uint8_t pad = a2;
uint32_t cc;
- if (destlen == srclen) {
- cc = 0;
- } else if (destlen < srclen) {
- cc = 1;
- } else {
- cc = 2;
- }
-
- if (srclen > destlen) {
- srclen = destlen;
- }
-
- for (; destlen && srclen; src++, dest++, destlen--, srclen--) {
- v = cpu_ldub_data_ra(env, src, ra);
- cpu_stb_data_ra(env, dest, v, ra);
- }
-
- for (; destlen; dest++, destlen--) {
- cpu_stb_data_ra(env, dest, pad, ra);
- }
+ cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, ra);
- set_length(env, r1 + 1 , destlen);
- /* can't use srclen here, we trunc'ed it */
- set_length(env, r3 + 1, env->regs[r3 + 1] - src - env->regs[r3]);
+ set_length(env, r1 + 1, destlen);
+ set_length(env, r3 + 1, srclen);
set_address(env, r1, dest);
set_address(env, r3, src);
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 999d716..729d25d 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -2981,22 +2981,42 @@ static ExitStatus op_mvcin(DisasContext *s, DisasOps *o)
static ExitStatus op_mvcl(DisasContext *s, DisasOps *o)
{
- TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
- TCGv_i32 r2 = tcg_const_i32(get_field(s->fields, r2));
- gen_helper_mvcl(cc_op, cpu_env, r1, r2);
- tcg_temp_free_i32(r1);
- tcg_temp_free_i32(r2);
+ int r1 = get_field(s->fields, r1);
+ int r2 = get_field(s->fields, r2);
+ TCGv_i32 t1, t2;
+
+ /* r1 and r2 must be even. */
+ if (r1 & 1 || r2 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t2 = tcg_const_i32(r2);
+ gen_helper_mvcl(cc_op, cpu_env, t1, t2);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t2);
set_cc_static(s);
return NO_EXIT;
}
static ExitStatus op_mvcle(DisasContext *s, DisasOps *o)
{
- TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
- TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
- gen_helper_mvcle(cc_op, cpu_env, r1, o->in2, r3);
- tcg_temp_free_i32(r1);
- tcg_temp_free_i32(r3);
+ int r1 = get_field(s->fields, r1);
+ int r3 = get_field(s->fields, r3);
+ TCGv_i32 t1, t3;
+
+ /* r1 and r3 must be even. */
+ if (r1 & 1 || r3 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t3 = tcg_const_i32(r3);
+ gen_helper_mvcle(cc_op, cpu_env, t1, o->in2, t3);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t3);
set_cc_static(s);
return NO_EXIT;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 60/69] target/s390x: implement COMPARE LOGICAL LONG UNICODE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (58 preceding siblings ...)
2017-06-04 17:34 ` [Qemu-devel] [PULL 59/69] target/s390x: improve MOVE LONG and MOVE LONG EXTENDED Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 61/69] target/s390x: implement MOVE " Richard Henderson
` (10 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
For that we need to make program_interrupt available to qemu-user.
Fortunately there is almost nothing to change as both kvm_enabled and
CONFIG_KVM evaluate to false in that case.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-22-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 76 ++++++++++++++++++++++++++++++++++++++--------
target/s390x/misc_helper.c | 4 +--
target/s390x/translate.c | 22 ++++++++++++++
5 files changed, 90 insertions(+), 15 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 546beec..509e3f3 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -24,6 +24,7 @@ DEF_HELPER_FLAGS_4(stam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(lam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_4(mvcle, i32, env, i32, i64, i32)
DEF_HELPER_4(clcle, i32, env, i32, i64, i32)
+DEF_HELPER_4(clclu, i32, env, i32, i64, i32)
DEF_HELPER_3(cegb, i64, env, s64, i32)
DEF_HELPER_3(cdgb, i64, env, s64, i32)
DEF_HELPER_3(cxgb, i64, env, s64, i32)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 1aa2b8b..c781a97 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -220,6 +220,8 @@
C(0x0f00, CLCL, RR_a, Z, 0, 0, 0, 0, clcl, 0)
/* COMPARE LOGICAL LONG EXTENDED */
C(0xa900, CLCLE, RS_a, Z, 0, a2, 0, 0, clcle, 0)
+/* COMPARE LOGICAL LONG UNICODE */
+ C(0xeb8f, CLCLU, RSY_a, E2, 0, a2, 0, 0, clclu, 0)
/* COMPARE LOGICAL CHARACTERS UNDER MASK */
C(0xbd00, CLM, RS_b, Z, r1_o, a2, 0, 0, clm, 0)
C(0xeb21, CLMY, RSY_b, LD, r1_o, a2, 0, 0, clm, 0)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index cb0ec3e..59992fa 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -67,6 +67,32 @@ static inline uint32_t adj_len_to_page(uint32_t len, uint64_t addr)
return len;
}
+/* Trigger a SPECIFICATION exception if an address or a length is not
+ naturally aligned. */
+static inline void check_alignment(CPUS390XState *env, uint64_t v,
+ int wordsize, uintptr_t ra)
+{
+ if (v % wordsize) {
+ CPUState *cs = CPU(s390_env_get_cpu(env));
+ cpu_restore_state(cs, ra);
+ program_interrupt(env, PGM_SPECIFICATION, 6);
+ }
+}
+
+/* Load a value from memory according to its size. */
+static inline uint64_t cpu_ldusize_data_ra(CPUS390XState *env, uint64_t addr,
+ int wordsize, uintptr_t ra)
+{
+ switch (wordsize) {
+ case 1:
+ return cpu_ldub_data_ra(env, addr, ra);
+ case 2:
+ return cpu_lduw_data_ra(env, addr, ra);
+ default:
+ abort();
+ }
+}
+
static void fast_memset(CPUS390XState *env, uint64_t dest, uint8_t byte,
uint32_t l, uintptr_t ra)
{
@@ -655,12 +681,14 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
static inline uint32_t do_clcl(CPUS390XState *env,
uint64_t *src1, uint64_t *src1len,
uint64_t *src3, uint64_t *src3len,
- uint8_t pad, uint64_t limit,
- uintptr_t ra)
+ uint16_t pad, uint64_t limit,
+ int wordsize, uintptr_t ra)
{
uint64_t len = MAX(*src1len, *src3len);
uint32_t cc = 0;
+ check_alignment(env, *src1len | *src3len, wordsize, ra);
+
if (!len) {
return cc;
}
@@ -672,15 +700,15 @@ static inline uint32_t do_clcl(CPUS390XState *env,
cc = 3;
}
- for (; len; len--) {
- uint8_t v1 = pad;
- uint8_t v3 = pad;
+ for (; len; len -= wordsize) {
+ uint16_t v1 = pad;
+ uint16_t v3 = pad;
if (*src1len) {
- v1 = cpu_ldub_data_ra(env, *src1, ra);
+ v1 = cpu_ldusize_data_ra(env, *src1, wordsize, ra);
}
if (*src3len) {
- v3 = cpu_ldub_data_ra(env, *src3, ra);
+ v3 = cpu_ldusize_data_ra(env, *src3, wordsize, ra);
}
if (v1 != v3) {
@@ -689,12 +717,12 @@ static inline uint32_t do_clcl(CPUS390XState *env,
}
if (*src1len) {
- *src1 += 1;
- *src1len -= 1;
+ *src1 += wordsize;
+ *src1len -= wordsize;
}
if (*src3len) {
- *src3 += 1;
- *src3len -= 1;
+ *src3 += wordsize;
+ *src3len -= wordsize;
}
}
@@ -713,7 +741,7 @@ uint32_t HELPER(clcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
uint8_t pad = env->regs[r2 + 1] >> 24;
uint32_t cc;
- cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, -1, ra);
+ cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, -1, 1, ra);
env->regs[r1 + 1] = deposit64(env->regs[r1 + 1], 0, 24, src1len);
env->regs[r2 + 1] = deposit64(env->regs[r2 + 1], 0, 24, src3len);
@@ -735,7 +763,29 @@ uint32_t HELPER(clcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint8_t pad = a2;
uint32_t cc;
- cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, 0x2000, ra);
+ cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, 0x2000, 1, ra);
+
+ set_length(env, r1 + 1, src1len);
+ set_length(env, r3 + 1, src3len);
+ set_address(env, r1, src1);
+ set_address(env, r3, src3);
+
+ return cc;
+}
+
+/* compare logical long unicode memcompare insn with padding */
+uint32_t HELPER(clclu)(CPUS390XState *env, uint32_t r1, uint64_t a2,
+ uint32_t r3)
+{
+ uintptr_t ra = GETPC();
+ uint64_t src1len = get_length(env, r1 + 1);
+ uint64_t src1 = get_address(env, r1);
+ uint64_t src3len = get_length(env, r3 + 1);
+ uint64_t src3 = get_address(env, r3);
+ uint16_t pad = a2;
+ uint32_t cc = 0;
+
+ cc = do_clcl(env, &src1, &src1len, &src3, &src3len, pad, 0x1000, 2, ra);
set_length(env, r1 + 1, src1len);
set_length(env, r3 + 1, src3len);
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index 1b9f448..edcdf17 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -80,8 +80,6 @@ void HELPER(exception)(CPUS390XState *env, uint32_t excp)
cpu_loop_exit(cs);
}
-#ifndef CONFIG_USER_ONLY
-
void program_interrupt(CPUS390XState *env, uint32_t code, int ilen)
{
S390CPU *cpu = s390_env_get_cpu(env);
@@ -108,6 +106,8 @@ void program_interrupt(CPUS390XState *env, uint32_t code, int ilen)
}
}
+#ifndef CONFIG_USER_ONLY
+
/* SCLP service call */
uint32_t HELPER(servc)(CPUS390XState *env, uint64_t r1, uint64_t r2)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 729d25d..892949a 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -1200,6 +1200,7 @@ typedef enum DisasFacility {
FAC_ILA, /* interlocked access facility 1 */
FAC_LPP, /* load-program-parameter */
FAC_DAT_ENH, /* DAT-enhancement */
+ FAC_E2, /* extended-translation facility 2 */
} DisasFacility;
struct DisasInsn {
@@ -1957,6 +1958,27 @@ static ExitStatus op_clcle(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_clclu(DisasContext *s, DisasOps *o)
+{
+ int r1 = get_field(s->fields, r1);
+ int r3 = get_field(s->fields, r3);
+ TCGv_i32 t1, t3;
+
+ /* r1 and r3 must be even. */
+ if (r1 & 1 || r3 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t3 = tcg_const_i32(r3);
+ gen_helper_clclu(cc_op, cpu_env, t1, o->in2, t3);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t3);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_clm(DisasContext *s, DisasOps *o)
{
TCGv_i32 m3 = tcg_const_i32(get_field(s->fields, m3));
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 61/69] target/s390x: implement MOVE LONG UNICODE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (59 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 60/69] target/s390x: implement COMPARE LOGICAL LONG UNICODE Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 62/69] target/s390x: implement PACK ASCII Richard Henderson
` (9 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-23-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 47 ++++++++++++++++++++++++++++++++++++++++------
target/s390x/translate.c | 21 +++++++++++++++++++++
4 files changed, 65 insertions(+), 6 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 509e3f3..5811911 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -23,6 +23,7 @@ DEF_HELPER_4(ex, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(stam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_FLAGS_4(lam, TCG_CALL_NO_WG, void, env, i32, i64, i32)
DEF_HELPER_4(mvcle, i32, env, i32, i64, i32)
+DEF_HELPER_4(mvclu, i32, env, i32, i64, i32)
DEF_HELPER_4(clcle, i32, env, i32, i64, i32)
DEF_HELPER_4(clclu, i32, env, i32, i64, i32)
DEF_HELPER_3(cegb, i64, env, s64, i32)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index c781a97..e3b7b78 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -582,6 +582,8 @@
C(0x0e00, MVCL, RR_a, Z, 0, 0, 0, 0, mvcl, 0)
/* MOVE LONG EXTENDED */
C(0xa800, MVCLE, RS_a, Z, 0, a2, 0, 0, mvcle, 0)
+/* MOVE LONG UNICODE */
+ C(0xeb8e, MVCLU, RSY_a, E2, 0, a2, 0, 0, mvclu, 0)
/* MOVE NUMERICS */
C(0xd100, MVN, SS_a, Z, la1, a2, 0, 0, mvn, 0)
/* MOVE PAGE */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 59992fa..a2d65cf 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -606,7 +606,7 @@ void HELPER(stam)(CPUS390XState *env, uint32_t r1, uint64_t a2, uint32_t r3)
static inline uint32_t do_mvcl(CPUS390XState *env,
uint64_t *dest, uint64_t *destlen,
uint64_t *src, uint64_t *srclen,
- uint8_t pad, uintptr_t ra)
+ uint16_t pad, int wordsize, uintptr_t ra)
{
uint64_t len = MIN(*srclen, *destlen);
uint32_t cc;
@@ -627,9 +627,22 @@ static inline uint32_t do_mvcl(CPUS390XState *env,
*destlen -= len;
/* Pad the remaining area */
- fast_memset(env, *dest, pad, *destlen, ra);
- *dest += *destlen;
- *destlen = 0;
+ if (wordsize == 1) {
+ fast_memset(env, *dest, pad, *destlen, ra);
+ *dest += *destlen;
+ *destlen = 0;
+ } else {
+ /* If remaining length is odd, pad with odd byte first. */
+ if (*destlen & 1) {
+ cpu_stb_data_ra(env, *dest, pad & 0xff, ra);
+ *dest += 1;
+ *destlen -= 1;
+ }
+ /* The remaining length is even, pad using words. */
+ for (; *destlen; *dest += 2, *destlen -= 2) {
+ cpu_stw_data_ra(env, *dest, pad, ra);
+ }
+ }
return cc;
}
@@ -645,7 +658,7 @@ uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
uint8_t pad = env->regs[r2 + 1] >> 24;
uint32_t cc;
- cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, ra);
+ cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, 1, ra);
env->regs[r1 + 1] = deposit64(env->regs[r1 + 1], 0, 24, destlen);
env->regs[r2 + 1] = deposit64(env->regs[r2 + 1], 0, 24, srclen);
@@ -667,7 +680,29 @@ uint32_t HELPER(mvcle)(CPUS390XState *env, uint32_t r1, uint64_t a2,
uint8_t pad = a2;
uint32_t cc;
- cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, ra);
+ cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, 1, ra);
+
+ set_length(env, r1 + 1, destlen);
+ set_length(env, r3 + 1, srclen);
+ set_address(env, r1, dest);
+ set_address(env, r3, src);
+
+ return cc;
+}
+
+/* move long unicode */
+uint32_t HELPER(mvclu)(CPUS390XState *env, uint32_t r1, uint64_t a2,
+ uint32_t r3)
+{
+ uintptr_t ra = GETPC();
+ uint64_t destlen = get_length(env, r1 + 1);
+ uint64_t dest = get_address(env, r1);
+ uint64_t srclen = get_length(env, r3 + 1);
+ uint64_t src = get_address(env, r3);
+ uint16_t pad = a2;
+ uint32_t cc;
+
+ cc = do_mvcl(env, &dest, &destlen, &src, &srclen, pad, 2, ra);
set_length(env, r1 + 1, destlen);
set_length(env, r3 + 1, srclen);
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 892949a..b160a0c 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3043,6 +3043,27 @@ static ExitStatus op_mvcle(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_mvclu(DisasContext *s, DisasOps *o)
+{
+ int r1 = get_field(s->fields, r1);
+ int r3 = get_field(s->fields, r3);
+ TCGv_i32 t1, t3;
+
+ /* r1 and r3 must be even. */
+ if (r1 & 1 || r3 & 1) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+
+ t1 = tcg_const_i32(r1);
+ t3 = tcg_const_i32(r3);
+ gen_helper_mvclu(cc_op, cpu_env, t1, o->in2, t3);
+ tcg_temp_free_i32(t1);
+ tcg_temp_free_i32(t3);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
#ifndef CONFIG_USER_ONLY
static ExitStatus op_mvcp(DisasContext *s, DisasOps *o)
{
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 62/69] target/s390x: implement PACK ASCII
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (60 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 61/69] target/s390x: implement MOVE " Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 63/69] target/s390x: implement PACK UNICODE Richard Henderson
` (8 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-24-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 35 +++++++++++++++++++++++++++++++++++
target/s390x/translate.c | 16 ++++++++++++++++
4 files changed, 54 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 5811911..7898064 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -83,6 +83,7 @@ DEF_HELPER_FLAGS_2(sqdb, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_3(sqxb, TCG_CALL_NO_WG, i64, env, i64, i64)
DEF_HELPER_FLAGS_1(cvd, TCG_CALL_NO_RWG_SE, i64, s32)
DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_WG, void, env, i32, i64, i64)
+DEF_HELPER_FLAGS_4(pka, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index e3b7b78..41431af 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -667,6 +667,8 @@
/* Really format SS_b, but we pack both lengths into one argument
for the helper call, so we might as well leave one 8-bit field. */
C(0xf200, PACK, SS_a, Z, la1, a2, 0, 0, pack, 0)
+/* PACK ASCII */
+ C(0xe900, PKA, SS_f, E2, la1, a2, 0, 0, pka, 0)
/* PREFETCH */
/* Implemented as nops of course. */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index a2d65cf..425d4b6 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -914,6 +914,41 @@ void HELPER(pack)(CPUS390XState *env, uint32_t len, uint64_t dest, uint64_t src)
}
}
+void HELPER(pka)(CPUS390XState *env, uint64_t dest, uint64_t src,
+ uint32_t srclen)
+{
+ uintptr_t ra = GETPC();
+ int i;
+ /* The destination operand is always 16 bytes long. */
+ const int destlen = 16;
+
+ /* The operands are processed from right to left. */
+ src += srclen - 1;
+ dest += destlen - 1;
+
+ for (i = 0; i < destlen; i++) {
+ uint8_t b = 0;
+
+ /* Start with a positive sign */
+ if (i == 0) {
+ b = 0xc;
+ } else if (srclen > 1) {
+ b = cpu_ldub_data_ra(env, src, ra) & 0x0f;
+ src--;
+ srclen--;
+ }
+
+ if (srclen > 1) {
+ b |= cpu_ldub_data_ra(env, src, ra) << 4;
+ src--;
+ srclen--;
+ }
+
+ cpu_stb_data_ra(env, dest, b, ra);
+ dest--;
+ }
+}
+
void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint64_t src)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index b160a0c..5093995 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3301,6 +3301,22 @@ static ExitStatus op_pack(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_pka(DisasContext *s, DisasOps *o)
+{
+ int l2 = get_field(s->fields, l2) + 1;
+ TCGv_i32 l;
+
+ /* The length must not exceed 32 bytes. */
+ if (l2 > 32) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+ l = tcg_const_i32(l2);
+ gen_helper_pka(cpu_env, o->addr1, o->in2, l);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_popcnt(DisasContext *s, DisasOps *o)
{
gen_helper_popcnt(o->out, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 63/69] target/s390x: implement PACK UNICODE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (61 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 62/69] target/s390x: implement PACK ASCII Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 64/69] target/s390x: implement UNPACK ASCII Richard Henderson
` (7 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Use a common helper with PACK ASCII as the differences are limited to
the stride of the source operand.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-25-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 30 +++++++++++++++++++++---------
target/s390x/translate.c | 16 ++++++++++++++++
4 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 7898064..5b61a0d 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -84,6 +84,7 @@ DEF_HELPER_FLAGS_3(sqxb, TCG_CALL_NO_WG, i64, env, i64, i64)
DEF_HELPER_FLAGS_1(cvd, TCG_CALL_NO_RWG_SE, i64, s32)
DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(pka, TCG_CALL_NO_WG, void, env, i64, i64, i32)
+DEF_HELPER_FLAGS_4(pku, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 41431af..16f788c 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -669,6 +669,8 @@
C(0xf200, PACK, SS_a, Z, la1, a2, 0, 0, pack, 0)
/* PACK ASCII */
C(0xe900, PKA, SS_f, E2, la1, a2, 0, 0, pka, 0)
+/* PACK UNICODE */
+ C(0xe100, PKU, SS_f, E2, la1, a2, 0, 0, pku, 0)
/* PREFETCH */
/* Implemented as nops of course. */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 425d4b6..d827a12 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -914,10 +914,9 @@ void HELPER(pack)(CPUS390XState *env, uint32_t len, uint64_t dest, uint64_t src)
}
}
-void HELPER(pka)(CPUS390XState *env, uint64_t dest, uint64_t src,
- uint32_t srclen)
+static inline void do_pkau(CPUS390XState *env, uint64_t dest, uint64_t src,
+ uint32_t srclen, int ssize, uintptr_t ra)
{
- uintptr_t ra = GETPC();
int i;
/* The destination operand is always 16 bytes long. */
const int destlen = 16;
@@ -932,16 +931,16 @@ void HELPER(pka)(CPUS390XState *env, uint64_t dest, uint64_t src,
/* Start with a positive sign */
if (i == 0) {
b = 0xc;
- } else if (srclen > 1) {
+ } else if (srclen > ssize) {
b = cpu_ldub_data_ra(env, src, ra) & 0x0f;
- src--;
- srclen--;
+ src -= ssize;
+ srclen -= ssize;
}
- if (srclen > 1) {
+ if (srclen > ssize) {
b |= cpu_ldub_data_ra(env, src, ra) << 4;
- src--;
- srclen--;
+ src -= ssize;
+ srclen -= ssize;
}
cpu_stb_data_ra(env, dest, b, ra);
@@ -949,6 +948,19 @@ void HELPER(pka)(CPUS390XState *env, uint64_t dest, uint64_t src,
}
}
+
+void HELPER(pka)(CPUS390XState *env, uint64_t dest, uint64_t src,
+ uint32_t srclen)
+{
+ do_pkau(env, dest, src, srclen, 1, GETPC());
+}
+
+void HELPER(pku)(CPUS390XState *env, uint64_t dest, uint64_t src,
+ uint32_t srclen)
+{
+ do_pkau(env, dest, src, srclen, 2, GETPC());
+}
+
void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
uint64_t src)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 5093995..d8b0515 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3317,6 +3317,22 @@ static ExitStatus op_pka(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_pku(DisasContext *s, DisasOps *o)
+{
+ int l2 = get_field(s->fields, l2) + 1;
+ TCGv_i32 l;
+
+ /* The length must be even and should not exceed 64 bytes. */
+ if ((l2 & 1) || (l2 > 64)) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+ l = tcg_const_i32(l2);
+ gen_helper_pku(cpu_env, o->addr1, o->in2, l);
+ tcg_temp_free_i32(l);
+ return NO_EXIT;
+}
+
static ExitStatus op_popcnt(DisasContext *s, DisasOps *o)
{
gen_helper_popcnt(o->out, o->in2);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 64/69] target/s390x: implement UNPACK ASCII
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (62 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 63/69] target/s390x: implement PACK UNICODE Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 65/69] target/s390x: implement UNPACK UNICODE Richard Henderson
` (6 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-26-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++
target/s390x/translate.c | 17 ++++++++++++++++
4 files changed, 71 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 5b61a0d..42c3de6 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -86,6 +86,7 @@ DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(pka, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(pku, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
+DEF_HELPER_FLAGS_4(unpka, TCG_CALL_NO_WG, i32, env, i64, i32, i64)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
DEF_HELPER_4(trt, i32, env, i32, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 16f788c..33434a3 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -875,6 +875,8 @@
/* Really format SS_b, but we pack both lengths into one argument
for the helper call, so we might as well leave one 8-bit field. */
C(0xf300, UNPK, SS_a, Z, la1, a2, 0, 0, unpk, 0)
+/* UNPACK ASCII */
+ C(0xea00, UNPKA, SS_a, E2, la1, a2, 0, 0, unpka, 0)
#ifndef CONFIG_USER_ONLY
/* COMPARE AND SWAP AND PURGE */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index d827a12..1c5f29c 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1008,6 +1008,57 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
}
}
+uint32_t HELPER(unpka)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
+ uint64_t src)
+{
+ uintptr_t ra = GETPC();
+ int i;
+ uint32_t cc;
+ uint8_t b;
+ /* The source operand is always 16 bytes long. */
+ const int srclen = 16;
+
+ /* The operands are processed from right to left. */
+ src += srclen - 1;
+ dest += destlen - 1;
+
+ /* Check for the sign. */
+ b = cpu_ldub_data_ra(env, src, ra);
+ src--;
+ switch (b & 0xf) {
+ case 0xa:
+ case 0xc:
+ case 0xe ... 0xf:
+ cc = 0; /* plus */
+ break;
+ case 0xb:
+ case 0xd:
+ cc = 1; /* minus */
+ break;
+ default:
+ case 0x0 ... 0x9:
+ cc = 3; /* invalid */
+ break;
+ }
+
+ /* Now pad every nibble with 0x30, advancing one nibble at a time. */
+ for (i = 0; i < destlen; i++) {
+ if (i == 31) {
+ /* If length is 32 bytes, the leftmost byte is 0. */
+ b = 0;
+ } else if (i % 2) {
+ b = cpu_ldub_data_ra(env, src, ra);
+ src--;
+ } else {
+ b >>= 4;
+ }
+ cpu_stb_data_ra(env, dest, 0x30 + (b & 0xf), ra);
+ dest--;
+ }
+
+ return cc;
+}
+
static uint32_t do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
uint64_t trans, uintptr_t ra)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index d8b0515..2ff6665 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4357,6 +4357,23 @@ static ExitStatus op_unpk(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_unpka(DisasContext *s, DisasOps *o)
+{
+ int l1 = get_field(s->fields, l1) + 1;
+ TCGv_i32 l;
+
+ /* The length must not exceed 32 bytes. */
+ if (l1 > 32) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+ l = tcg_const_i32(l1);
+ gen_helper_unpka(cc_op, cpu_env, o->addr1, l, o->in2);
+ tcg_temp_free_i32(l);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_xc(DisasContext *s, DisasOps *o)
{
int d1 = get_field(s->fields, d1);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 65/69] target/s390x: implement UNPACK UNICODE
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (63 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 64/69] target/s390x: implement UNPACK ASCII Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 66/69] target/s390x: implement TEST DECIMAL Richard Henderson
` (5 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-27-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 2 ++
target/s390x/mem_helper.c | 49 ++++++++++++++++++++++++++++++++++++----------
target/s390x/translate.c | 18 +++++++++++++++++
4 files changed, 60 insertions(+), 10 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 42c3de6..dc85a14 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -87,6 +87,7 @@ DEF_HELPER_FLAGS_4(pka, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(pku, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(unpka, TCG_CALL_NO_WG, i32, env, i64, i32, i64)
+DEF_HELPER_FLAGS_4(unpku, TCG_CALL_NO_WG, i32, env, i64, i32, i64)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
DEF_HELPER_4(trt, i32, env, i32, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 33434a3..683f91b 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -877,6 +877,8 @@
C(0xf300, UNPK, SS_a, Z, la1, a2, 0, 0, unpk, 0)
/* UNPACK ASCII */
C(0xea00, UNPKA, SS_a, E2, la1, a2, 0, 0, unpka, 0)
+/* UNPACK UNICODE */
+ C(0xe200, UNPKU, SS_a, E2, la1, a2, 0, 0, unpku, 0)
#ifndef CONFIG_USER_ONLY
/* COMPARE AND SWAP AND PURGE */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 1c5f29c..5cb1a8a 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -93,6 +93,23 @@ static inline uint64_t cpu_ldusize_data_ra(CPUS390XState *env, uint64_t addr,
}
}
+/* Store a to memory according to its size. */
+static inline void cpu_stsize_data_ra(CPUS390XState *env, uint64_t addr,
+ uint64_t value, int wordsize,
+ uintptr_t ra)
+{
+ switch (wordsize) {
+ case 1:
+ cpu_stb_data_ra(env, addr, value, ra);
+ break;
+ case 2:
+ cpu_stw_data_ra(env, addr, value, ra);
+ break;
+ default:
+ abort();
+ }
+}
+
static void fast_memset(CPUS390XState *env, uint64_t dest, uint8_t byte,
uint32_t l, uintptr_t ra)
{
@@ -1008,10 +1025,10 @@ void HELPER(unpk)(CPUS390XState *env, uint32_t len, uint64_t dest,
}
}
-uint32_t HELPER(unpka)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
- uint64_t src)
+static inline uint32_t do_unpkau(CPUS390XState *env, uint64_t dest,
+ uint32_t destlen, int dsize, uint64_t src,
+ uintptr_t ra)
{
- uintptr_t ra = GETPC();
int i;
uint32_t cc;
uint8_t b;
@@ -1020,7 +1037,7 @@ uint32_t HELPER(unpka)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
/* The operands are processed from right to left. */
src += srclen - 1;
- dest += destlen - 1;
+ dest += destlen - dsize;
/* Check for the sign. */
b = cpu_ldub_data_ra(env, src, ra);
@@ -1042,23 +1059,35 @@ uint32_t HELPER(unpka)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
}
/* Now pad every nibble with 0x30, advancing one nibble at a time. */
- for (i = 0; i < destlen; i++) {
- if (i == 31) {
- /* If length is 32 bytes, the leftmost byte is 0. */
+ for (i = 0; i < destlen; i += dsize) {
+ if (i == (31 * dsize)) {
+ /* If length is 32/64 bytes, the leftmost byte is 0. */
b = 0;
- } else if (i % 2) {
+ } else if (i % (2 * dsize)) {
b = cpu_ldub_data_ra(env, src, ra);
src--;
} else {
b >>= 4;
}
- cpu_stb_data_ra(env, dest, 0x30 + (b & 0xf), ra);
- dest--;
+ cpu_stsize_data_ra(env, dest, 0x30 + (b & 0xf), dsize, ra);
+ dest -= dsize;
}
return cc;
}
+uint32_t HELPER(unpka)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
+ uint64_t src)
+{
+ return do_unpkau(env, dest, destlen, 1, src, GETPC());
+}
+
+uint32_t HELPER(unpku)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
+ uint64_t src)
+{
+ return do_unpkau(env, dest, destlen, 2, src, GETPC());
+}
+
static uint32_t do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
uint64_t trans, uintptr_t ra)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 2ff6665..747d4eb 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4374,6 +4374,24 @@ static ExitStatus op_unpka(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_unpku(DisasContext *s, DisasOps *o)
+{
+ int l1 = get_field(s->fields, l1) + 1;
+ TCGv_i32 l;
+
+ /* The length must be even and should not exceed 64 bytes. */
+ if ((l1 & 1) || (l1 > 64)) {
+ gen_program_exception(s, PGM_SPECIFICATION);
+ return EXIT_NORETURN;
+ }
+ l = tcg_const_i32(l1);
+ gen_helper_unpku(cc_op, cpu_env, o->addr1, l, o->in2);
+ tcg_temp_free_i32(l);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
+
static ExitStatus op_xc(DisasContext *s, DisasOps *o)
{
int d1 = get_field(s->fields, d1);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 66/69] target/s390x: implement TEST DECIMAL
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (64 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 65/69] target/s390x: implement UNPACK UNICODE Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 67/69] target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO Richard Henderson
` (4 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-28-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 3 +++
target/s390x/mem_helper.c | 23 +++++++++++++++++++++++
target/s390x/translate.c | 9 +++++++++
4 files changed, 36 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index dc85a14..c043be6 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -88,6 +88,7 @@ DEF_HELPER_FLAGS_4(pku, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(unpk, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(unpka, TCG_CALL_NO_WG, i32, env, i64, i32, i64)
DEF_HELPER_FLAGS_4(unpku, TCG_CALL_NO_WG, i32, env, i64, i32, i64)
+DEF_HELPER_FLAGS_3(tp, TCG_CALL_NO_WG, i32, env, i64, i32)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
DEF_HELPER_4(trt, i32, env, i32, i64, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 683f91b..7f554ab 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -856,6 +856,9 @@
C(0xed11, TCDB, RXE, Z, f1_o, a2, 0, 0, tcdb, 0)
C(0xed12, TCXB, RXE, Z, x1_o, a2, 0, 0, tcxb, 0)
+/* TEST DECIMAL */
+ C(0xebc0, TP, RSL, E2, la1, 0, 0, 0, tp, 0)
+
/* TEST UNDER MASK */
C(0x9100, TM, SI, Z, m1_8u, i2_8u, 0, 0, 0, tm32)
C(0xeb51, TMY, SIY, LD, m1_8u, i2_8u, 0, 0, 0, tm32)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index 5cb1a8a..a9297c1 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1088,6 +1088,29 @@ uint32_t HELPER(unpku)(CPUS390XState *env, uint64_t dest, uint32_t destlen,
return do_unpkau(env, dest, destlen, 2, src, GETPC());
}
+uint32_t HELPER(tp)(CPUS390XState *env, uint64_t dest, uint32_t destlen)
+{
+ uintptr_t ra = GETPC();
+ uint32_t cc = 0;
+ int i;
+
+ for (i = 0; i < destlen; i++) {
+ uint8_t b = cpu_ldub_data_ra(env, dest + i, ra);
+ /* digit */
+ cc |= (b & 0xf0) > 0x90 ? 2 : 0;
+
+ if (i == (destlen - 1)) {
+ /* sign */
+ cc |= (b & 0xf) < 0xa ? 1 : 0;
+ } else {
+ /* digit */
+ cc |= (b & 0xf) > 0x9 ? 2 : 0;
+ }
+ }
+
+ return cc;
+}
+
static uint32_t do_helper_tr(CPUS390XState *env, uint32_t len, uint64_t array,
uint64_t trans, uintptr_t ra)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 747d4eb..a7c564f 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4313,6 +4313,15 @@ static ExitStatus op_tprot(DisasContext *s, DisasOps *o)
#endif
+static ExitStatus op_tp(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 l1 = tcg_const_i32(get_field(s->fields, l1) + 1);
+ gen_helper_tp(cc_op, cpu_env, o->addr1, l1);
+ tcg_temp_free_i32(l1);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_tr(DisasContext *s, DisasOps *o)
{
TCGv_i32 l = tcg_const_i32(get_field(s->fields, l1));
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 67/69] target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (65 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 66/69] target/s390x: implement TEST DECIMAL Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 68/69] target/s390x: mark ETF2 and ETF2-ENH facilities as available Richard Henderson
` (3 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-29-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.h | 1 +
target/s390x/insn-data.def | 9 +++++++++
target/s390x/mem_helper.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
target/s390x/translate.c | 30 ++++++++++++++++++++++++++++++
4 files changed, 85 insertions(+)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index c043be6..e139611 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -92,6 +92,7 @@ DEF_HELPER_FLAGS_3(tp, TCG_CALL_NO_WG, i32, env, i64, i32)
DEF_HELPER_FLAGS_4(tr, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_4(tre, i64, env, i64, i64, i64)
DEF_HELPER_4(trt, i32, env, i32, i64, i64)
+DEF_HELPER_5(trXX, i32, env, i32, i32, i32, i32)
DEF_HELPER_4(cksm, i64, env, i64, i64, i64)
DEF_HELPER_FLAGS_5(calc_cc, TCG_CALL_NO_RWG_SE, i32, env, i32, i64, i64, i64)
DEF_HELPER_FLAGS_2(sfpc, TCG_CALL_NO_RWG, void, env, i64)
diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def
index 7f554ab..73dd05d 100644
--- a/target/s390x/insn-data.def
+++ b/target/s390x/insn-data.def
@@ -874,6 +874,15 @@
/* TRANSLATE EXTENDED */
C(0xb2a5, TRE, RRE, Z, 0, r2, r1_P, 0, tre, 0)
+/* TRANSLATE ONE TO ONE */
+ C(0xb993, TROO, RRF_c, E2, 0, 0, 0, 0, trXX, 0)
+/* TRANSLATE ONE TO TWO */
+ C(0xb992, TROT, RRF_c, E2, 0, 0, 0, 0, trXX, 0)
+/* TRANSLATE TWO TO ONE */
+ C(0xb991, TRTO, RRF_c, E2, 0, 0, 0, 0, trXX, 0)
+/* TRANSLATE TWO TO TWO */
+ C(0xb990, TRTT, RRF_c, E2, 0, 0, 0, 0, trXX, 0)
+
/* UNPACK */
/* Really format SS_b, but we pack both lengths into one argument
for the helper call, so we might as well leave one 8-bit field. */
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index a9297c1..6fb97fa 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -1196,6 +1196,51 @@ uint32_t HELPER(trt)(CPUS390XState *env, uint32_t len, uint64_t array,
return do_helper_trt(env, len, array, trans, GETPC());
}
+/* Translate one/two to one/two */
+uint32_t HELPER(trXX)(CPUS390XState *env, uint32_t r1, uint32_t r2,
+ uint32_t tst, uint32_t sizes)
+{
+ uintptr_t ra = GETPC();
+ int dsize = (sizes & 1) ? 1 : 2;
+ int ssize = (sizes & 2) ? 1 : 2;
+ uint64_t tbl = get_address(env, 1) & ~7;
+ uint64_t dst = get_address(env, r1);
+ uint64_t len = get_length(env, r1 + 1);
+ uint64_t src = get_address(env, r2);
+ uint32_t cc = 3;
+ int i;
+
+ check_alignment(env, len, ssize, ra);
+
+ /* Lest we fail to service interrupts in a timely manner, */
+ /* limit the amount of work we're willing to do. */
+ for (i = 0; i < 0x2000; i++) {
+ uint16_t sval = cpu_ldusize_data_ra(env, src, ssize, ra);
+ uint64_t tble = tbl + (sval * dsize);
+ uint16_t dval = cpu_ldusize_data_ra(env, tble, dsize, ra);
+ if (dval == tst) {
+ cc = 1;
+ break;
+ }
+ cpu_stsize_data_ra(env, dst, dval, dsize, ra);
+
+ len -= ssize;
+ src += ssize;
+ dst += dsize;
+
+ if (len == 0) {
+ cc = 0;
+ break;
+ }
+ }
+
+ set_address(env, r1, dst);
+ set_length(env, r1 + 1, len);
+ set_address(env, r2, src);
+
+ return cc;
+}
+
void HELPER(cdsg)(CPUS390XState *env, uint64_t addr,
uint32_t r1, uint32_t r3)
{
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index a7c564f..8702cc8 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -4348,6 +4348,36 @@ static ExitStatus op_trt(DisasContext *s, DisasOps *o)
return NO_EXIT;
}
+static ExitStatus op_trXX(DisasContext *s, DisasOps *o)
+{
+ TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
+ TCGv_i32 r2 = tcg_const_i32(get_field(s->fields, r2));
+ TCGv_i32 sizes = tcg_const_i32(s->insn->opc & 3);
+ TCGv_i32 tst = tcg_temp_new_i32();
+ int m3 = get_field(s->fields, m3);
+
+ /* XXX: the C bit in M3 should be considered as 0 when the
+ ETF2-enhancement facility is not installed. */
+ if (m3 & 1) {
+ tcg_gen_movi_i32(tst, -1);
+ } else {
+ tcg_gen_extrl_i64_i32(tst, regs[0]);
+ if (s->insn->opc & 3) {
+ tcg_gen_ext8u_i32(tst, tst);
+ } else {
+ tcg_gen_ext16u_i32(tst, tst);
+ }
+ }
+ gen_helper_trXX(cc_op, cpu_env, r1, r2, tst, sizes);
+
+ tcg_temp_free_i32(r1);
+ tcg_temp_free_i32(r2);
+ tcg_temp_free_i32(sizes);
+ tcg_temp_free_i32(tst);
+ set_cc_static(s);
+ return NO_EXIT;
+}
+
static ExitStatus op_ts(DisasContext *s, DisasOps *o)
{
TCGv_i32 t1 = tcg_const_i32(0xff);
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 68/69] target/s390x: mark ETF2 and ETF2-ENH facilities as available
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (66 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 67/69] target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 69/69] target/s390x: addressing exceptions are suppressing Richard Henderson
` (2 subsequent siblings)
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien
From: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170531220129.27724-30-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/cpu_models.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index e5e005a..fc3cb25 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -668,8 +668,10 @@ static void add_qemu_cpu_model_features(S390FeatBitmap fbm)
static const int feats[] = {
S390_FEAT_STFLE,
S390_FEAT_EXTENDED_IMMEDIATE,
+ S390_FEAT_EXTENDED_TRANSLATION_2,
S390_FEAT_LONG_DISPLACEMENT,
S390_FEAT_LONG_DISPLACEMENT_FAST,
+ S390_FEAT_ETF2_ENH,
S390_FEAT_STORE_CLOCK_FAST,
S390_FEAT_GENERAL_INSTRUCTIONS_EXT,
S390_FEAT_EXECUTE_EXT,
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [Qemu-devel] [PULL 69/69] target/s390x: addressing exceptions are suppressing
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (67 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 68/69] target/s390x: mark ETF2 and ETF2-ENH facilities as available Richard Henderson
@ 2017-06-04 17:35 ` Richard Henderson
2017-06-04 18:32 ` [Qemu-devel] [PULL 00/69] target/s390x tcg patches no-reply
2017-06-04 19:53 ` Aurelien Jarno
70 siblings, 0 replies; 73+ messages in thread
From: Richard Henderson @ 2017-06-04 17:35 UTC (permalink / raw)
To: qemu-devel; +Cc: peter.maydell, aurelien, David Hildenbrand
From: David Hildenbrand <david@redhat.com>
We have to make the address in the old PSW point at the next
instruction, as addressing exceptions are suppressing and not
nullifying.
I assume that there are a lot of other broken cases (as most instructions
we care about are suppressing) - all trigger_pgm_exception() specifying
and explicit number or ILEN_LATER look suspicious, however this is another
story that might require bigger changes (and I have to understand when
the address might already have been incremented first).
This is needed to make an upcoming kvm-unit-test work.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20170529121228.2789-1-david@redhat.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target/s390x/helper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/s390x/helper.c b/target/s390x/helper.c
index 291db72..a8d20c5 100644
--- a/target/s390x/helper.c
+++ b/target/s390x/helper.c
@@ -204,7 +204,7 @@ int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr orig_vaddr,
if (raddr > ram_size) {
DPRINTF("%s: raddr %" PRIx64 " > ram_size %" PRIx64 "\n", __func__,
(uint64_t)raddr, (uint64_t)ram_size);
- trigger_pgm_exception(env, PGM_ADDRESSING, ILEN_LATER);
+ trigger_pgm_exception(env, PGM_ADDRESSING, ILEN_LATER_INC);
return 1;
}
--
2.9.4
^ permalink raw reply related [flat|nested] 73+ messages in thread
* Re: [Qemu-devel] [PULL 00/69] target/s390x tcg patches
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (68 preceding siblings ...)
2017-06-04 17:35 ` [Qemu-devel] [PULL 69/69] target/s390x: addressing exceptions are suppressing Richard Henderson
@ 2017-06-04 18:32 ` no-reply
2017-06-04 19:54 ` Aurelien Jarno
2017-06-04 19:53 ` Aurelien Jarno
70 siblings, 1 reply; 73+ messages in thread
From: no-reply @ 2017-06-04 18:32 UTC (permalink / raw)
To: rth; +Cc: famz, qemu-devel, peter.maydell, aurelien
Hi,
This series failed build test on s390x host. Please find the details below.
Subject: [Qemu-devel] [PULL 00/69] target/s390x tcg patches
Message-id: 20170604173509.29684-1-rth@twiddle.net
Type: series
=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
echo "=== ENV ==="
env
echo "=== PACKAGES ==="
rpm -qa
echo "=== TEST BEGIN ==="
CC=$HOME/bin/cc
INSTALL=$PWD/install
BUILD=$PWD/build
echo -n "Using CC: "
realpath $CC
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL
make -j4
# XXX: we need reliable clean up
# make check -j4 V=1
make install
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
* [new tag] patchew/20170604173509.29684-1-rth@twiddle.net -> patchew/20170604173509.29684-1-rth@twiddle.net
Switched to a new branch 'test'
04d3fe7 target/s390x: addressing exceptions are suppressing
31ca2d7 target/s390x: mark ETF2 and ETF2-ENH facilities as available
7f47024 target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO
84c7d75 target/s390x: implement TEST DECIMAL
ab913d6 target/s390x: implement UNPACK UNICODE
b4e0468 target/s390x: implement UNPACK ASCII
a3b9e3a target/s390x: implement PACK UNICODE
2d0be54 target/s390x: implement PACK ASCII
b80da74 target/s390x: implement MOVE LONG UNICODE
564f3df target/s390x: implement COMPARE LOGICAL LONG UNICODE
7ca4326 target/s390x: improve MOVE LONG and MOVE LONG EXTENDED
a597e4e target/s390x: fix adj_len_to_page
431d52c target/s390x: implement COMPARE LOGICAL LONG
e4c2ac1 target/s390x: fix COMPARE LOGICAL LONG EXTENDED
8ab1d8d target/s390x: improve 24-bit and 31-bit lengths read/write
6ebe2f5 target/s390x: improve 24-bit and 31-bit addresses write
f05e866 target/s390x: improve 24-bit and 31-bit addresses read
74a2166 target/s390x: implement MOVE ZONES
ac0ded5 target/s390x: implement MOVE WITH OFFSET
516da67 target/s390x: implement MOVE NUMERICS
5cdb332 target/s390x: implement MOVE INVERSE
88387e0 target/s390x: implement COMPARE AND SIGNAL
8519ac6 target/s390x: implement STORE PAIR TO QUADWORD
b42184b target/s390x: implement LOAD PAIR FROM QUADWORD
d25298f target/s390x: implement PACK
f95e043 target/s390x: implement TEST ADDRESSING MODE
446a5a5 target/s390x: implement TEST AND SET
0b9e471 target/s390x: implement local-TLB-clearing in IPTE
49a1084 target/s390x: remove some Linux assumptions from IPTE
4ed0abd target/s390x: remove dead code in translate.c
62743de target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU
44ab40d target/s390x: Re-implement a few EXECUTE target insns directly
a444778 target/s390x: Implement EXECUTE via new TranslationBlock
789d118 target/s390x: End the TB after EXECUTE
2c9002a target/s390x: Save current ilen during translation
698b4d5 target/s390x: Implement CSPG
b931eeb target/s390x: Use atomic operations for COMPARE SWAP PURGE
16aa598 target/s390x: Fix EXECUTE with R1==0
cf551e7 target/s390x: Fix some helper_ex problems
6e9376c target/s390x: Use unwind data for helper_mvcs/mvcp
d365cdc target/s390x: Use unwind data for helper_lra
204d943 target/s390x: Use unwind data for helper_tprot
5c95770 target/s390x: Use unwind data for helper_testblock
73e146c target/s390x: Use unwind data for helper_stctl
35f7abe target/s390x: Use unwind data for helper_lctl
a23bea1 target/s390x: Use unwind data for helper_lctlg
4b24999 target/s390x: Use unwind data for helper_trt
34dad2a target/s390x: Use unwind data for helper_tre
6273bd0 target/s390x: Use unwind data for helper_tr
ff3d8f6 target/s390x: Use unwind data for helper_unpk
966077d target/s390x: Use unwind data for helper_cksm
e11819e target/s390x: Use unwind data for helper_clcle
39bfe85 target/s390x: Use unwind data for helper_mvcle
42a0837 target/s390x: Use unwind data for helper_mvcl
83dfff4 target/s390x: Use unwind data for helper_stam
539b4f2 target/s390x: Use unwind data for helper_lam
d2399bf target/s390x: Use unwind data for helper_mvst
b07bd93 target/s390x: Use unwind data for helper_mvpg
417f97e target/s390x: Use unwind data for helper_clst
f053ebc target/s390x: Use unwind data for helper_srst
9133189 target/s390x: Use unwind data for helper_clm
e55afe2 target/s390x: Use unwind data for helper_clc
5645eba target/s390x: Use unwind data for helper_mvc
ad3f6e9 target/s390x: Use unwind data for helper_xc
105c34c target/s390x: Use unwind data for helper_oc
c30649c target/s390x: Use unwind data for helper_nc
e4cc9ee target/s390x: Move helper_ex to end of file
b612c5f target/s390x: Use cpu_loop_exit_restore for tlb_fill
f7aadfa target/s390x: Add support for the TEST BLOCK instruction
=== OUTPUT BEGIN ===
=== ENV ===
XDG_SESSION_ID=82396
SHELL=/bin/sh
USER=fam
PATCHEW=/home/fam/patchew/patchew-cli -s http://patchew.org --nodebug
PATH=/usr/bin:/bin
PWD=/var/tmp/patchew-tester-tmp-9ddil10x/src
LANG=en_US.UTF-8
HOME=/home/fam
SHLVL=2
LOGNAME=fam
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1012/bus
XDG_RUNTIME_DIR=/run/user/1012
_=/usr/bin/env
=== PACKAGES ===
gpg-pubkey-873529b8-54e386ff
xz-libs-5.2.2-2.fc24.s390x
libxshmfence-1.2-3.fc24.s390x
giflib-4.1.6-15.fc24.s390x
trousers-lib-0.3.13-6.fc24.s390x
ncurses-base-6.0-6.20160709.fc25.noarch
gmp-6.1.1-1.fc25.s390x
libidn-1.33-1.fc25.s390x
slang-2.3.0-7.fc25.s390x
libsemanage-2.5-8.fc25.s390x
pkgconfig-0.29.1-1.fc25.s390x
alsa-lib-1.1.1-2.fc25.s390x
yum-metadata-parser-1.1.4-17.fc25.s390x
python3-slip-dbus-0.6.4-4.fc25.noarch
python2-cssselect-0.9.2-1.fc25.noarch
python-fedora-0.8.0-2.fc25.noarch
createrepo_c-libs-0.10.0-6.fc25.s390x
initscripts-9.69-1.fc25.s390x
wget-1.18-2.fc25.s390x
dhcp-client-4.3.5-1.fc25.s390x
parted-3.2-21.fc25.s390x
flex-2.6.0-3.fc25.s390x
colord-libs-1.3.4-1.fc25.s390x
python-osbs-client-0.33-3.fc25.noarch
perl-Pod-Simple-3.35-1.fc25.noarch
python2-simplejson-3.10.0-1.fc25.s390x
brltty-5.4-2.fc25.s390x
librados2-10.2.4-2.fc25.s390x
tcp_wrappers-7.6-83.fc25.s390x
libcephfs_jni1-10.2.4-2.fc25.s390x
nettle-devel-3.3-1.fc25.s390x
bzip2-devel-1.0.6-21.fc25.s390x
libuuid-2.28.2-2.fc25.s390x
pango-1.40.4-1.fc25.s390x
python3-dnf-1.1.10-6.fc25.noarch
cryptsetup-libs-1.7.4-1.fc25.s390x
texlive-kpathsea-doc-svn41139-33.fc25.1.noarch
netpbm-10.77.00-3.fc25.s390x
openssh-7.4p1-4.fc25.s390x
texlive-kpathsea-bin-svn40473-33.20160520.fc25.1.s390x
texlive-graphics-svn41015-33.fc25.1.noarch
texlive-dvipdfmx-def-svn40328-33.fc25.1.noarch
texlive-mfware-svn40768-33.fc25.1.noarch
texlive-texlive-scripts-svn41433-33.fc25.1.noarch
texlive-euro-svn22191.1.1-33.fc25.1.noarch
texlive-etex-svn37057.0-33.fc25.1.noarch
texlive-iftex-svn29654.0.2-33.fc25.1.noarch
texlive-palatino-svn31835.0-33.fc25.1.noarch
texlive-texlive-docindex-svn41430-33.fc25.1.noarch
texlive-xunicode-svn30466.0.981-33.fc25.1.noarch
texlive-koma-script-svn41508-33.fc25.1.noarch
texlive-pst-grad-svn15878.1.06-33.fc25.1.noarch
texlive-pst-blur-svn15878.2.0-33.fc25.1.noarch
texlive-jknapltx-svn19440.0-33.fc25.1.noarch
netpbm-progs-10.77.00-3.fc25.s390x
texinfo-6.1-4.fc25.s390x
openssl-devel-1.0.2k-1.fc25.s390x
python2-sssdconfig-1.15.2-1.fc25.noarch
gdk-pixbuf2-2.36.6-1.fc25.s390x
mesa-libEGL-13.0.4-3.fc25.s390x
pcre-cpp-8.40-6.fc25.s390x
pcre-utf16-8.40-6.fc25.s390x
glusterfs-extra-xlators-3.10.1-1.fc25.s390x
mesa-libGL-devel-13.0.4-3.fc25.s390x
nss-devel-3.29.3-1.1.fc25.s390x
libaio-0.3.110-6.fc24.s390x
libfontenc-1.1.3-3.fc24.s390x
lzo-2.08-8.fc24.s390x
isl-0.14-5.fc24.s390x
libXau-1.0.8-6.fc24.s390x
linux-atm-libs-2.5.1-14.fc24.s390x
libXext-1.3.3-4.fc24.s390x
libXxf86vm-1.1.4-3.fc24.s390x
bison-3.0.4-4.fc24.s390x
perl-srpm-macros-1-20.fc25.noarch
gawk-4.1.3-8.fc25.s390x
libwayland-client-1.12.0-1.fc25.s390x
perl-Exporter-5.72-366.fc25.noarch
perl-version-0.99.17-1.fc25.s390x
fftw-libs-double-3.3.5-3.fc25.s390x
libssh2-1.8.0-1.fc25.s390x
ModemManager-glib-1.6.4-1.fc25.s390x
newt-python3-0.52.19-2.fc25.s390x
python-munch-2.0.4-3.fc25.noarch
python-bugzilla-1.2.2-4.fc25.noarch
libedit-3.1-16.20160618cvs.fc25.s390x
python-pycurl-7.43.0-4.fc25.s390x
createrepo_c-0.10.0-6.fc25.s390x
device-mapper-multipath-libs-0.4.9-83.fc25.s390x
yum-3.4.3-510.fc25.noarch
dhcp-common-4.3.5-1.fc25.noarch
dracut-config-rescue-044-78.fc25.s390x
teamd-1.26-1.fc25.s390x
mozjs17-17.0.0-16.fc25.s390x
libselinux-2.5-13.fc25.s390x
libgo-devel-6.3.1-1.fc25.s390x
NetworkManager-libnm-1.4.4-3.fc25.s390x
python2-pyparsing-2.1.10-1.fc25.noarch
cairo-gobject-1.14.8-1.fc25.s390x
ethtool-4.8-1.fc25.s390x
xorg-x11-proto-devel-7.7-20.fc25.noarch
brlapi-0.6.5-2.fc25.s390x
librados-devel-10.2.4-2.fc25.s390x
libXinerama-devel-1.1.3-6.fc24.s390x
quota-4.03-7.fc25.s390x
lua-posix-33.3.1-3.fc25.s390x
usbredir-devel-0.7.1-2.fc24.s390x
python-libs-2.7.13-1.fc25.s390x
libX11-devel-1.6.4-4.fc25.s390x
python-devel-2.7.13-1.fc25.s390x
libepoxy-1.4.1-1.fc25.s390x
freetype-devel-2.6.5-3.fc25.s390x
python3-dnf-plugins-core-0.1.21-5.fc25.noarch
perl-macros-5.24.1-385.fc25.s390x
texlive-pdftex-doc-svn41149-33.fc25.1.noarch
mariadb-config-10.1.21-3.fc25.s390x
openssh-clients-7.4p1-4.fc25.s390x
iptables-1.6.0-3.fc25.s390x
texlive-texlive.infra-svn41280-33.fc25.1.noarch
texlive-graphics-cfg-svn40269-33.fc25.1.noarch
texlive-bibtex-svn40768-33.fc25.1.noarch
texlive-mfware-bin-svn40473-33.20160520.fc25.1.s390x
texlive-texlive-scripts-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-sauerj-svn15878.0-33.fc25.1.noarch
texlive-enctex-svn34957.0-33.fc25.1.noarch
texlive-ifetex-svn24853.1.2-33.fc25.1.noarch
texlive-ntgclass-svn15878.2.1a-33.fc25.1.noarch
texlive-tex-gyre-math-svn41264-33.fc25.1.noarch
texlive-bera-svn20031.0-33.fc25.1.noarch
texlive-ms-svn29849.0-33.fc25.1.noarch
texlive-pst-fill-svn15878.1.01-33.fc25.1.noarch
texlive-ctable-svn38672-33.fc25.1.noarch
texlive-extsizes-svn17263.1.4a-33.fc25.1.noarch
texlive-collection-latexrecommended-svn35765.0-33.20160520.fc25.1.noarch
perl-Filter-1.57-1.fc25.s390x
krb5-workstation-1.14.4-7.fc25.s390x
python2-rpm-macros-3-12.fc25.noarch
audit-libs-2.7.4-1.fc25.s390x
libglvnd-egl-0.2.999-14.20170308git8e6e102.fc25.s390x
libglvnd-opengl-0.2.999-14.20170308git8e6e102.fc25.s390x
pcre-devel-8.40-6.fc25.s390x
gdbm-1.13-1.fc25.s390x
mesa-libGLES-devel-13.0.4-3.fc25.s390x
java-1.8.0-openjdk-1.8.0.121-10.b14.fc25.s390x
gpg-pubkey-efe550f5-5220ba41
gpg-pubkey-81b46521-55b3ca9a
filesystem-3.2-37.fc24.s390x
libffi-3.1-9.fc24.s390x
keyutils-libs-1.5.9-8.fc24.s390x
libnfnetlink-1.0.1-8.fc24.s390x
libtheora-1.1.1-14.fc24.s390x
xml-common-0.6.3-44.fc24.noarch
autoconf-2.69-22.fc24.noarch
libXt-1.1.5-3.fc24.s390x
kbd-legacy-2.0.3-3.fc24.noarch
ghostscript-fonts-5.50-35.fc24.noarch
libXevie-1.0.3-11.fc24.s390x
libcap-2.25-2.fc25.s390x
mpfr-3.1.5-1.fc25.s390x
perl-Carp-1.40-365.fc25.noarch
libmnl-1.0.4-1.fc25.s390x
perl-Unicode-EastAsianWidth-1.33-8.fc25.noarch
libwayland-cursor-1.12.0-1.fc25.s390x
python-krbV-1.0.90-12.fc25.s390x
python2-urllib3-1.15.1-3.fc25.noarch
fipscheck-1.4.1-11.fc25.s390x
libndp-1.6-1.fc25.s390x
gnupg2-2.1.13-2.fc25.s390x
libXfixes-5.0.3-1.fc25.s390x
adwaita-icon-theme-3.22.0-1.fc25.noarch
dconf-0.26.0-1.fc25.s390x
ncurses-devel-6.0-6.20160709.fc25.s390x
dejagnu-1.6-1.fc25.noarch
libstdc++-devel-6.3.1-1.fc25.s390x
python-beautifulsoup4-4.5.3-1.fc25.noarch
device-mapper-1.02.136-3.fc25.s390x
subversion-1.9.5-1.fc25.s390x
libtool-ltdl-2.4.6-13.fc25.s390x
libevent-2.0.22-1.fc25.s390x
atk-devel-2.22.0-1.fc25.s390x
libev-4.24-1.fc25.s390x
xorg-x11-fonts-Type1-7.5-16.fc24.noarch
libtasn1-devel-4.10-1.fc25.s390x
vte291-devel-0.46.1-1.fc25.s390x
brlapi-devel-0.6.5-2.fc25.s390x
pulseaudio-libs-10.0-2.fc25.s390x
libnl3-cli-3.2.29-2.fc25.s390x
perl-libs-5.24.1-385.fc25.s390x
glib2-2.50.3-1.fc25.s390x
python3-firewall-0.4.4.4-1.fc25.noarch
python2-rpm-4.13.0.1-1.fc25.s390x
gnutls-3.5.10-1.fc25.s390x
pango-devel-1.40.4-1.fc25.s390x
dnf-1.1.10-6.fc25.noarch
texlive-metafont-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xkeyval-svn35741.2.7a-33.fc25.1.noarch
texlive-euler-svn17261.2.5-33.fc25.1.noarch
texlive-mptopdf-svn41282-33.fc25.1.noarch
texlive-wasy-svn35831.0-33.fc25.1.noarch
texlive-avantgar-svn31835.0-33.fc25.1.noarch
texlive-eurosym-svn17265.1.4_subrfix-33.fc25.1.noarch
texlive-knuth-lib-svn35820.0-33.fc25.1.noarch
texlive-parallel-svn15878.0-33.fc25.1.noarch
texlive-texlive-msg-translations-svn41431-33.fc25.1.noarch
texlive-latex-svn40218-33.fc25.1.noarch
texlive-lualatex-math-svn40621-33.fc25.1.noarch
texlive-auto-pst-pdf-svn23723.0.6-33.fc25.1.noarch
texlive-powerdot-svn38984-33.fc25.1.noarch
texlive-wasysym-svn15878.2.0-33.fc25.1.noarch
ImageMagick-libs-6.9.3.0-6.fc25.s390x
geoclue2-2.4.5-1.fc25.s390x
perl-IO-Socket-IP-0.39-1.fc25.noarch
gdb-7.12.1-47.fc25.s390x
python2-pyasn1-0.2.3-1.fc25.noarch
libglvnd-0.2.999-14.20170308git8e6e102.fc25.s390x
libglvnd-gles-0.2.999-14.20170308git8e6e102.fc25.s390x
gdk-pixbuf2-devel-2.36.6-1.fc25.s390x
libidn2-2.0.0-1.fc25.s390x
system-python-libs-3.5.3-4.fc25.s390x
GeoIP-1.6.10-1.fc25.s390x
at-spi2-core-devel-2.22.1-1.fc25.s390x
gpg-pubkey-34ec9cba-54e38751
gpg-pubkey-030d5aed-55b577f0
basesystem-11-2.fc24.noarch
libmpc-1.0.2-5.fc24.s390x
libunistring-0.9.4-3.fc24.s390x
libmodman-2.0.1-12.fc24.s390x
lsscsi-0.28-3.fc24.s390x
kbd-misc-2.0.3-3.fc24.noarch
rpmconf-base-1.0.18-2.fc25.noarch
libxml2-2.9.3-4.fc25.s390x
kmod-23-1.fc25.s390x
newt-0.52.19-2.fc25.s390x
perl-Text-Unidecode-1.27-3.fc25.noarch
plymouth-core-libs-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
which-2.21-1.fc25.s390x
python3-slip-0.6.4-4.fc25.noarch
python3-systemd-232-1.fc25.s390x
python-lockfile-0.11.0-4.fc25.noarch
python2-requests-2.10.0-4.fc25.noarch
libarchive-3.2.2-1.fc25.s390x
libnghttp2-1.13.0-2.fc25.s390x
python-urlgrabber-3.10.1-9.fc25.noarch
iputils-20161105-1.fc25.s390x
rest-0.8.0-1.fc25.s390x
adwaita-cursor-theme-3.22.0-1.fc25.noarch
authconfig-6.2.10-14.fc25.s390x
expat-devel-2.2.0-1.fc25.s390x
automake-1.15-7.fc25.noarch
shared-mime-info-1.8-1.fc25.s390x
pigz-2.3.4-1.fc25.s390x
device-mapper-libs-1.02.136-3.fc25.s390x
dnsmasq-2.76-2.fc25.s390x
fedora-packager-0.6.0.1-1.fc25.noarch
gcc-c++-6.3.1-1.fc25.s390x
libwebp-0.5.2-1.fc25.s390x
boost-system-1.60.0-10.fc25.s390x
libasyncns-0.8-10.fc24.s390x
libXau-devel-1.0.8-6.fc24.s390x
libverto-libev-0.2.6-6.fc24.s390x
python3-html5lib-0.999-9.fc25.noarch
ttmkfdir-3.0.9-48.fc24.s390x
pulseaudio-libs-glib2-10.0-2.fc25.s390x
wpa_supplicant-2.6-1.fc25.s390x
texlive-lib-2016-33.20160520.fc25.s390x
libXi-devel-1.7.9-1.fc25.s390x
python3-distro-1.0.3-1.fc25.noarch
rpm-plugin-systemd-inhibit-4.13.0.1-1.fc25.s390x
gnutls-c++-3.5.10-1.fc25.s390x
texlive-texlive-common-doc-svn40682-33.fc25.1.noarch
packagedb-cli-2.14.1-1.fc25.noarch
rpcbind-0.2.4-5.fc25.s390x
texlive-metafont-svn40793-33.fc25.1.noarch
texlive-tools-svn40934-33.fc25.1.noarch
texlive-enumitem-svn24146.3.5.2-33.fc25.1.noarch
texlive-mptopdf-bin-svn18674.0-33.20160520.fc25.1.noarch
texlive-underscore-svn18261.0-33.fc25.1.noarch
texlive-anysize-svn15878.0-33.fc25.1.noarch
texlive-euenc-svn19795.0.1h-33.fc25.1.noarch
texlive-kastrup-svn15878.0-33.fc25.1.noarch
texlive-paralist-svn39247-33.fc25.1.noarch
texlive-texlive-en-svn41185-33.fc25.1.noarch
texlive-tipa-svn29349.1.3-33.fc25.1.noarch
texlive-currfile-svn40725-33.fc25.1.noarch
texlive-pst-node-svn40743-33.fc25.1.noarch
texlive-pst-slpe-svn24391.1.31-33.fc25.1.noarch
texlive-typehtml-svn17134.0-33.fc25.1.noarch
SDL2-devel-2.0.5-3.fc25.s390x
perl-Module-CoreList-5.20170320-1.fc25.noarch
libcroco-0.6.11-3.fc25.s390x
publicsuffix-list-dafsa-20170206-1.fc25.noarch
pcre-8.40-6.fc25.s390x
cups-libs-2.2.0-8.fc25.s390x
gtk-update-icon-cache-3.22.11-1.fc25.s390x
libcurl-7.51.0-6.fc25.s390x
python3-libs-3.5.3-4.fc25.s390x
bluez-libs-devel-5.44-1.fc25.s390x
kernel-4.10.8-200.fc25.s390x
fontpackages-filesystem-1.44-17.fc24.noarch
groff-base-1.22.3-8.fc24.s390x
ilmbase-2.2.0-5.fc24.s390x
OpenEXR-libs-2.2.0-5.fc24.s390x
hesiod-3.2.1-6.fc24.s390x
sysfsutils-2.1.0-19.fc24.s390x
ocaml-srpm-macros-2-4.fc24.noarch
mailx-12.5-19.fc24.s390x
ncurses-libs-6.0-6.20160709.fc25.s390x
ipset-libs-6.29-1.fc25.s390x
gmp-devel-6.1.1-1.fc25.s390x
python-pip-8.1.2-2.fc25.noarch
harfbuzz-1.3.2-1.fc25.s390x
python2-iniparse-0.4-20.fc25.noarch
python3-iniparse-0.4-20.fc25.noarch
python3-kickstart-2.32-1.fc25.noarch
perl-Net-SSLeay-1.78-1.fc25.s390x
drpm-0.3.0-3.fc25.s390x
glib-networking-2.50.0-1.fc25.s390x
webkitgtk3-2.4.11-3.fc25.s390x
libXaw-1.0.13-4.fc25.s390x
xorg-x11-font-utils-7.5-32.fc25.s390x
hardlink-1.1-1.fc25.s390x
libcom_err-1.43.3-1.fc25.s390x
python2-dateutil-2.6.0-1.fc25.noarch
libXpm-3.5.12-1.fc25.s390x
python2-smmap-2.0.1-1.fc25.noarch
poppler-data-0.4.7-6.fc25.noarch
nspr-devel-4.13.1-1.fc25.s390x
librbd1-10.2.4-2.fc25.s390x
libsndfile-1.0.27-1.fc25.s390x
perl-Digest-MD5-2.55-2.fc25.s390x
wayland-protocols-devel-1.7-1.fc25.noarch
libacl-devel-2.2.52-11.fc24.s390x
texi2html-5.0-4.fc24.noarch
libxkbcommon-0.7.1-1.fc25.s390x
freetype-2.6.5-3.fc25.s390x
libuuid-devel-2.28.2-2.fc25.s390x
coreutils-common-8.25-16.fc25.s390x
gdb-headless-7.12.1-47.fc25.s390x
libcacard-2.5.3-1.fc25.s390x
perl-threads-shared-1.55-1.fc25.s390x
python2-rpkg-1.49-2.fc25.noarch
libwmf-lite-0.2.8.4-50.fc25.s390x
unbound-libs-1.6.0-6.fc25.s390x
texlive-tetex-svn41059-33.fc25.1.noarch
texlive-thumbpdf-svn34621.3.16-33.fc25.1.noarch
texlive-carlisle-svn18258.0-33.fc25.1.noarch
texlive-makeindex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-pdftex-svn41149-33.fc25.1.noarch
texlive-csquotes-svn39538-33.fc25.1.noarch
texlive-courier-svn35058.0-33.fc25.1.noarch
texlive-helvetic-svn31835.0-33.fc25.1.noarch
texlive-mfnfss-svn19410.0-33.fc25.1.noarch
texlive-sepnum-svn20186.2.0-33.fc25.1.noarch
texlive-utopia-svn15878.0-33.fc25.1.noarch
texlive-luatexbase-svn38550-33.fc25.1.noarch
texlive-pst-3d-svn17257.1.10-33.fc25.1.noarch
texlive-latex-bin-bin-svn14050.0-33.20160520.fc25.1.noarch
texlive-l3experimental-svn41163-33.fc25.1.noarch
bind99-libs-9.9.9-4.P6.fc25.s390x
net-tools-2.0-0.40.20160329git.fc25.s390x
perl-Pod-Perldoc-3.28-1.fc25.noarch
openssl-1.0.2k-1.fc25.s390x
man-pages-4.06-4.fc25.noarch
libdrm-2.4.77-1.fc25.s390x
p11-kit-0.23.2-3.fc25.s390x
glusterfs-cli-3.10.1-1.fc25.s390x
git-core-2.9.3-3.fc25.s390x
python3-3.5.3-4.fc25.s390x
python3-magic-5.29-4.fc25.noarch
p11-kit-trust-0.23.2-3.fc25.s390x
gpg-pubkey-95a43f54-5284415a
dejavu-fonts-common-2.35-3.fc24.noarch
libSM-1.2.2-4.fc24.s390x
diffutils-3.3-13.fc24.s390x
libogg-1.3.2-5.fc24.s390x
hunspell-en-US-0.20140811.1-5.fc24.noarch
libdaemon-0.14-10.fc24.s390x
patch-2.7.5-3.fc24.s390x
libsysfs-2.1.0-19.fc24.s390x
procmail-3.22-39.fc24.s390x
libXdamage-1.1.4-8.fc24.s390x
libotf-0.9.13-7.fc24.s390x
urw-fonts-2.4-22.fc24.noarch
crontabs-1.11-12.20150630git.fc24.noarch
ppp-2.4.7-9.fc24.s390x
polkit-0.113-5.fc24.s390x
cyrus-sasl-2.1.26-26.2.fc24.s390x
zlib-devel-1.2.8-10.fc24.s390x
time-1.7-49.fc24.s390x
gpg-pubkey-fdb19c98-56fd6333
fedora-release-25-1.noarch
libcap-ng-0.7.8-1.fc25.s390x
binutils-2.26.1-1.fc25.s390x
lcms2-2.8-2.fc25.s390x
libcomps-0.1.7-5.fc25.s390x
less-481-6.fc25.s390x
apr-1.5.2-4.fc25.s390x
perl-constant-1.33-367.fc25.noarch
perl-Data-Dumper-2.161-1.fc25.s390x
ipcalc-0.1.8-1.fc25.s390x
libteam-1.26-1.fc25.s390x
gmp-c++-6.1.1-1.fc25.s390x
fontconfig-2.12.1-1.fc25.s390x
enchant-1.6.0-14.fc25.s390x
pyliblzma-0.5.3-16.fc25.s390x
libsepol-devel-2.5-10.fc25.s390x
python3-ordered-set-2.0.0-4.fc25.noarch
python3-rpmconf-1.0.18-2.fc25.noarch
python-ipaddress-1.0.16-3.fc25.noarch
python2-kerberos-1.2.5-1.fc25.s390x
python2-pysocks-1.5.6-5.fc25.noarch
fipscheck-lib-1.4.1-11.fc25.s390x
libatomic_ops-7.4.4-1.fc25.s390x
net-snmp-agent-libs-5.7.3-13.fc25.s390x
dracut-044-78.fc25.s390x
python2-pygpgme-0.3-18.fc25.s390x
libsoup-2.56.0-2.fc25.s390x
orc-0.4.26-1.fc25.s390x
yum-utils-1.1.31-511.fc25.noarch
libXrender-0.9.10-1.fc25.s390x
libXrandr-1.5.1-1.fc25.s390x
go-srpm-macros-2-7.fc25.noarch
gnupg2-smime-2.1.13-2.fc25.s390x
guile-devel-2.0.13-1.fc25.s390x
uboot-tools-2016.09.01-2.fc25.s390x
pykickstart-2.32-1.fc25.noarch
python-bunch-1.0.1-9.fc25.noarch
perl-generators-1.10-1.fc25.noarch
perl-Mozilla-CA-20160104-3.fc25.noarch
glibc-all-langpacks-2.24-4.fc25.s390x
bzip2-libs-1.0.6-21.fc25.s390x
libpng-1.6.27-1.fc25.s390x
desktop-file-utils-0.23-2.fc25.s390x
python2-cccolutils-1.4-1.fc25.s390x
python2-lxml-3.7.2-1.fc25.s390x
redhat-rpm-config-45-1.fc25.noarch
elfutils-libs-0.168-1.fc25.s390x
device-mapper-event-libs-1.02.136-3.fc25.s390x
lvm2-libs-2.02.167-3.fc25.s390x
elfutils-0.168-1.fc25.s390x
python2-gitdb-2.0.0-1.fc25.noarch
gcc-gfortran-6.3.1-1.fc25.s390x
libselinux-python-2.5-13.fc25.s390x
openjpeg2-2.1.2-3.fc25.s390x
js-jquery-2.2.4-1.fc25.noarch
boost-thread-1.60.0-10.fc25.s390x
json-c-0.12-7.fc24.s390x
librbd-devel-10.2.4-2.fc25.s390x
libXcursor-devel-1.1.14-6.fc24.s390x
python3-beautifulsoup4-4.5.3-1.fc25.noarch
latex2html-2012-7.fc24.noarch
lksctp-tools-1.0.16-5.fc24.s390x
vte291-0.46.1-1.fc25.s390x
libfdt-1.4.2-1.fc25.s390x
libXft-devel-2.3.2-4.fc24.s390x
libattr-devel-2.4.47-16.fc24.s390x
libiscsi-devel-1.15.0-2.fc24.s390x
gettext-0.19.8.1-3.fc25.s390x
libjpeg-turbo-devel-1.5.1-0.fc25.s390x
libX11-1.6.4-4.fc25.s390x
pulseaudio-libs-devel-10.0-2.fc25.s390x
ccache-3.3.3-1.fc25.s390x
systemd-libs-231-14.fc25.s390x
nss-softokn-freebl-3.29.3-1.0.fc25.s390x
libepoxy-devel-1.4.1-1.fc25.s390x
krb5-libs-1.14.4-7.fc25.s390x
libmount-2.28.2-2.fc25.s390x
python3-decorator-4.0.11-1.fc25.noarch
rpm-plugin-selinux-4.13.0.1-1.fc25.s390x
perl-threads-2.15-1.fc25.s390x
tzdata-java-2017b-1.fc25.noarch
python-srpm-macros-3-12.fc25.noarch
libsmartcols-2.28.2-2.fc25.s390x
kernel-core-4.10.5-200.fc25.s390x
kernel-modules-4.10.5-200.fc25.s390x
texlive-kpathsea-svn41139-33.fc25.1.noarch
texlive-amsmath-svn41561-33.fc25.1.noarch
texlive-thumbpdf-bin-svn6898.0-33.20160520.fc25.1.noarch
texlive-psnfss-svn33946.9.2a-33.fc25.1.noarch
texlive-subfig-svn15878.1.3-33.fc25.1.noarch
texlive-fancybox-svn18304.1.4-33.fc25.1.noarch
texlive-lua-alt-getopt-svn29349.0.7.0-33.fc25.1.noarch
texlive-natbib-svn20668.8.31b-33.fc25.1.noarch
texlive-pdftex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-xdvi-svn40768-33.fc25.1.noarch
texlive-crop-svn15878.1.5-33.fc25.1.noarch
texlive-babel-english-svn30264.3.3p-33.fc25.1.noarch
texlive-cmextra-svn32831.0-33.fc25.1.noarch
texlive-fancyhdr-svn15878.3.1-33.fc25.1.noarch
texlive-luatex-svn40963-33.fc25.1.noarch
texlive-knuth-local-svn38627-33.fc25.1.noarch
texlive-mflogo-font-svn36898.1.002-33.fc25.1.noarch
texlive-parskip-svn19963.2.0-33.fc25.1.noarch
texlive-section-svn20180.0-33.fc25.1.noarch
texlive-textcase-svn15878.0-33.fc25.1.noarch
texlive-updmap-map-svn41159-33.fc25.1.noarch
texlive-attachfile-svn38830-33.fc25.1.noarch
nss-3.29.3-1.1.fc25.s390x
glusterfs-client-xlators-3.10.1-1.fc25.s390x
libglvnd-glx-0.2.999-14.20170308git8e6e102.fc25.s390x
libtiff-4.0.7-4.fc25.s390x
dbus-devel-1.11.12-1.fc25.s390x
java-1.8.0-openjdk-headless-1.8.0.121-10.b14.fc25.s390x
pcre2-utf16-10.23-5.fc25.s390x
git-core-doc-2.9.3-3.fc25.s390x
iproute-4.10.0-1.fc25.s390x
nfs-utils-2.1.1-3.rc1.fc25.s390x
libglvnd-core-devel-0.2.999-14.20170308git8e6e102.fc25.s390x
python-magic-5.29-4.fc25.noarch
pcre2-devel-10.23-5.fc25.s390x
p11-kit-devel-0.23.2-3.fc25.s390x
texlive-luaotfload-svn40902-33.fc25.1.noarch
texlive-unicode-math-svn38462-33.fc25.1.noarch
texlive-fancyvrb-svn18492.2.8-33.fc25.1.noarch
texlive-pst-pdf-bin-svn7838.0-33.20160520.fc25.1.noarch
texlive-amscls-svn36804.0-33.fc25.1.noarch
texlive-ltxmisc-svn21927.0-33.fc25.1.noarch
texlive-breqn-svn38099.0.98d-33.fc25.1.noarch
texlive-xetex-def-svn40327-33.fc25.1.noarch
openssh-server-7.4p1-4.fc25.s390x
sendmail-8.15.2-8.fc25.s390x
python-firewall-0.4.4.4-1.fc25.noarch
python3-sssdconfig-1.15.2-1.fc25.noarch
tzdata-2017b-1.fc25.noarch
hunspell-1.4.1-2.fc25.s390x
gpg-pubkey-8e1431d5-53bcbac7
zlib-1.2.8-10.fc24.s390x
sed-4.2.2-15.fc24.s390x
psmisc-22.21-8.fc24.s390x
gpm-libs-1.20.7-9.fc24.s390x
zip-3.0-16.fc24.s390x
hostname-3.15-7.fc24.s390x
libyubikey-1.13-2.fc24.s390x
sg3_utils-libs-1.41-3.fc24.s390x
polkit-pkla-compat-0.1-7.fc24.s390x
passwd-0.79-8.fc24.s390x
trousers-0.3.13-6.fc24.s390x
grubby-8.40-3.fc24.s390x
rootfiles-8.1-19.fc24.noarch
nettle-3.3-1.fc25.s390x
jansson-2.9-1.fc25.s390x
libksba-1.3.5-1.fc25.s390x
perl-Text-ParseWords-3.30-365.fc25.noarch
perl-PathTools-3.63-366.fc25.s390x
perl-File-Temp-0.23.04-365.fc25.noarch
fuse-libs-2.9.7-1.fc25.s390x
perl-Pod-Escapes-1.07-365.fc25.noarch
perl-Term-ANSIColor-4.05-2.fc25.noarch
perl-URI-1.71-5.fc25.noarch
libXfont-1.5.2-1.fc25.s390x
python-six-1.10.0-3.fc25.noarch
dbus-glib-0.108-1.fc25.s390x
gobject-introspection-1.50.0-1.fc25.s390x
libpwquality-1.3.0-6.fc25.s390x
python-gobject-base-3.22.0-1.fc25.s390x
python-html5lib-0.999-9.fc25.noarch
python3-dbus-1.2.4-2.fc25.s390x
python3-chardet-2.3.0-1.fc25.noarch
python3-urllib3-1.15.1-3.fc25.noarch
python-offtrac-0.1.0-7.fc25.noarch
python2-cryptography-1.5.3-3.fc25.s390x
python2-requests-kerberos-0.10.0-2.fc25.noarch
libserf-1.3.9-1.fc25.s390x
libdatrie-0.2.9-3.fc25.s390x
s390utils-base-1.36.0-1.fc25.s390x
kpartx-0.4.9-83.fc25.s390x
s390utils-cpuplugd-1.36.0-1.fc25.s390x
rpmconf-1.0.18-2.fc25.noarch
s390utils-osasnmpd-1.36.0-1.fc25.s390x
python-dnf-plugins-extras-common-0.0.12-4.fc25.noarch
fpc-srpm-macros-1.0-1.fc25.noarch
libuser-0.62-4.fc25.s390x
man-db-2.7.5-3.fc25.s390x
sqlite-3.14.2-1.fc25.s390x
python-systemd-doc-232-1.fc25.s390x
libdb-5.3.28-16.fc25.s390x
lz4-1.7.5-1.fc25.s390x
tar-1.29-3.fc25.s390x
emacs-common-25.1-3.fc25.s390x
unzip-6.0-31.fc25.s390x
bodhi-client-0.9.12.2-6.fc25.noarch
glibc-headers-2.24-4.fc25.s390x
cairo-1.14.8-1.fc25.s390x
ca-certificates-2017.2.11-1.0.fc25.noarch
NetworkManager-glib-1.4.4-3.fc25.s390x
gcc-go-6.3.1-1.fc25.s390x
cracklib-dicts-2.9.6-4.fc25.s390x
libselinux-python3-2.5-13.fc25.s390x
python2-enchant-1.6.8-1.fc25.noarch
boost-iostreams-1.60.0-10.fc25.s390x
userspace-rcu-0.9.2-2.fc25.s390x
libXext-devel-1.3.3-4.fc24.s390x
libXrandr-devel-1.5.1-1.fc25.s390x
perl-XML-XPath-1.39-1.fc25.noarch
python3-lxml-3.7.2-1.fc25.s390x
vte-profile-0.46.1-1.fc25.s390x
sqlite-devel-3.14.2-1.fc25.s390x
libiscsi-1.15.0-2.fc24.s390x
fontconfig-devel-2.12.1-1.fc25.s390x
libfdt-devel-1.4.2-1.fc25.s390x
ceph-devel-compat-10.2.4-2.fc25.s390x
zlib-static-1.2.8-10.fc24.s390x
chrpath-0.16-3.fc24.s390x
python-2.7.13-1.fc25.s390x
kernel-core-4.9.5-200.fc25.s390x
info-6.1-4.fc25.s390x
iptables-libs-1.6.0-3.fc25.s390x
bind-license-9.10.4-4.P6.fc25.noarch
lua-5.3.4-1.fc25.s390x
libfdisk-2.28.2-2.fc25.s390x
dnf-plugins-core-0.1.21-5.fc25.noarch
selinux-policy-3.13.1-225.11.fc25.noarch
perl-Errno-1.25-385.fc25.s390x
perl-Storable-2.56-368.fc25.s390x
python2-decorator-4.0.11-1.fc25.noarch
mariadb-common-10.1.21-3.fc25.s390x
systemtap-client-3.1-2.fc25.s390x
libnetfilter_conntrack-1.0.6-2.fc25.s390x
texlive-texlive.infra-bin-svn40312-33.20160520.fc25.1.s390x
texlive-ifluatex-svn41346-33.fc25.1.noarch
texlive-fp-svn15878.0-33.fc25.1.noarch
texlive-latex-fonts-svn28888.0-33.fc25.1.noarch
texlive-bibtex-bin-svn40473-33.20160520.fc25.1.s390x
texlive-glyphlist-svn28576.0-33.fc25.1.noarch
texlive-marvosym-svn29349.2.2a-33.fc25.1.noarch
texlive-tex-bin-svn40987-33.20160520.fc25.1.s390x
texlive-texconfig-svn40768-33.fc25.1.noarch
texlive-wasy2-ps-svn35830.0-33.fc25.1.noarch
texlive-psfrag-svn15878.3.04-33.fc25.1.noarch
texlive-charter-svn15878.0-33.fc25.1.noarch
texlive-ec-svn25033.1.0-33.fc25.1.noarch
texlive-lineno-svn21442.4.41-33.fc25.1.noarch
texlive-hyphen-base-svn41138-33.fc25.1.noarch
texlive-manfnt-font-svn35799.0-33.fc25.1.noarch
texlive-ncntrsbk-svn31835.0-33.fc25.1.noarch
texlive-pst-math-svn34786.0.63-33.fc25.1.noarch
texlive-symbol-svn31835.0-33.fc25.1.noarch
texlive-environ-svn33821.0.3-33.fc25.1.noarch
texlive-algorithms-svn38085.0.1-33.fc25.1.noarch
glusterfs-libs-3.10.1-1.fc25.s390x
mesa-libwayland-egl-13.0.4-3.fc25.s390x
glusterfs-api-3.10.1-1.fc25.s390x
kernel-core-4.10.8-200.fc25.s390x
mesa-libwayland-egl-devel-13.0.4-3.fc25.s390x
nss-tools-3.29.3-1.1.fc25.s390x
pcre2-10.23-5.fc25.s390x
perl-Git-2.9.3-3.fc25.noarch
gssproxy-0.7.0-3.fc25.s390x
glusterfs-server-3.10.1-1.fc25.s390x
libglvnd-devel-0.2.999-14.20170308git8e6e102.fc25.s390x
python3-hawkey-0.6.4-3.fc25.s390x
vim-enhanced-8.0.514-1.fc25.s390x
mesa-libgbm-devel-13.0.4-3.fc25.s390x
texlive-ifplatform-svn21156.0.4-33.fc25.1.noarch
texlive-eso-pic-svn37925.2.0g-33.fc25.1.noarch
texlive-xcolor-svn41044-33.fc25.1.noarch
texlive-pst-eps-svn15878.1.0-33.fc25.1.noarch
texlive-pst-text-svn15878.1.00-33.fc25.1.noarch
texlive-rotating-svn16832.2.16b-33.fc25.1.noarch
texlive-pdfpages-svn40638-33.fc25.1.noarch
texlive-cm-super-svn15878.0-33.fc25.1.noarch
texlive-xetex-svn41438-33.fc25.1.noarch
dnf-yum-1.1.10-6.fc25.noarch
mariadb-libs-10.1.21-3.fc25.s390x
rpmlint-1.9-8.fc25.noarch
systemtap-sdt-devel-3.1-2.fc25.s390x
libseccomp-devel-2.3.2-1.fc25.s390x
telnet-0.17-67.fc25.s390x
gpgme-1.8.0-10.fc25.s390x
apr-util-1.5.4-3.fc24.s390x
rsync-3.1.2-2.fc24.s390x
jbigkit-libs-2.1-5.fc24.s390x
pixman-0.34.0-2.fc24.s390x
dwz-0.12-2.fc24.s390x
expect-5.45-22.fc24.s390x
libsigsegv-2.10-10.fc24.s390x
fakeroot-libs-1.20.2-4.fc24.s390x
m17n-lib-1.7.0-5.fc24.s390x
libverto-0.2.6-6.fc24.s390x
libXmu-1.1.2-4.fc24.s390x
libXcursor-1.1.14-6.fc24.s390x
python-kitchen-1.2.4-2.fc24.noarch
polkit-libs-0.113-5.fc24.s390x
fakeroot-1.20.2-4.fc24.s390x
blktrace-1.1.0-3.fc24.s390x
usermode-1.111-8.fc24.s390x
kbd-2.0.3-3.fc24.s390x
libaio-devel-0.3.110-6.fc24.s390x
web-assets-filesystem-5-4.fc24.noarch
expat-2.2.0-1.fc25.s390x
libgpg-error-1.24-1.fc25.s390x
libgcrypt-1.6.6-1.fc25.s390x
findutils-4.6.0-8.fc25.s390x
libassuan-2.4.3-1.fc25.s390x
libusbx-1.0.21-1.fc25.s390x
libxslt-1.1.28-13.fc25.s390x
libmetalink-0.1.3-1.fc25.s390x
perl-File-Path-2.12-365.fc25.noarch
perl-MIME-Base64-3.15-365.fc25.s390x
ncurses-6.0-6.20160709.fc25.s390x
libwayland-server-1.12.0-1.fc25.s390x
perl-Fedora-VSP-0.001-4.fc25.noarch
perl-libintl-perl-1.26-1.fc25.s390x
shadow-utils-4.2.1-11.fc25.s390x
atk-2.22.0-1.fc25.s390x
pam-1.3.0-1.fc25.s390x
harfbuzz-icu-1.3.2-1.fc25.s390x
libsecret-0.18.5-2.fc25.s390x
s390utils-iucvterm-1.36.0-1.fc25.s390x
python3-requests-2.10.0-4.fc25.noarch
pyusb-1.0.0-2.fc25.noarch
python-enum34-1.0.4-6.fc25.noarch
pyOpenSSL-16.0.0-2.fc25.noarch
pyxattr-0.5.3-8.fc25.s390x
libbabeltrace-1.4.0-3.fc25.s390x
libthai-0.1.25-1.fc25.s390x
deltarpm-3.6-17.fc25.s390x
s390utils-mon_statd-1.36.0-1.fc25.s390x
device-mapper-multipath-0.4.9-83.fc25.s390x
python3-pygpgme-0.3-18.fc25.s390x
libreport-filesystem-2.8.0-1.fc25.s390x
ghc-srpm-macros-1.4.2-4.fc25.noarch
rpmdevtools-8.9-1.fc25.noarch
python-dnf-plugins-extras-migrate-0.0.12-4.fc25.noarch
perl-IO-Socket-SSL-2.038-1.fc25.noarch
perl-File-ShareDir-1.102-7.fc25.noarch
tcl-8.6.6-1.fc25.s390x
glibc-2.24-4.fc25.s390x
elfutils-libelf-0.168-1.fc25.s390x
perl-Scalar-List-Utils-1.47-1.fc25.s390x
bzip2-1.0.6-21.fc25.s390x
libss-1.43.3-1.fc25.s390x
libselinux-utils-2.5-13.fc25.s390x
koji-1.11.0-1.fc25.noarch
python3-enchant-1.6.8-1.fc25.noarch
python2-dockerfile-parse-0.0.5-7.fc25.noarch
systemd-bootchart-231-2.fc25.s390x
gcc-objc-6.3.1-1.fc25.s390x
e2fsprogs-1.43.3-1.fc25.s390x
libstdc++-static-6.3.1-1.fc25.s390x
libpng-devel-1.6.27-1.fc25.s390x
perl-XML-Parser-2.44-5.fc25.s390x
lttng-ust-2.8.1-2.fc25.s390x
libXfixes-devel-5.0.3-1.fc25.s390x
libXcomposite-devel-0.4.4-8.fc24.s390x
quota-nls-4.03-7.fc25.noarch
python3-javapackages-4.7.0-6.1.fc25.noarch
libcephfs_jni-devel-10.2.4-2.fc25.s390x
keyutils-libs-devel-1.5.9-8.fc24.s390x
libicu-devel-57.1-4.fc25.s390x
harfbuzz-devel-1.3.2-1.fc25.s390x
libidn-devel-1.33-1.fc25.s390x
libnfs-1.9.8-2.fc24.s390x
libssh2-devel-1.8.0-1.fc25.s390x
qemu-sanity-check-nodeps-1.1.5-5.fc24.s390x
alsa-lib-devel-1.1.1-2.fc25.s390x
libnl3-3.2.29-2.fc25.s390x
kernel-modules-4.9.5-200.fc25.s390x
libpsl-0.17.0-1.fc25.s390x
lua-libs-5.3.4-1.fc25.s390x
libseccomp-2.3.2-1.fc25.s390x
nss-softokn-freebl-devel-3.29.3-1.0.fc25.s390x
copy-jdk-configs-2.2-2.fc25.noarch
json-glib-1.2.6-1.fc25.s390x
python2-dnf-1.1.10-6.fc25.noarch
bind-libs-lite-9.10.4-4.P6.fc25.s390x
perl-IO-1.36-385.fc25.s390x
python2-GitPython-2.1.3-1.fc25.noarch
linux-firmware-20170313-72.git695f2d6d.fc25.noarch
systemd-container-231-14.fc25.s390x
gnutls-dane-3.5.10-1.fc25.s390x
texlive-tetex-bin-svn36770.0-33.20160520.fc25.1.noarch
texlive-amsfonts-svn29208.3.04-33.fc25.1.noarch
texlive-babel-svn40706-33.fc25.1.noarch
texlive-colortbl-svn29803.v1.0a-33.fc25.1.noarch
texlive-babelbib-svn25245.1.31-33.fc25.1.noarch
texlive-footmisc-svn23330.5.5b-33.fc25.1.noarch
texlive-makeindex-svn40768-33.fc25.1.noarch
texlive-plain-svn40274-33.fc25.1.noarch
texlive-texconfig-bin-svn29741.0-33.20160520.fc25.1.noarch
texlive-zapfding-svn31835.0-33.fc25.1.noarch
texlive-microtype-svn41127-33.fc25.1.noarch
texlive-bookman-svn31835.0-33.fc25.1.noarch
texlive-dvisvgm-def-svn41011-33.fc25.1.noarch
texlive-finstrut-svn21719.0.5-33.fc25.1.noarch
texlive-hyph-utf8-svn41189-33.fc25.1.noarch
texlive-lualibs-svn40370-33.fc25.1.noarch
glusterfs-3.10.1-1.fc25.s390x
mesa-libglapi-13.0.4-3.fc25.s390x
mesa-libgbm-13.0.4-3.fc25.s390x
kernel-modules-4.10.8-200.fc25.s390x
glusterfs-fuse-3.10.1-1.fc25.s390x
openldap-2.4.44-10.fc25.s390x
pcre-utf32-8.40-6.fc25.s390x
git-2.9.3-3.fc25.s390x
python2-gluster-3.10.1-1.fc25.s390x
glusterfs-devel-3.10.1-1.fc25.s390x
mesa-libEGL-devel-13.0.4-3.fc25.s390x
glusterfs-api-devel-3.10.1-1.fc25.s390x
sudo-1.8.19p2-1.fc25.s390x
python2-hawkey-0.6.4-3.fc25.s390x
texlive-mparhack-svn15878.1.4-33.fc25.1.noarch
texlive-pspicture-svn15878.0-33.fc25.1.noarch
texlive-soul-svn15878.2.4-33.fc25.1.noarch
texlive-trimspaces-svn15878.1.1-33.fc25.1.noarch
texlive-varwidth-svn24104.0.92-33.fc25.1.noarch
texlive-geometry-svn19716.5.6-33.fc25.1.noarch
texlive-memoir-svn41203-33.fc25.1.noarch
texlive-pgf-svn40966-33.fc25.1.noarch
texlive-pst-coil-svn37377.1.07-33.fc25.1.noarch
texlive-pst-plot-svn41242-33.fc25.1.noarch
texlive-latex-bin-svn41438-33.fc25.1.noarch
texlive-ucs-svn35853.2.2-33.fc25.1.noarch
texlive-ae-svn15878.1.4-33.fc25.1.noarch
texlive-xetex-bin-svn41091-33.20160520.fc25.1.s390x
fedora-upgrade-26.1-1.fc25.noarch
fedpkg-1.28-1.fc25.noarch
perl-Thread-Queue-3.12-1.fc25.noarch
gstreamer1-plugins-base-1.10.4-1.fc25.s390x
screen-4.5.1-1.fc25.s390x
strace-4.16-1.fc25.s390x
fedora-repos-25-3.noarch
libacl-2.2.52-11.fc24.s390x
cdparanoia-libs-10.2-21.fc24.s390x
ustr-1.0.4-21.fc24.s390x
libusb-0.1.5-7.fc24.s390x
readline-devel-6.3-8.fc24.s390x
chkconfig-1.8-1.fc25.s390x
avahi-libs-0.6.32-4.fc25.s390x
perl-Unicode-Normalize-1.25-365.fc25.s390x
perl-libnet-3.10-1.fc25.noarch
perl-podlators-4.09-1.fc25.noarch
graphite2-1.3.6-1.fc25.s390x
dbus-python-1.2.4-2.fc25.s390x
libgnome-keyring-3.12.0-7.fc25.s390x
python-backports-1.0-8.fc25.s390x
python-pycparser-2.14-7.fc25.noarch
plymouth-scripts-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
cronie-1.5.1-2.fc25.s390x
python2-librepo-1.7.18-3.fc25.s390x
libXv-1.0.11-1.fc25.s390x
python2-ndg_httpsclient-0.4.0-4.fc25.noarch
btrfs-progs-4.6.1-1.fc25.s390x
libgcc-6.3.1-1.fc25.s390x
libgomp-6.3.1-1.fc25.s390x
perl-Encode-2.88-5.fc25.s390x
cracklib-2.9.6-4.fc25.s390x
libobjc-6.3.1-1.fc25.s390x
gcc-6.3.1-1.fc25.s390x
python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
NetworkManager-1.4.4-3.fc25.s390x
glibc-static-2.24-4.fc25.s390x
boost-random-1.60.0-10.fc25.s390x
libref_array-0.1.5-29.fc25.s390x
libXrender-devel-0.9.10-1.fc25.s390x
javapackages-tools-4.7.0-6.1.fc25.noarch
keyutils-1.5.9-8.fc24.s390x
libcom_err-devel-1.43.3-1.fc25.s390x
graphite2-devel-1.3.6-1.fc25.s390x
lzo-minilzo-2.08-8.fc24.s390x
libusbx-devel-1.0.21-1.fc25.s390x
virglrenderer-devel-0.5.0-1.20160411git61846f92f.fc25.s390x
acpica-tools-20160831-1.fc25.s390x
grep-2.27-2.fc25.s390x
dnf-conf-1.1.10-6.fc25.noarch
crypto-policies-20160921-4.gitf3018dd.fc25.noarch
rpm-build-libs-4.13.0.1-1.fc25.s390x
libnfsidmap-0.27-1.fc25.s390x
systemtap-devel-3.1-2.fc25.s390x
systemd-231-14.fc25.s390x
SDL2-2.0.5-3.fc25.s390x
texlive-etex-pkg-svn39355-33.fc25.1.noarch
texlive-multido-svn18302.1.42-33.fc25.1.noarch
texlive-gsftopk-svn40768-33.fc25.1.noarch
texlive-pst-ovl-svn40873-33.fc25.1.noarch
texlive-ltabptch-svn17533.1.74d-33.fc25.1.noarch
texlive-cite-svn36428.5.5-33.fc25.1.noarch
texlive-fpl-svn15878.1.002-33.fc25.1.noarch
texlive-mathpazo-svn15878.1.003-33.fc25.1.noarch
texlive-rcs-svn15878.0-33.fc25.1.noarch
texlive-type1cm-svn21820.0-33.fc25.1.noarch
texlive-l3kernel-svn41246-33.fc25.1.noarch
texlive-hyperref-svn41396-33.fc25.1.noarch
texlive-pst-tree-svn24142.1.12-33.fc25.1.noarch
texlive-sansmathaccent-svn30187.0-33.fc25.1.noarch
texlive-dvipdfmx-bin-svn40273-33.20160520.fc25.1.s390x
texlive-zapfchan-svn31835.0-33.fc25.1.noarch
firewalld-0.4.4.4-1.fc25.noarch
glib2-static-2.50.3-1.fc25.s390x
libmicrohttpd-0.9.52-3.fc25.s390x
perl-open-1.10-385.fc25.noarch
bash-completion-2.5-1.fc25.noarch
libsolv-0.6.26-3.fc25.s390x
ghostscript-core-9.20-7.fc25.s390x
nss-util-devel-3.29.3-1.1.fc25.s390x
kernel-headers-4.10.8-200.fc25.s390x
system-python-3.5.3-4.fc25.s390x
iproute-tc-4.10.0-1.fc25.s390x
audit-2.7.4-1.fc25.s390x
gpg-pubkey-a29cb19c-53bcbba6
m4-1.4.17-9.fc24.s390x
liblockfile-1.09-4.fc24.s390x
sg3_utils-1.41-3.fc24.s390x
libXinerama-1.1.3-6.fc24.s390x
libXft-2.3.2-4.fc24.s390x
tcp_wrappers-libs-7.6-83.fc25.s390x
perl-Text-Tabs+Wrap-2013.0523-365.fc25.noarch
perl-Error-0.17024-7.fc25.noarch
perl-Term-Cap-1.17-365.fc25.noarch
perl-Pod-Usage-1.69-1.fc25.noarch
device-mapper-persistent-data-0.6.3-1.fc25.s390x
net-snmp-libs-5.7.3-13.fc25.s390x
libgusb-0.2.9-1.fc25.s390x
python3-six-1.10.0-3.fc25.noarch
python3-pysocks-1.5.6-5.fc25.noarch
python-chardet-2.3.0-1.fc25.noarch
python2-cffi-1.7.0-2.fc25.s390x
gc-devel-7.4.4-1.fc25.s390x
plymouth-0.9.3-0.6.20160620git0e65b86c.fc25.s390x
ebtables-2.0.10-21.fc25.s390x
python3-librepo-1.7.18-3.fc25.s390x
net-snmp-5.7.3-13.fc25.s390x
at-spi2-atk-2.22.0-1.fc25.s390x
avahi-autoipd-0.6.32-4.fc25.s390x
libcrypt-nss-2.24-4.fc25.s390x
libgo-6.3.1-1.fc25.s390x
cpp-6.3.1-1.fc25.s390x
glibc-devel-2.24-4.fc25.s390x
emacs-25.1-3.fc25.s390x
pyparsing-2.1.10-1.fc25.noarch
libproxy-0.4.14-1.fc25.s390x
python3-pyparsing-2.1.10-1.fc25.noarch
libcollection-0.7.0-29.fc25.s390x
libcephfs-devel-10.2.4-2.fc25.s390x
libXdamage-devel-1.1.4-8.fc24.s390x
libverto-devel-0.2.6-6.fc24.s390x
snappy-1.1.3-2.fc24.s390x
cairo-gobject-devel-1.14.8-1.fc25.s390x
cyrus-sasl-devel-2.1.26-26.2.fc24.s390x
kernel-devel-4.9.5-200.fc25.s390x
libXi-1.7.9-1.fc25.s390x
distribution-gpg-keys-1.11-1.fc25.noarch
texlive-base-2016-33.20160520.fc25.noarch
gstreamer1-1.10.4-1.fc25.s390x
python3-rpm-4.13.0.1-1.fc25.s390x
systemtap-runtime-3.1-2.fc25.s390x
perl-SelfLoader-1.23-385.fc25.noarch
bind99-license-9.9.9-4.P6.fc25.noarch
texlive-booktabs-svn40846-33.fc25.1.noarch
texlive-lm-svn28119.2.004-33.fc25.1.noarch
texlive-gsftopk-bin-svn40473-33.20160520.fc25.1.s390x
texlive-tex-svn40793-33.fc25.1.noarch
texlive-fancyref-svn15878.0.9c-33.fc25.1.noarch
texlive-chngcntr-svn17157.1.0a-33.fc25.1.noarch
texlive-fix2col-svn38770-33.fc25.1.noarch
texlive-marginnote-svn41382-33.fc25.1.noarch
texlive-pxfonts-svn15878.0-33.fc25.1.noarch
texlive-txfonts-svn15878.0-33.fc25.1.noarch
texlive-l3packages-svn41246-33.fc25.1.noarch
texlive-oberdiek-svn41346-33.fc25.1.noarch
texlive-pst-tools-svn34067.0.05-33.fc25.1.noarch
texlive-tex-gyre-svn18651.2.004-33.fc25.1.noarch
texlive-dvipdfmx-svn41149-33.fc25.1.noarch
texlive-collection-fontsrecommended-svn35830.0-33.20160520.fc25.1.noarch
gnutls-devel-3.5.10-1.fc25.s390x
libcacard-devel-2.5.3-1.fc25.s390x
selinux-policy-targeted-3.13.1-225.11.fc25.noarch
ykpers-1.18.0-2.fc25.s390x
python2-idna-2.5-1.fc25.noarch
dbus-libs-1.11.12-1.fc25.s390x
ghostscript-x11-9.20-7.fc25.s390x
vim-minimal-8.0.514-1.fc25.s390x
libdrm-devel-2.4.77-1.fc25.s390x
file-libs-5.29-4.fc25.s390x
gtk3-devel-3.22.11-1.fc25.s390x
policycoreutils-2.5-20.fc25.s390x
python-async-0.6.1-9.fc22.s390x
dejavu-sans-mono-fonts-2.35-3.fc24.noarch
popt-1.16-7.fc24.s390x
cyrus-sasl-lib-2.1.26-26.2.fc24.s390x
xz-5.2.2-2.fc24.s390x
libpipeline-1.4.1-2.fc24.s390x
pinentry-0.9.7-2.fc24.s390x
pth-2.0.7-27.fc24.s390x
libsepol-2.5-10.fc25.s390x
sqlite-libs-3.14.2-1.fc25.s390x
libxcb-1.12-1.fc25.s390x
libicu-57.1-4.fc25.s390x
perl-Getopt-Long-2.49.1-1.fc25.noarch
avahi-glib-0.6.32-4.fc25.s390x
python3-pip-8.1.2-2.fc25.noarch
python3-libcomps-0.1.7-5.fc25.s390x
python-slip-0.6.4-4.fc25.noarch
python2-libcomps-0.1.7-5.fc25.s390x
gc-7.4.4-1.fc25.s390x
s390utils-cmsfs-1.36.0-1.fc25.s390x
newt-python-0.52.19-2.fc25.s390x
valgrind-3.12.0-1.fc25.s390x
emacs-filesystem-25.1-3.fc25.noarch
libdb-utils-5.3.28-16.fc25.s390x
qt5-srpm-macros-5.7.1-1.fc25.noarch
elfutils-default-yama-scope-0.168-1.fc25.noarch
device-mapper-event-1.02.136-3.fc25.s390x
perl-Class-Inspector-1.31-2.fc25.noarch
poppler-0.45.0-2.fc25.s390x
libbasicobjects-0.1.1-29.fc25.s390x
libradosstriper1-10.2.4-2.fc25.s390x
libXxf86vm-devel-1.1.4-3.fc24.s390x
gsm-1.0.16-1.fc25.s390x
zziplib-0.13.62-7.fc24.s390x
libpaper-1.1.24-12.fc24.s390x
libini_config-1.3.0-29.fc25.s390x
snappy-devel-1.1.3-2.fc24.s390x
libcap-ng-devel-0.7.8-1.fc25.s390x
libxkbcommon-devel-0.7.1-1.fc25.s390x
kernel-4.9.5-200.fc25.s390x
nss-softokn-3.29.3-1.0.fc25.s390x
openssl-libs-1.0.2k-1.fc25.s390x
libkadm5-1.14.4-7.fc25.s390x
rpm-libs-4.13.0.1-1.fc25.s390x
perl-5.24.1-385.fc25.s390x
util-linux-2.28.2-2.fc25.s390x
libICE-1.0.9-8.fc25.s390x
texlive-etoolbox-svn38031.2.2a-33.fc25.1.noarch
texlive-dvips-svn41149-33.fc25.1.noarch
texlive-latexconfig-svn40274-33.fc25.1.noarch
texlive-tex-ini-files-svn40533-33.fc25.1.noarch
texlive-qstest-svn15878.0-33.fc25.1.noarch
texlive-cmap-svn41168-33.fc25.1.noarch
texlive-luatex-bin-svn41091-33.20160520.fc25.1.s390x
texlive-mflogo-svn38628-33.fc25.1.noarch
texlive-sansmath-svn17997.1.1-33.fc25.1.noarch
texlive-unicode-data-svn39808-33.fc25.1.noarch
texlive-luaotfload-bin-svn34647.0-33.20160520.fc25.1.noarch
texlive-listings-svn37534.1.6-33.fc25.1.noarch
texlive-pstricks-svn41321-33.fc25.1.noarch
texlive-metalogo-svn18611.0.12-33.fc25.1.noarch
texlive-collection-latex-svn41011-33.20160520.fc25.1.noarch
kernel-4.10.5-200.fc25.s390x
python2-dnf-plugins-core-0.1.21-5.fc25.noarch
xkeyboard-config-2.20-2.fc25.noarch
nss-util-3.29.3-1.1.fc25.s390x
dbus-1.11.12-1.fc25.s390x
ghostscript-9.20-7.fc25.s390x
vim-filesystem-8.0.514-1.fc25.s390x
jasper-libs-1.900.13-3.fc25.s390x
file-5.29-4.fc25.s390x
curl-7.51.0-6.fc25.s390x
perl-Test-Harness-3.39-1.fc25.noarch
libattr-2.4.47-16.fc24.s390x
acl-2.2.52-11.fc24.s390x
libvisual-0.4.0-20.fc24.s390x
libpcap-1.7.4-2.fc24.s390x
libutempter-1.1.6-8.fc24.s390x
libgudev-230-3.fc24.s390x
popt-devel-1.16-7.fc24.s390x
make-4.1-5.fc24.s390x
hicolor-icon-theme-0.15-3.fc24.noarch
setup-2.10.4-1.fc25.noarch
bash-4.3.43-4.fc25.s390x
nspr-4.13.1-1.fc25.s390x
libjpeg-turbo-1.5.1-0.fc25.s390x
perl-Socket-2.024-1.fc25.s390x
perl-HTTP-Tiny-0.070-1.fc25.noarch
ipset-6.29-1.fc25.s390x
python2-setuptools-25.1.1-1.fc25.noarch
gsettings-desktop-schemas-3.22.0-1.fc25.s390x
python3-setuptools-25.1.1-1.fc25.noarch
python-slip-dbus-0.6.4-4.fc25.noarch
python2-ply-3.8-2.fc25.noarch
dtc-1.4.2-1.fc25.s390x
guile-2.0.13-1.fc25.s390x
cronie-anacron-1.5.1-2.fc25.s390x
libXtst-1.2.3-1.fc25.s390x
iso-codes-3.70-1.fc25.noarch
s390utils-1.36.0-1.fc25.s390x
python-backports-ssl_match_hostname-3.5.0.1-3.fc25.noarch
fedora-cert-0.6.0.1-1.fc25.noarch
libstdc++-6.3.1-1.fc25.s390x
subversion-libs-1.9.5-1.fc25.s390x
libgfortran-6.3.1-1.fc25.s390x
libtasn1-4.10-1.fc25.s390x
dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch
lvm2-2.02.167-3.fc25.s390x
libselinux-devel-2.5-13.fc25.s390x
perl-Time-Local-1.250-1.fc25.noarch
libtirpc-1.0.1-3.rc3.fc25.s390x
libradosstriper-devel-10.2.4-2.fc25.s390x
flac-libs-1.3.2-1.fc25.s390x
perl-Digest-1.17-366.fc25.noarch
teckit-2.5.1-15.fc24.s390x
libpath_utils-0.2.1-29.fc25.s390x
attr-2.4.47-16.fc24.s390x
usbredir-0.7.1-2.fc24.s390x
cairo-devel-1.14.8-1.fc25.s390x
lzo-devel-2.08-8.fc24.s390x
libcap-devel-2.25-2.fc25.s390x
opus-1.1.3-2.fc25.s390x
firewalld-filesystem-0.4.4.4-1.fc25.noarch
coreutils-8.25-16.fc25.s390x
krb5-devel-1.14.4-7.fc25.s390x
rpm-4.13.0.1-1.fc25.s390x
kernel-devel-4.10.5-200.fc25.s390x
systemd-pam-231-14.fc25.s390x
libbsd-0.8.3-1.fc25.s390x
texlive-url-svn32528.3.4-33.fc25.1.noarch
texlive-dvips-bin-svn40987-33.20160520.fc25.1.s390x
texlive-index-svn24099.4.1beta-33.fc25.1.noarch
texlive-setspace-svn24881.6.7a-33.fc25.1.noarch
texlive-mathtools-svn38833-33.fc25.1.noarch
texlive-cm-svn32865.0-33.fc25.1.noarch
texlive-graphics-def-svn41879-33.fc25.1.noarch
texlive-mdwtools-svn15878.1.05.4-33.fc25.1.noarch
texlive-rsfs-svn15878.0-33.fc25.1.noarch
texlive-ucharcat-svn38907-33.fc25.1.noarch
texlive-fontspec-svn41262-33.fc25.1.noarch
texlive-showexpl-svn32737.v0.3l-33.fc25.1.noarch
texlive-pstricks-add-svn40744-33.fc25.1.noarch
texlive-beamer-svn36461.3.36-33.fc25.1.noarch
texlive-collection-basic-svn41149-33.20160520.fc25.1.noarch
mock-1.3.4-1.fc25.noarch
rpm-build-4.13.0.1-1.fc25.s390x
xemacs-filesystem-21.5.34-20.20170124hgf412e9f093d4.fc25.noarch
nss-sysinit-3.29.3-1.1.fc25.s390x
hawkey-0.6.4-3.fc25.s390x
mesa-libGLES-13.0.4-3.fc25.s390x
vim-common-8.0.514-1.fc25.s390x
gdk-pixbuf2-modules-2.36.6-1.fc25.s390x
bluez-libs-5.44-1.fc25.s390x
libcurl-devel-7.51.0-6.fc25.s390x
mc-4.8.19-1.fc25.s390x
gpg-pubkey-a0a7badb-52844296
readline-6.3-8.fc24.s390x
cpio-2.12-3.fc24.s390x
qrencode-libs-3.4.2-6.fc24.s390x
libXcomposite-0.4.4-8.fc24.s390x
procps-ng-3.3.10-11.fc24.s390x
GConf2-3.2.6-16.fc24.s390x
xz-devel-5.2.2-2.fc24.s390x
fedora-logos-22.0.0-3.fc24.s390x
gpg-pubkey-e372e838-56fd7943
kmod-libs-23-1.fc25.s390x
perl-parent-0.236-1.fc25.noarch
perl-TermReadKey-2.37-1.fc25.s390x
dhcp-libs-4.3.5-1.fc25.s390x
ncurses-c++-libs-6.0-6.20160709.fc25.s390x
gzip-1.8-1.fc25.s390x
python3-gobject-base-3.22.0-1.fc25.s390x
python2-yubico-1.3.2-3.fc25.noarch
s390utils-ziomon-1.36.0-1.fc25.s390x
librepo-1.7.18-3.fc25.s390x
librsvg2-2.40.16-2.fc25.s390x
gnat-srpm-macros-4-1.fc25.noarch
python-decoratortools-1.8-12.fc25.noarch
m17n-db-1.7.0-7.fc25.noarch
glibc-common-2.24-4.fc25.s390x
e2fsprogs-libs-1.43.3-1.fc25.s390x
libvorbis-1.3.5-1.fc25.s390x
gcc-gdb-plugin-6.3.1-1.fc25.s390x
perl-Time-HiRes-1.9741-1.fc25.s390x
npth-1.3-1.fc25.s390x
libcephfs1-10.2.4-2.fc25.s390x
wayland-devel-1.12.0-1.fc25.s390x
libxcb-devel-1.12-1.fc25.s390x
perl-encoding-2.19-5.fc25.s390x
python3-cssselect-0.9.2-1.fc25.noarch
gettext-libs-0.19.8.1-3.fc25.s390x
at-spi2-atk-devel-2.22.0-1.fc25.s390x
virglrenderer-0.5.0-1.20160411git61846f92f.fc25.s390x
pixman-devel-0.34.0-2.fc24.s390x
libnfs-devel-1.9.8-2.fc24.s390x
libX11-common-1.6.4-4.fc25.noarch
nss-softokn-devel-3.29.3-1.0.fc25.s390x
libblkid-2.28.2-2.fc25.s390x
bind-libs-9.10.4-4.P6.fc25.s390x
glib2-devel-2.50.3-1.fc25.s390x
systemd-udev-231-14.fc25.s390x
texlive-ifxetex-svn19685.0.5-33.fc25.1.noarch
texlive-caption-svn41409-33.fc25.1.noarch
texlive-float-svn15878.1.3d-33.fc25.1.noarch
texlive-pdftex-def-svn22653.0.06d-33.fc25.1.noarch
texlive-xdvi-bin-svn40750-33.20160520.fc25.1.s390x
texlive-beton-svn15878.0-33.fc25.1.noarch
texlive-filecontents-svn24250.1.3-33.fc25.1.noarch
texlive-lm-math-svn36915.1.959-33.fc25.1.noarch
texlive-pslatex-svn16416.0-33.fc25.1.noarch
texlive-times-svn35058.0-33.fc25.1.noarch
texlive-breakurl-svn29901.1.40-33.fc25.1.noarch
texlive-filehook-svn24280.0.5d-33.fc25.1.noarch
texlive-pst-pdf-svn31660.1.1v-33.fc25.1.noarch
texlive-seminar-svn34011.1.62-33.fc25.1.noarch
texlive-xetexconfig-svn41133-33.fc25.1.noarch
systemtap-3.1-2.fc25.s390x
python-rpm-macros-3-12.fc25.noarch
rpm-devel-4.13.0.1-1.fc25.s390x
nss-pem-1.0.3-3.fc25.s390x
mesa-libGL-13.0.4-3.fc25.s390x
at-spi2-core-2.22.1-1.fc25.s390x
pcre2-utf32-10.23-5.fc25.s390x
gtk3-3.22.11-1.fc25.s390x
GeoIP-GeoLite-data-2017.04-1.fc25.noarch
pcre-static-8.40-6.fc25.s390x
kernel-devel-4.10.8-200.fc25.s390x
=== TEST BEGIN ===
Using CC: /home/fam/bin/cc
Install prefix /var/tmp/patchew-tester-tmp-9ddil10x/src/install
BIOS directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/share/qemu
binary directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/bin
library directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/lib
module directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/lib/qemu
libexec directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/libexec
include directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/include
config directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/etc
local state directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/var
Manual directory /var/tmp/patchew-tester-tmp-9ddil10x/src/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /var/tmp/patchew-tester-tmp-9ddil10x/src
C compiler /home/fam/bin/cc
Host C compiler cc
C++ compiler c++
Objective-C compiler /home/fam/bin/cc
ARFLAGS rv
CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -I/usr/include/pixman-1 -Werror -DHAS_LIBSSH2_SFTP_FSYNC -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -D_GNU_SOURCE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1 -I/usr/include/libpng16 -I/usr/include/libdrm -I/usr/include/cacard -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libusb-1.0
LDFLAGS -Wl,--warn-common -m64 -g
make make
install install
python python -B
smbd /usr/sbin/smbd
module support no
host CPU s390x
host big endian yes
target list aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user
tcg debug enabled no
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
pixman system
SDL support yes (2.0.5)
GTK support yes (3.22.11)
GTK GL support yes
VTE support yes (0.46.1)
TLS priority NORMAL
GNUTLS support yes
GNUTLS rnd yes
libgcrypt no
libgcrypt kdf no
nettle yes (3.3)
nettle kdf yes
libtasn1 yes
curses support yes
virgl support yes
curl support yes
mingw32 support no
Audio drivers oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support yes
VNC support yes
VNC SASL support yes
VNC JPEG support yes
VNC PNG support yes
xen support no
brlapi support yes
bluez support yes
Documentation yes
PIE no
vde support no
netmap support no
Linux AIO support yes
ATTR/XATTR support yes
Install blobs yes
KVM support yes
HAX support no
RDMA support no
TCG interpreter no
fdt support yes
preadv support yes
fdatasync yes
madvise yes
posix_madvise yes
libcap-ng support yes
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends log
spice support no
rbd support yes
xfsctl support no
smartcard support yes
libusb yes
usb net redir yes
OpenGL support yes
OpenGL dmabufs yes
libiscsi support yes
libnfs support yes
build guest agent yes
QGA VSS support no
QGA w32 disk info no
QGA MSI support no
seccomp support no
coroutine backend ucontext
coroutine pool yes
debug stack usage no
GlusterFS support yes
gcov gcov
gcov enabled no
TPM support yes
libssh2 support yes
TPM passthrough no
QOM debugging yes
Live block migration yes
lzo support yes
snappy support yes
bzip2 support yes
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization no
replication support yes
VxHS block device no
GEN aarch64-softmmu/config-devices.mak.tmp
GEN alpha-softmmu/config-devices.mak.tmp
GEN arm-softmmu/config-devices.mak.tmp
GEN cris-softmmu/config-devices.mak.tmp
GEN cris-softmmu/config-devices.mak
GEN arm-softmmu/config-devices.mak
GEN alpha-softmmu/config-devices.mak
GEN i386-softmmu/config-devices.mak.tmp
GEN lm32-softmmu/config-devices.mak.tmp
GEN m68k-softmmu/config-devices.mak.tmp
GEN aarch64-softmmu/config-devices.mak
GEN microblazeel-softmmu/config-devices.mak.tmp
GEN lm32-softmmu/config-devices.mak
GEN m68k-softmmu/config-devices.mak
GEN microblaze-softmmu/config-devices.mak.tmp
GEN mips64el-softmmu/config-devices.mak.tmp
GEN i386-softmmu/config-devices.mak
GEN microblazeel-softmmu/config-devices.mak
GEN microblaze-softmmu/config-devices.mak
GEN mips64-softmmu/config-devices.mak.tmp
GEN mips-softmmu/config-devices.mak.tmp
GEN mipsel-softmmu/config-devices.mak.tmp
GEN mips64el-softmmu/config-devices.mak
GEN moxie-softmmu/config-devices.mak.tmp
GEN mipsel-softmmu/config-devices.mak
GEN moxie-softmmu/config-devices.mak
GEN nios2-softmmu/config-devices.mak.tmp
GEN mips64-softmmu/config-devices.mak
GEN mips-softmmu/config-devices.mak
GEN or1k-softmmu/config-devices.mak.tmp
GEN ppcemb-softmmu/config-devices.mak.tmp
GEN ppc64-softmmu/config-devices.mak.tmp
GEN or1k-softmmu/config-devices.mak
GEN nios2-softmmu/config-devices.mak
GEN s390x-softmmu/config-devices.mak.tmp
GEN ppc-softmmu/config-devices.mak.tmp
GEN ppcemb-softmmu/config-devices.mak
GEN ppc64-softmmu/config-devices.mak
GEN s390x-softmmu/config-devices.mak
GEN sh4eb-softmmu/config-devices.mak.tmp
GEN sh4-softmmu/config-devices.mak.tmp
GEN sparc64-softmmu/config-devices.mak.tmp
GEN ppc-softmmu/config-devices.mak
GEN sparc-softmmu/config-devices.mak.tmp
GEN sh4eb-softmmu/config-devices.mak
GEN sh4-softmmu/config-devices.mak
GEN sparc64-softmmu/config-devices.mak
GEN sparc-softmmu/config-devices.mak
GEN unicore32-softmmu/config-devices.mak.tmp
GEN tricore-softmmu/config-devices.mak.tmp
GEN x86_64-softmmu/config-devices.mak.tmp
GEN xtensaeb-softmmu/config-devices.mak.tmp
GEN tricore-softmmu/config-devices.mak
GEN xtensa-softmmu/config-devices.mak.tmp
GEN unicore32-softmmu/config-devices.mak
GEN xtensaeb-softmmu/config-devices.mak
GEN aarch64-linux-user/config-devices.mak.tmp
GEN alpha-linux-user/config-devices.mak.tmp
GEN x86_64-softmmu/config-devices.mak
GEN xtensa-softmmu/config-devices.mak
GEN aarch64-linux-user/config-devices.mak
GEN armeb-linux-user/config-devices.mak.tmp
GEN arm-linux-user/config-devices.mak.tmp
GEN alpha-linux-user/config-devices.mak
GEN cris-linux-user/config-devices.mak.tmp
GEN hppa-linux-user/config-devices.mak.tmp
GEN armeb-linux-user/config-devices.mak
GEN cris-linux-user/config-devices.mak
GEN arm-linux-user/config-devices.mak
GEN i386-linux-user/config-devices.mak.tmp
GEN hppa-linux-user/config-devices.mak
GEN m68k-linux-user/config-devices.mak.tmp
GEN microblazeel-linux-user/config-devices.mak.tmp
GEN microblaze-linux-user/config-devices.mak.tmp
GEN m68k-linux-user/config-devices.mak
GEN microblazeel-linux-user/config-devices.mak
GEN i386-linux-user/config-devices.mak
GEN mips64el-linux-user/config-devices.mak.tmp
GEN microblaze-linux-user/config-devices.mak
GEN mips64-linux-user/config-devices.mak.tmp
GEN mipsel-linux-user/config-devices.mak.tmp
GEN mips-linux-user/config-devices.mak.tmp
GEN mips64-linux-user/config-devices.mak
GEN mips64el-linux-user/config-devices.mak
GEN mipsel-linux-user/config-devices.mak
GEN mips-linux-user/config-devices.mak
GEN mipsn32el-linux-user/config-devices.mak.tmp
GEN mipsn32-linux-user/config-devices.mak.tmp
GEN or1k-linux-user/config-devices.mak.tmp
GEN nios2-linux-user/config-devices.mak.tmp
GEN mipsn32-linux-user/config-devices.mak
GEN or1k-linux-user/config-devices.mak
GEN mipsn32el-linux-user/config-devices.mak
GEN nios2-linux-user/config-devices.mak
GEN ppc64abi32-linux-user/config-devices.mak.tmp
GEN ppc64le-linux-user/config-devices.mak.tmp
GEN ppc64-linux-user/config-devices.mak.tmp
GEN ppc-linux-user/config-devices.mak.tmp
GEN ppc64abi32-linux-user/config-devices.mak
GEN ppc64le-linux-user/config-devices.mak
GEN ppc64-linux-user/config-devices.mak
GEN s390x-linux-user/config-devices.mak.tmp
GEN sh4eb-linux-user/config-devices.mak.tmp
GEN sh4-linux-user/config-devices.mak.tmp
GEN ppc-linux-user/config-devices.mak
GEN sparc32plus-linux-user/config-devices.mak.tmp
GEN sh4eb-linux-user/config-devices.mak
GEN s390x-linux-user/config-devices.mak
GEN sh4-linux-user/config-devices.mak
GEN sparc-linux-user/config-devices.mak.tmp
GEN sparc64-linux-user/config-devices.mak.tmp
GEN tilegx-linux-user/config-devices.mak.tmp
GEN sparc32plus-linux-user/config-devices.mak
GEN x86_64-linux-user/config-devices.mak.tmp
GEN sparc-linux-user/config-devices.mak
GEN sparc64-linux-user/config-devices.mak
GEN tilegx-linux-user/config-devices.mak
GEN config-host.h
GEN qemu-options.def
GEN x86_64-linux-user/config-devices.mak
GEN qmp-commands.h
GEN qapi-types.h
GEN qapi-visit.h
GEN qapi-event.h
GEN qmp-marshal.c
GEN qapi-types.c
GEN qapi-visit.c
GEN qapi-event.c
GEN qmp-introspect.h
GEN qmp-introspect.c
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers-wrappers.h
GEN trace/generated-helpers.h
GEN trace/generated-helpers.c
GEN module_block.h
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN tests/test-qmp-commands.h
GEN tests/test-qmp-introspect.h
GEN tests/test-qapi-event.h
GEN util/trace.h
GEN trace-root.h
GEN crypto/trace.h
GEN io/trace.h
GEN migration/trace.h
GEN block/trace.h
GEN backends/trace.h
GEN hw/block/trace.h
GEN hw/block/dataplane/trace.h
GEN hw/char/trace.h
GEN hw/intc/trace.h
GEN hw/net/trace.h
GEN hw/virtio/trace.h
GEN hw/audio/trace.h
GEN hw/misc/trace.h
GEN hw/usb/trace.h
GEN hw/scsi/trace.h
GEN hw/nvram/trace.h
GEN hw/input/trace.h
GEN hw/display/trace.h
GEN hw/timer/trace.h
GEN hw/dma/trace.h
GEN hw/sparc/trace.h
GEN hw/sd/trace.h
GEN hw/isa/trace.h
GEN hw/mem/trace.h
GEN hw/i386/trace.h
GEN hw/i386/xen/trace.h
GEN hw/9pfs/trace.h
GEN hw/ppc/trace.h
GEN hw/pci/trace.h
GEN hw/s390x/trace.h
GEN hw/vfio/trace.h
GEN hw/acpi/trace.h
GEN hw/arm/trace.h
GEN hw/alpha/trace.h
GEN hw/xen/trace.h
GEN ui/trace.h
GEN net/trace.h
GEN audio/trace.h
GEN target/arm/trace.h
GEN target/i386/trace.h
GEN target/mips/trace.h
GEN target/sparc/trace.h
GEN target/ppc/trace.h
GEN target/s390x/trace.h
GEN qom/trace.h
GEN linux-user/trace.h
GEN qapi/trace.h
GEN trace-root.c
GEN util/trace.c
GEN crypto/trace.c
GEN io/trace.c
GEN migration/trace.c
GEN block/trace.c
GEN backends/trace.c
GEN hw/block/trace.c
GEN hw/block/dataplane/trace.c
GEN hw/char/trace.c
GEN hw/intc/trace.c
GEN hw/net/trace.c
GEN hw/virtio/trace.c
GEN hw/misc/trace.c
GEN hw/audio/trace.c
GEN hw/usb/trace.c
GEN hw/scsi/trace.c
GEN hw/nvram/trace.c
GEN hw/display/trace.c
GEN hw/input/trace.c
GEN hw/timer/trace.c
GEN hw/dma/trace.c
GEN hw/sparc/trace.c
GEN hw/sd/trace.c
GEN hw/isa/trace.c
GEN hw/mem/trace.c
GEN hw/i386/trace.c
GEN hw/i386/xen/trace.c
GEN hw/9pfs/trace.c
GEN hw/ppc/trace.c
GEN hw/pci/trace.c
GEN hw/s390x/trace.c
GEN hw/vfio/trace.c
GEN hw/acpi/trace.c
GEN hw/arm/trace.c
GEN hw/alpha/trace.c
GEN hw/xen/trace.c
GEN ui/trace.c
GEN audio/trace.c
GEN net/trace.c
GEN target/arm/trace.c
GEN target/i386/trace.c
GEN target/mips/trace.c
GEN target/sparc/trace.c
GEN target/s390x/trace.c
GEN qom/trace.c
GEN target/ppc/trace.c
GEN linux-user/trace.c
GEN qapi/trace.c
GEN config-all-devices.mak
CC tests/qemu-iotests/socket_scm_helper.o
GEN qemu-options.texi
GEN qemu-monitor.texi
GEN qemu-img-cmds.texi
GEN qemu-monitor-info.texi
GEN qemu-img.1
GEN qemu-nbd.8
GEN qemu-ga.8
GEN docs/version.texi
GEN docs/qemu-qmp-qapi.texi
GEN docs/qemu-ga-qapi.texi
GEN fsdev/virtfs-proxy-helper.1
GEN qga/qapi-generated/qga-qapi-types.h
GEN qga/qapi-generated/qga-qapi-visit.h
GEN qga/qapi-generated/qga-qmp-commands.h
GEN qga/qapi-generated/qga-qapi-types.c
GEN qga/qapi-generated/qga-qapi-visit.c
GEN qga/qapi-generated/qga-qmp-marshal.c
CC qapi-types.o
CC qmp-introspect.o
CC qapi-visit.o
CC qapi-event.o
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnull.o
CC qobject/qint.o
CC qobject/qdict.o
CC qobject/qstring.o
CC qobject/qlist.o
CC qobject/qfloat.o
CC qobject/qbool.o
CC qobject/qjson.o
CC qobject/qobject.o
CC qobject/json-lexer.o
CC qobject/json-parser.o
CC qobject/json-streamer.o
CC trace/control.o
CC util/osdep.o
CC trace/qmp.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/lockcnt.o
CC util/aiocb.o
CC util/async.o
CC util/qemu-timer.o
CC util/thread-pool.o
CC util/main-loop.o
CC util/iohandler.o
CC util/aio-posix.o
CC util/compatfd.o
CC util/event_notifier-posix.o
CC util/mmap-alloc.o
CC util/oslib-posix.o
CC util/qemu-openpty.o
CC util/qemu-thread-posix.o
CC util/memfd.o
CC util/envlist.o
CC util/path.o
CC util/module.o
CC util/host-utils.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/fifo8.o
CC util/acl.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/notify.o
CC util/qemu-option.o
CC util/qemu-progress.o
CC util/keyval.o
CC util/hexdump.o
CC util/crc32c.o
CC util/uuid.o
CC util/throttle.o
CC util/getauxval.o
CC util/readline.o
CC util/qemu-coroutine.o
CC util/rcu.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-io.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-ucontext.o
CC util/buffer.o
CC util/timed-average.o
CC util/base64.o
CC util/log.o
CC util/qdist.o
CC util/qht.o
CC util/range.o
CC util/systemd.o
CC trace-root.o
CC util/trace.o
CC crypto/trace.o
CC io/trace.o
CC migration/trace.o
CC block/trace.o
CC backends/trace.o
CC hw/block/trace.o
CC hw/block/dataplane/trace.o
CC hw/char/trace.o
CC hw/intc/trace.o
CC hw/net/trace.o
CC hw/virtio/trace.o
CC hw/audio/trace.o
CC hw/misc/trace.o
CC hw/usb/trace.o
CC hw/scsi/trace.o
CC hw/nvram/trace.o
CC hw/display/trace.o
CC hw/input/trace.o
CC hw/timer/trace.o
CC hw/dma/trace.o
CC hw/sparc/trace.o
CC hw/sd/trace.o
CC hw/isa/trace.o
CC hw/mem/trace.o
CC hw/i386/trace.o
CC hw/i386/xen/trace.o
CC hw/9pfs/trace.o
CC hw/ppc/trace.o
CC hw/s390x/trace.o
CC hw/pci/trace.o
CC hw/vfio/trace.o
CC hw/acpi/trace.o
CC hw/arm/trace.o
CC hw/alpha/trace.o
CC hw/xen/trace.o
CC ui/trace.o
CC audio/trace.o
CC net/trace.o
CC target/arm/trace.o
CC target/i386/trace.o
CC target/mips/trace.o
CC target/sparc/trace.o
CC target/s390x/trace.o
CC target/ppc/trace.o
CC qom/trace.o
CC linux-user/trace.o
CC qapi/trace.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/blk-commit-all.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/clock-warp.o
CC stubs/cpu-get-clock.o
CC stubs/cpu-get-icount.o
CC stubs/dump.o
CC stubs/error-printf.o
CC stubs/fdset.o
CC stubs/gdbstub.o
CC stubs/get-vm-name.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/is-daemonized.o
CC stubs/linux-aio.o
CC stubs/machine-init-done.o
CC stubs/migr-blocker.o
CC stubs/monitor.o
CC stubs/notify-event.o
CC stubs/qtest.o
CC stubs/runstate-check.o
CC stubs/replay.o
CC stubs/set-fd-handler.o
CC stubs/slirp.o
CC stubs/sysbus.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vm-stop.o
CC stubs/vmstate.o
CC stubs/qmp_pc_dimm_device_list.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/xen-common.o
CC stubs/vmgenid.o
CC stubs/xen-hvm.o
CC contrib/ivshmem-client/main.o
CC contrib/ivshmem-client/ivshmem-client.o
CC contrib/ivshmem-server/ivshmem-server.o
CC contrib/ivshmem-server/main.o
CC qemu-nbd.o
CC block.o
CC blockjob.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/dmg.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/qcow2-cluster.o
CC block/qcow2-snapshot.o
CC block/qcow2-cache.o
CC block/qed.o
CC block/qed-l2-cache.o
CC block/qed-gencb.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-posix.o
CC block/linux-aio.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/sheepdog.o
CC block/iscsi-opts.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/write-threshold.o
CC block/backup.o
CC block/replication.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC block/iscsi.o
CC block/nfs.o
CC block/curl.o
CC block/rbd.o
CC block/gluster.o
CC block/ssh.o
CC crypto/init.o
CC block/dmg-bz2.o
CC crypto/hash.o
CC crypto/hash-nettle.o
CC crypto/hmac.o
CC crypto/hmac-nettle.o
CC crypto/aes.o
CC crypto/cipher.o
CC crypto/desrfb.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlssession.o
CC crypto/tlscredsx509.o
CC crypto/secret.o
CC crypto/random-gnutls.o
CC crypto/pbkdf.o
CC crypto/pbkdf-nettle.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/ivgen-plain64.o
CC crypto/afsplit.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-socket.o
CC io/channel-file.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/dns-resolver.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
GEN qemu-img-cmds.h
CC qemu-io.o
CC fsdev/virtfs-proxy-helper.o
CC fsdev/9p-marshal.o
CC fsdev/9p-iov-marshal.o
CC qemu-bridge-helper.o
CC blockdev-nbd.o
CC blockdev.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-posix.o
CC accel.o
CC bt-host.o
CC bt-vhci.o
CC dma-helpers.o
CC vl.o
CC tpm.o
CC device_tree.o
CC qmp-marshal.o
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/ossaudio.o
CC audio/sdlaudio.o
CC audio/wavcapture.o
CC backends/rng.o
CC backends/rng-egd.o
CC backends/rng-random.o
CC backends/msmouse.o
CC backends/wctablet.o
CC backends/testdev.o
CC backends/baum.o
CC backends/tpm.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/hostmem-file.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC block/stream.o
CC disas/alpha.o
CC disas/arm.o
CXX disas/arm-a64.o
CC disas/cris.o
CC disas/hppa.o
CC disas/i386.o
CC disas/m68k.o
CC disas/microblaze.o
CC disas/mips.o
CC disas/nios2.o
CC disas/moxie.o
CC disas/ppc.o
CC disas/s390.o
CC disas/sh4.o
CC disas/sparc.o
CC disas/lm32.o
CXX disas/libvixl/vixl/utils.o
CXX disas/libvixl/vixl/compiler-intrinsics.o
CXX disas/libvixl/vixl/a64/instructions-a64.o
CXX disas/libvixl/vixl/a64/decoder-a64.o
CXX disas/libvixl/vixl/a64/disasm-a64.o
CC fsdev/qemu-fsdev.o
CC fsdev/qemu-fsdev-opts.o
CC fsdev/qemu-fsdev-throttle.o
CC fsdev/qemu-fsdev-dummy.o
CC hw/9pfs/9p.o
CC hw/9pfs/9p-util.o
CC hw/9pfs/9p-local.o
CC hw/9pfs/9p-xattr.o
CC hw/9pfs/9p-xattr-user.o
CC hw/9pfs/9p-posix-acl.o
CC hw/9pfs/coth.o
CC hw/9pfs/cofs.o
CC hw/9pfs/codir.o
CC hw/9pfs/cofile.o
CC hw/9pfs/coxattr.o
CC hw/9pfs/9p-synth.o
CC hw/9pfs/9p-handle.o
CC hw/9pfs/9p-proxy.o
CC hw/acpi/core.o
CC hw/acpi/piix4.o
CC hw/acpi/pcihp.o
CC hw/acpi/ich9.o
CC hw/acpi/tco.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/cpu.o
CC hw/acpi/nvdimm.o
CC hw/acpi/vmgenid.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/acpi-stub.o
CC hw/acpi/ipmi.o
CC hw/acpi/ipmi-stub.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/wm8750.o
CC hw/audio/pl041.o
CC hw/audio/lm4549.o
CC hw/audio/cs4231.o
CC hw/audio/marvell_88w8618.o
CC hw/audio/milkymist-ac97.o
CC hw/audio/soundhw.o
CC hw/block/block.o
CC hw/block/hd-geometry.o
CC hw/block/cdrom.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi01.o
CC hw/block/pflash_cfi02.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/escc.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial.o
CC hw/char/serial-isa.o
CC hw/char/serial-pci.o
CC hw/char/virtio-console.o
CC hw/char/xilinx_uartlite.o
CC hw/char/cadence_uart.o
CC hw/char/etraxfs_ser.o
CC hw/char/debugcon.o
CC hw/char/grlib_apbuart.o
CC hw/char/imx_serial.o
CC hw/char/lm32_juart.o
CC hw/char/lm32_uart.o
CC hw/char/milkymist-uart.o
CC hw/char/sclpconsole.o
CC hw/char/sclpconsole-lm.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/reset.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/empty_slot.o
CC hw/core/stream.o
CC hw/core/ptimer.o
CC hw/core/sysbus.o
CC hw/core/machine.o
CC hw/core/loader.o
CC hw/core/loader-fit.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/g364fb.o
CC hw/display/jazz_led.o
CC hw/display/pl110.o
CC hw/display/ssd0303.o
CC hw/display/ssd0323.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vga-isa-mm.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/display/milkymist-vgafb.o
CC hw/display/tc6393xb.o
CC hw/display/milkymist-tmu2.o
CC hw/dma/puv3_dma.o
CC hw/dma/rc4030.o
CC hw/dma/pl080.o
CC hw/dma/pl330.o
CC hw/dma/i82374.o
CC hw/dma/i8257.o
CC hw/dma/xilinx_axidma.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/dma/etraxfs_dma.o
CC hw/dma/sparc32_dma.o
CC hw/dma/sun4m_iommu.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/puv3_gpio.o
CC hw/gpio/zaurus.o
CC hw/gpio/mpc8xxx.o
CC hw/gpio/gpio_key.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/core.o
CC hw/ide/atapi.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/cmd646.o
CC hw/ide/macio.o
CC hw/ide/mmio.o
CC hw/ide/via.o
CC hw/ide/microdrive.o
CC hw/ide/ahci.o
CC hw/ide/ich.o
CC hw/input/adb.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/stellaris_input.o
CC hw/input/tsc2005.o
CC hw/input/vmmouse.o
CC hw/input/virtio-input.o
CC hw/input/virtio-input-hid.o
CC hw/input/virtio-input-host.o
CC hw/intc/heathrow_pic.o
CC hw/intc/i8259_common.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/puv3_intc.o
CC hw/intc/xilinx_intc.o
CC hw/intc/etraxfs_pic.o
CC hw/intc/imx_avic.o
CC hw/intc/lm32_pic.o
CC hw/intc/realview_gic.o
CC hw/intc/slavio_intctl.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/openpic.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/isa-bus.o
CC hw/isa/apm.o
CC hw/isa/i82378.o
CC hw/isa/pc87312.o
CC hw/isa/piix4.o
CC hw/isa/vt82c686.o
CC hw/mem/pc-dimm.o
CC hw/mem/nvdimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/tmp105.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/unimp.o
CC hw/misc/arm_l2x0.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/arm11scu.o
CC hw/misc/puv3_pm.o
CC hw/misc/macio/macio.o
CC hw/misc/macio/cuda.o
CC hw/misc/macio/mac_dbdma.o
CC hw/net/dp8393x.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet-pci.o
CC hw/net/pcnet.o
CC hw/net/e1000x_common.o
CC hw/net/e1000.o
CC hw/net/net_tx_pkt.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/vmxnet3.o
CC hw/net/smc91c111.o
CC hw/net/lan9118.o
CC hw/net/ne2000-isa.o
CC hw/net/opencores_eth.o
CC hw/net/xgmac.o
CC hw/net/mipsnet.o
CC hw/net/xilinx_axienet.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/lance.o
CC hw/net/ftgmac100.o
CC hw/net/rocker/rocker.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/nvram/ds1225y.o
CC hw/nvram/eeprom93xx.o
CC hw/nvram/fw_cfg.o
CC hw/nvram/chrp_nvram.o
CC hw/nvram/mac_nvram.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pcie_root_port.o
CC hw/pci-bridge/gen_pcie_root_port.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-bridge/i82801b11.o
CC hw/pci-bridge/dec.o
CC hw/pci-host/pam.o
CC hw/pci-host/prep.o
CC hw/pci-host/grackle.o
CC hw/pci-host/uninorth.o
CC hw/pci-host/ppce500.o
CC hw/pci-host/versatile.o
CC hw/pci-host/apb.o
CC hw/pci-host/bonito.o
CC hw/pci-host/piix.o
CC hw/pci-host/q35.o
CC hw/pci-host/gpex.o
CC hw/pci-host/xilinx-pcie.o
CC hw/pci/pci.o
CC hw/pci/pci_bridge.o
CC hw/pci/msix.o
CC hw/pci/msi.o
CC hw/pci/shpc.o
CC hw/pci/slotid_cap.o
CC hw/pci/pci_host.o
CC hw/pci/pcie_host.o
CC hw/pci/pcie.o
CC hw/pci/pcie_aer.o
CC hw/pci/pcie_port.o
CC hw/pci/pci-stub.o
CC hw/pcmcia/pcmcia.o
CC hw/scsi/scsi-disk.o
CC hw/scsi/scsi-generic.o
CC hw/scsi/scsi-bus.o
CC hw/scsi/lsi53c895a.o
CC hw/scsi/mptsas.o
CC hw/scsi/mptconfig.o
CC hw/scsi/mptendian.o
CC hw/scsi/megasas.o
CC hw/scsi/vmw_pvscsi.o
CC hw/scsi/esp.o
CC hw/scsi/esp-pci.o
CC hw/sd/pl181.o
CC hw/sd/ssi-sd.o
CC hw/sd/sd.o
CC hw/sd/core.o
CC hw/sd/sdhci.o
CC hw/smbios/smbios.o
CC hw/smbios/smbios_type_38.o
CC hw/smbios/smbios-stub.o
CC hw/smbios/smbios_type_38-stub.o
CC hw/ssi/pl022.o
CC hw/ssi/ssi.o
CC hw/ssi/xilinx_spi.o
CC hw/ssi/xilinx_spips.o
CC hw/ssi/aspeed_smc.o
CC hw/ssi/stm32f2xx_spi.o
CC hw/timer/arm_timer.o
CC hw/timer/arm_mptimer.o
CC hw/timer/armv7m_systick.o
CC hw/timer/a9gtimer.o
CC hw/timer/cadence_ttc.o
CC hw/timer/ds1338.o
CC hw/timer/hpet.o
CC hw/timer/i8254_common.o
CC hw/timer/i8254.o
CC hw/timer/m48t59.o
CC hw/timer/m48t59-isa.o
CC hw/timer/pl031.o
CC hw/timer/puv3_ost.o
CC hw/timer/twl92230.o
CC hw/timer/xilinx_timer.o
CC hw/timer/slavio_timer.o
CC hw/timer/etraxfs_timer.o
CC hw/timer/grlib_gptimer.o
CC hw/timer/imx_epit.o
CC hw/timer/lm32_timer.o
CC hw/timer/imx_gpt.o
CC hw/timer/milkymist-sysctl.o
CC hw/timer/stm32f2xx_timer.o
CC hw/timer/aspeed_timer.o
CC hw/timer/sun4v-rtc.o
CC hw/tpm/tpm_tis.o
CC hw/usb/core.o
CC hw/usb/combined-packet.o
CC hw/usb/bus.o
CC hw/usb/libhw.o
CC hw/usb/desc.o
CC hw/usb/desc-msos.o
CC hw/usb/hcd-uhci.o
CC hw/usb/hcd-ohci.o
CC hw/usb/hcd-ehci.o
CC hw/usb/hcd-ehci-pci.o
CC hw/usb/hcd-ehci-sysbus.o
CC hw/usb/hcd-xhci.o
CC hw/usb/hcd-xhci-nec.o
CC hw/usb/hcd-musb.o
CC hw/usb/dev-hub.o
CC hw/usb/dev-hid.o
CC hw/usb/dev-wacom.o
CC hw/usb/dev-storage.o
CC hw/usb/dev-uas.o
CC hw/usb/dev-audio.o
CC hw/usb/dev-serial.o
CC hw/usb/dev-network.o
CC hw/usb/dev-smartcard-reader.o
CC hw/usb/dev-bluetooth.o
CC hw/usb/ccid-card-passthru.o
CC hw/usb/ccid-card-emulated.o
CC hw/usb/dev-mtp.o
CC hw/usb/redirect.o
CC hw/usb/quirks.o
CC hw/usb/host-libusb.o
CC hw/usb/host-legacy.o
CC hw/virtio/virtio-rng.o
CC hw/virtio/virtio-pci.o
CC hw/virtio/virtio-bus.o
CC hw/virtio/virtio-mmio.o
CC hw/virtio/vhost-stub.o
CC hw/watchdog/watchdog.o
CC hw/watchdog/wdt_i6300esb.o
CC hw/watchdog/wdt_ib700.o
CC hw/watchdog/wdt_diag288.o
CC hw/watchdog/wdt_aspeed.o
CC migration/migration.o
CC migration/socket.o
CC migration/fd.o
CC migration/exec.o
CC migration/tls.o
CC migration/channel.o
CC migration/savevm.o
CC migration/colo-comm.o
CC migration/colo.o
CC migration/colo-failover.o
CC migration/vmstate.o
CC migration/vmstate-types.o
CC migration/page_cache.o
CC migration/qemu-file.o
CC migration/xbzrle.o
CC migration/qemu-file-channel.o
CC migration/postcopy-ram.o
CC migration/qjson.o
CC migration/block.o
CC net/net.o
CC net/queue.o
CC net/checksum.o
CC net/util.o
CC net/hub.o
CC net/socket.o
CC net/dump.o
CC net/eth.o
CC net/l2tpv3.o
CC net/vhost-user.o
CC net/slirp.o
CC net/filter.o
CC net/filter-mirror.o
CC net/filter-buffer.o
CC net/colo-compare.o
CC net/colo.o
CC net/filter-rewriter.o
CC net/filter-replay.o
CC net/tap.o
CC net/tap-linux.o
CC qom/cpu.o
CC replay/replay.o
CC replay/replay-internal.o
CC replay/replay-events.o
CC replay/replay-time.o
CC replay/replay-input.o
CC replay/replay-char.o
CC replay/replay-snapshot.o
CC replay/replay-net.o
CC replay/replay-audio.o
CC slirp/cksum.o
CC slirp/if.o
CC slirp/ip_icmp.o
CC slirp/ip6_icmp.o
CC slirp/ip6_input.o
CC slirp/ip6_output.o
CC slirp/ip_input.o
CC slirp/ip_output.o
CC slirp/dnssearch.o
CC slirp/dhcpv6.o
CC slirp/mbuf.o
CC slirp/slirp.o
CC slirp/misc.o
CC slirp/sbuf.o
CC slirp/socket.o
CC slirp/tcp_input.o
CC slirp/tcp_output.o
CC slirp/tcp_subr.o
CC slirp/tcp_timer.o
CC slirp/udp.o
CC slirp/udp6.o
CC slirp/bootp.o
CC slirp/tftp.o
CC slirp/arp_table.o
CC slirp/ndp_table.o
CC slirp/ncsi.o
CC ui/keymaps.o
CC ui/console.o
CC ui/cursor.o
CC ui/qemu-pixman.o
CC ui/input.o
CC ui/input-keymap.o
CC ui/input-legacy.o
CC ui/input-linux.o
CC ui/sdl2.o
CC ui/sdl2-input.o
CC ui/sdl2-2d.o
CC ui/sdl2-gl.o
CC ui/x_keymap.o
CC ui/curses.o
CC ui/vnc.o
CC ui/vnc-enc-zlib.o
CC ui/vnc-enc-hextile.o
CC ui/vnc-enc-tight.o
CC ui/vnc-palette.o
CC ui/vnc-enc-zrle.o
CC ui/vnc-auth-vencrypt.o
CC ui/vnc-auth-sasl.o
CC ui/vnc-ws.o
CC ui/vnc-jobs.o
CC ui/gtk.o
CC ui/shader.o
VERT ui/shader/texture-blit-vert.h
FRAG ui/shader/texture-blit-frag.h
CC ui/egl-helpers.o
CC ui/egl-context.o
CC ui/egl-headless.o
CC ui/gtk-gl-area.o
CC chardev/char.o
CC chardev/char-fd.o
CC chardev/char-file.o
CC chardev/char-io.o
CC chardev/char-mux.o
CC chardev/char-null.o
CC chardev/char-parallel.o
CC chardev/char-pipe.o
CC chardev/char-pty.o
CC chardev/char-ringbuf.o
CC chardev/char-serial.o
CC chardev/char-socket.o
CC chardev/char-stdio.o
CC chardev/char-udp.o
CCAS s390-ccw/start.o
CC s390-ccw/main.o
LINK tests/qemu-iotests/socket_scm_helper
GEN qemu-doc.html
GEN qemu-doc.txt
CC s390-ccw/bootmap.o
GEN qemu.1
CC s390-ccw/sclp.o
CC s390-ccw/virtio.o
CC s390-ccw/virtio-scsi.o
GEN docs/qemu-qmp-ref.html
BUILD s390-ccw/s390-ccw.elf
STRIP s390-ccw/s390-ccw.img
GEN docs/qemu-qmp-ref.7
GEN docs/qemu-qmp-ref.txt
GEN docs/qemu-ga-ref.html
GEN docs/qemu-ga-ref.txt
GEN docs/qemu-ga-ref.7
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/main.o
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
CC qga/qapi-generated/qga-qapi-visit.o
CC qga/qapi-generated/qga-qmp-marshal.o
AR libqemuutil.a
AR libqemustub.a
CC qemu-img.o
CC ui/console-gl.o
LINK ivshmem-client
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-io
LINK fsdev/virtfs-proxy-helper
LINK qemu-bridge-helper
GEN aarch64-softmmu/hmp-commands.h
GEN cris-softmmu/hmp-commands.h
GEN aarch64-softmmu/hmp-commands-info.h
GEN cris-softmmu/hmp-commands-info.h
GEN alpha-softmmu/hmp-commands.h
GEN aarch64-softmmu/config-target.h
GEN arm-softmmu/hmp-commands.h
GEN cris-softmmu/config-target.h
CC aarch64-softmmu/exec.o
GEN alpha-softmmu/hmp-commands-info.h
CC cris-softmmu/exec.o
GEN arm-softmmu/hmp-commands-info.h
GEN alpha-softmmu/config-target.h
GEN arm-softmmu/config-target.h
CC alpha-softmmu/exec.o
CC arm-softmmu/exec.o
CC aarch64-softmmu/translate-all.o
CC cris-softmmu/translate-all.o
CC alpha-softmmu/translate-all.o
CC arm-softmmu/translate-all.o
CC cris-softmmu/cpu-exec.o
CC alpha-softmmu/cpu-exec.o
CC cris-softmmu/translate-common.o
CC aarch64-softmmu/cpu-exec.o
CC alpha-softmmu/translate-common.o
CC cris-softmmu/cpu-exec-common.o
CC alpha-softmmu/cpu-exec-common.o
CC arm-softmmu/cpu-exec.o
CC cris-softmmu/tcg/tcg.o
CC alpha-softmmu/tcg/tcg.o
CC aarch64-softmmu/translate-common.o
CC arm-softmmu/translate-common.o
CC aarch64-softmmu/cpu-exec-common.o
CC aarch64-softmmu/tcg/tcg.o
CC arm-softmmu/cpu-exec-common.o
CC arm-softmmu/tcg/tcg.o
CC cris-softmmu/tcg/tcg-op.o
CC alpha-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/tcg/tcg-op.o
CC arm-softmmu/tcg/tcg-op.o
CC cris-softmmu/tcg/optimize.o
CC alpha-softmmu/tcg/optimize.o
CC cris-softmmu/tcg/tcg-common.o
CC cris-softmmu/fpu/softfloat.o
CC alpha-softmmu/tcg/tcg-common.o
CC alpha-softmmu/fpu/softfloat.o
CC aarch64-softmmu/tcg/optimize.o
CC arm-softmmu/tcg/optimize.o
CC aarch64-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/fpu/softfloat.o
CC arm-softmmu/tcg/tcg-common.o
CC cris-softmmu/disas.o
CC arm-softmmu/fpu/softfloat.o
CC cris-softmmu/tcg-runtime.o
CC cris-softmmu/hax-stub.o
CC alpha-softmmu/disas.o
CC cris-softmmu/kvm-stub.o
CC alpha-softmmu/tcg-runtime.o
CC cris-softmmu/arch_init.o
CC alpha-softmmu/hax-stub.o
CC cris-softmmu/cpus.o
CC alpha-softmmu/kvm-stub.o
CC aarch64-softmmu/disas.o
CC alpha-softmmu/arch_init.o
CC arm-softmmu/disas.o
CC cris-softmmu/monitor.o
CC alpha-softmmu/cpus.o
CC aarch64-softmmu/tcg-runtime.o
CC arm-softmmu/tcg-runtime.o
CC alpha-softmmu/monitor.o
GEN aarch64-softmmu/gdbstub-xml.c
GEN arm-softmmu/gdbstub-xml.c
CC aarch64-softmmu/hax-stub.o
CC aarch64-softmmu/kvm-stub.o
CC arm-softmmu/hax-stub.o
CC aarch64-softmmu/arch_init.o
CC arm-softmmu/kvm-stub.o
CC cris-softmmu/gdbstub.o
CC aarch64-softmmu/cpus.o
CC arm-softmmu/arch_init.o
CC alpha-softmmu/gdbstub.o
CC cris-softmmu/balloon.o
CC aarch64-softmmu/monitor.o
CC arm-softmmu/cpus.o
CC cris-softmmu/ioport.o
CC alpha-softmmu/balloon.o
CC cris-softmmu/numa.o
CC alpha-softmmu/ioport.o
CC arm-softmmu/monitor.o
CC cris-softmmu/qtest.o
CC alpha-softmmu/numa.o
CC aarch64-softmmu/gdbstub.o
CC cris-softmmu/bootdevice.o
CC alpha-softmmu/qtest.o
CC cris-softmmu/memory.o
CC aarch64-softmmu/balloon.o
CC arm-softmmu/gdbstub.o
CC alpha-softmmu/bootdevice.o
CC aarch64-softmmu/ioport.o
CC arm-softmmu/balloon.o
CC arm-softmmu/ioport.o
CC aarch64-softmmu/numa.o
CC alpha-softmmu/memory.o
CC arm-softmmu/numa.o
CC aarch64-softmmu/qtest.o
CC cris-softmmu/cputlb.o
CC arm-softmmu/qtest.o
CC aarch64-softmmu/bootdevice.o
CC alpha-softmmu/cputlb.o
CC arm-softmmu/bootdevice.o
CC aarch64-softmmu/memory.o
CC cris-softmmu/memory_mapping.o
CC arm-softmmu/memory.o
CC cris-softmmu/dump.o
CC aarch64-softmmu/cputlb.o
CC alpha-softmmu/memory_mapping.o
CC arm-softmmu/cputlb.o
CC alpha-softmmu/dump.o
CC cris-softmmu/migration/ram.o
CC alpha-softmmu/migration/ram.o
CC aarch64-softmmu/memory_mapping.o
CC cris-softmmu/hw/core/nmi.o
CC aarch64-softmmu/dump.o
CC arm-softmmu/memory_mapping.o
CC cris-softmmu/hw/core/generic-loader.o
CC arm-softmmu/dump.o
CC alpha-softmmu/hw/9pfs/virtio-9p-device.o
CC cris-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/migration/ram.o
CC cris-softmmu/hw/cpu/core.o
CC alpha-softmmu/hw/block/virtio-blk.o
CC arm-softmmu/migration/ram.o
CC cris-softmmu/hw/net/etraxfs_eth.o
CC cris-softmmu/hw/net/vhost_net.o
CC alpha-softmmu/hw/block/dataplane/virtio-blk.o
CC cris-softmmu/hw/net/rocker/qmp-norocker.o
CC aarch64-softmmu/hw/9pfs/virtio-9p-device.o
CC alpha-softmmu/hw/char/virtio-serial-bus.o
CC cris-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o
CC arm-softmmu/hw/9pfs/virtio-9p-device.o
CC arm-softmmu/hw/adc/stm32f2xx_adc.o
CC alpha-softmmu/hw/core/nmi.o
CC aarch64-softmmu/hw/block/virtio-blk.o
CC cris-softmmu/hw/vfio/platform.o
CC alpha-softmmu/hw/core/generic-loader.o
CC arm-softmmu/hw/block/virtio-blk.o
CC cris-softmmu/hw/vfio/spapr.o
CC alpha-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o
CC cris-softmmu/hw/cris/boot.o
CC alpha-softmmu/hw/cpu/core.o
CC arm-softmmu/hw/block/dataplane/virtio-blk.o
CC cris-softmmu/hw/cris/axis_dev88.o
CC aarch64-softmmu/hw/char/exynos4210_uart.o
CC alpha-softmmu/hw/display/vga.o
CC cris-softmmu/target/cris/translate.o
CC aarch64-softmmu/hw/char/omap_uart.o
CC arm-softmmu/hw/char/exynos4210_uart.o
CC aarch64-softmmu/hw/char/digic-uart.o
CC arm-softmmu/hw/char/omap_uart.o
CC arm-softmmu/hw/char/digic-uart.o
CC aarch64-softmmu/hw/char/stm32f2xx_usart.o
CC arm-softmmu/hw/char/stm32f2xx_usart.o
CC alpha-softmmu/hw/display/virtio-gpu.o
CC aarch64-softmmu/hw/char/bcm2835_aux.o
CC arm-softmmu/hw/char/bcm2835_aux.o
CC aarch64-softmmu/hw/char/virtio-serial-bus.o
CC arm-softmmu/hw/char/virtio-serial-bus.o
CC cris-softmmu/target/cris/op_helper.o
CC alpha-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/core/nmi.o
CC cris-softmmu/target/cris/helper.o
CC arm-softmmu/hw/core/nmi.o
CC aarch64-softmmu/hw/core/generic-loader.o
CC alpha-softmmu/hw/display/virtio-gpu-pci.o
CC arm-softmmu/hw/core/generic-loader.o
CC cris-softmmu/target/cris/cpu.o
CC arm-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/core/null-machine.o
CC cris-softmmu/target/cris/gdbstub.o
CC alpha-softmmu/hw/misc/ivshmem.o
CC arm-softmmu/hw/cpu/arm11mpcore.o
CC aarch64-softmmu/hw/cpu/arm11mpcore.o
CC cris-softmmu/target/cris/mmu.o
CC arm-softmmu/hw/cpu/realview_mpcore.o
CC cris-softmmu/target/cris/machine.o
CC aarch64-softmmu/hw/cpu/realview_mpcore.o
CC alpha-softmmu/hw/misc/edu.o
GEN trace/generated-helpers.c
CC cris-softmmu/trace/control-target.o
CC arm-softmmu/hw/cpu/a9mpcore.o
CC aarch64-softmmu/hw/cpu/a9mpcore.o
CC alpha-softmmu/hw/net/virtio-net.o
CC cris-softmmu/trace/generated-helpers.o
CC arm-softmmu/hw/cpu/a15mpcore.o
CC aarch64-softmmu/hw/cpu/a15mpcore.o
LINK cris-softmmu/qemu-system-cris
CC aarch64-softmmu/hw/cpu/core.o
CC aarch64-softmmu/hw/display/omap_dss.o
CC arm-softmmu/hw/cpu/core.o
CC alpha-softmmu/hw/net/vhost_net.o
CC arm-softmmu/hw/display/omap_dss.o
CC alpha-softmmu/hw/scsi/virtio-scsi.o
CC aarch64-softmmu/hw/display/omap_lcdc.o
CC aarch64-softmmu/hw/display/pxa2xx_lcd.o
CC alpha-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC arm-softmmu/hw/display/omap_lcdc.o
CC alpha-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/display/pxa2xx_lcd.o
CC alpha-softmmu/hw/scsi/vhost-scsi.o
GEN i386-softmmu/hmp-commands.h
CC aarch64-softmmu/hw/display/bcm2835_fb.o
GEN i386-softmmu/hmp-commands-info.h
GEN i386-softmmu/config-target.h
CC alpha-softmmu/hw/timer/mc146818rtc.o
CC i386-softmmu/exec.o
CC aarch64-softmmu/hw/display/vga.o
CC alpha-softmmu/hw/vfio/common.o
CC arm-softmmu/hw/display/bcm2835_fb.o
CC arm-softmmu/hw/display/vga.o
CC alpha-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/display/virtio-gpu.o
CC alpha-softmmu/hw/vfio/pci-quirks.o
CC i386-softmmu/translate-all.o
CC aarch64-softmmu/hw/display/virtio-gpu-3d.o
CC arm-softmmu/hw/display/virtio-gpu.o
CC i386-softmmu/cpu-exec.o
CC alpha-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/display/virtio-gpu-pci.o
CC i386-softmmu/translate-common.o
CC arm-softmmu/hw/display/virtio-gpu-3d.o
CC alpha-softmmu/hw/vfio/spapr.o
CC i386-softmmu/cpu-exec-common.o
CC aarch64-softmmu/hw/display/dpcd.o
CC i386-softmmu/tcg/tcg.o
CC alpha-softmmu/hw/virtio/virtio.o
CC arm-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/display/xlnx_dp.o
CC arm-softmmu/hw/dma/omap_dma.o
CC aarch64-softmmu/hw/dma/xlnx_dpdma.o
CC alpha-softmmu/hw/virtio/virtio-balloon.o
CC arm-softmmu/hw/dma/soc_dma.o
CC alpha-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/dma/omap_dma.o
CC arm-softmmu/hw/dma/pxa2xx_dma.o
CC i386-softmmu/tcg/tcg-op.o
CC arm-softmmu/hw/dma/bcm2835_dma.o
CC aarch64-softmmu/hw/dma/soc_dma.o
CC alpha-softmmu/hw/virtio/vhost-backend.o
CC arm-softmmu/hw/gpio/omap_gpio.o
CC aarch64-softmmu/hw/dma/pxa2xx_dma.o
CC alpha-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/gpio/imx_gpio.o
CC aarch64-softmmu/hw/dma/bcm2835_dma.o
CC alpha-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/gpio/omap_gpio.o
CC arm-softmmu/hw/gpio/bcm2835_gpio.o
CC alpha-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/gpio/imx_gpio.o
CC arm-softmmu/hw/i2c/omap_i2c.o
CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o
CC alpha-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/i2c/omap_i2c.o
CC arm-softmmu/hw/input/pxa2xx_keypad.o
CC i386-softmmu/tcg/optimize.o
CC arm-softmmu/hw/input/tsc210x.o
CC aarch64-softmmu/hw/input/pxa2xx_keypad.o
CC alpha-softmmu/hw/alpha/dp264.o
CC alpha-softmmu/hw/alpha/pci.o
CC arm-softmmu/hw/intc/armv7m_nvic.o
CC aarch64-softmmu/hw/input/tsc210x.o
CC alpha-softmmu/hw/alpha/typhoon.o
CC i386-softmmu/tcg/tcg-common.o
CC arm-softmmu/hw/intc/exynos4210_gic.o
CC aarch64-softmmu/hw/intc/armv7m_nvic.o
CC i386-softmmu/fpu/softfloat.o
CC arm-softmmu/hw/intc/exynos4210_combiner.o
CC alpha-softmmu/target/alpha/machine.o
CC arm-softmmu/hw/intc/omap_intc.o
CC alpha-softmmu/target/alpha/translate.o
CC aarch64-softmmu/hw/intc/exynos4210_gic.o
CC arm-softmmu/hw/intc/bcm2835_ic.o
CC aarch64-softmmu/hw/intc/exynos4210_combiner.o
CC aarch64-softmmu/hw/intc/omap_intc.o
CC arm-softmmu/hw/intc/bcm2836_control.o
CC alpha-softmmu/target/alpha/helper.o
CC arm-softmmu/hw/intc/allwinner-a10-pic.o
CC aarch64-softmmu/hw/intc/bcm2835_ic.o
CC arm-softmmu/hw/intc/aspeed_vic.o
CC alpha-softmmu/target/alpha/cpu.o
CC aarch64-softmmu/hw/intc/bcm2836_control.o
CC alpha-softmmu/target/alpha/int_helper.o
CC i386-softmmu/disas.o
CC arm-softmmu/hw/intc/arm_gicv3_cpuif.o
CC alpha-softmmu/target/alpha/fpu_helper.o
CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o
CC i386-softmmu/tcg-runtime.o
CC aarch64-softmmu/hw/intc/aspeed_vic.o
CC alpha-softmmu/target/alpha/vax_helper.o
CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
GEN i386-softmmu/gdbstub-xml.c
CC alpha-softmmu/target/alpha/sys_helper.o
CC i386-softmmu/hax-stub.o
CC arm-softmmu/hw/misc/ivshmem.o
CC alpha-softmmu/target/alpha/mem_helper.o
CC i386-softmmu/kvm-stub.o
CC alpha-softmmu/target/alpha/gdbstub.o
CC i386-softmmu/arch_init.o
CC arm-softmmu/hw/misc/arm_sysctl.o
GEN trace/generated-helpers.c
CC aarch64-softmmu/hw/misc/ivshmem.o
CC alpha-softmmu/trace/control-target.o
CC i386-softmmu/cpus.o
CC arm-softmmu/hw/misc/cbus.o
CC arm-softmmu/hw/misc/exynos4210_pmu.o
CC alpha-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/hw/misc/arm_sysctl.o
CC arm-softmmu/hw/misc/exynos4210_clk.o
CC i386-softmmu/monitor.o
LINK alpha-softmmu/qemu-system-alpha
CC arm-softmmu/hw/misc/imx_ccm.o
CC aarch64-softmmu/hw/misc/cbus.o
CC aarch64-softmmu/hw/misc/exynos4210_pmu.o
CC arm-softmmu/hw/misc/imx31_ccm.o
CC aarch64-softmmu/hw/misc/exynos4210_clk.o
CC arm-softmmu/hw/misc/imx25_ccm.o
CC arm-softmmu/hw/misc/imx6_ccm.o
CC aarch64-softmmu/hw/misc/imx_ccm.o
CC i386-softmmu/gdbstub.o
CC arm-softmmu/hw/misc/imx6_src.o
CC aarch64-softmmu/hw/misc/imx31_ccm.o
CC arm-softmmu/hw/misc/mst_fpga.o
CC aarch64-softmmu/hw/misc/imx25_ccm.o
CC arm-softmmu/hw/misc/omap_clk.o
CC arm-softmmu/hw/misc/omap_gpmc.o
CC aarch64-softmmu/hw/misc/imx6_ccm.o
CC i386-softmmu/balloon.o
CC aarch64-softmmu/hw/misc/imx6_src.o
CC arm-softmmu/hw/misc/omap_l4.o
CC i386-softmmu/ioport.o
CC aarch64-softmmu/hw/misc/mst_fpga.o
CC i386-softmmu/numa.o
CC arm-softmmu/hw/misc/omap_sdrc.o
CC aarch64-softmmu/hw/misc/omap_clk.o
CC arm-softmmu/hw/misc/omap_tap.o
CC i386-softmmu/qtest.o
CC aarch64-softmmu/hw/misc/omap_gpmc.o
CC arm-softmmu/hw/misc/bcm2835_mbox.o
CC i386-softmmu/bootdevice.o
CC aarch64-softmmu/hw/misc/omap_l4.o
CC arm-softmmu/hw/misc/bcm2835_property.o
GEN lm32-softmmu/hmp-commands.h
GEN lm32-softmmu/hmp-commands-info.h
GEN lm32-softmmu/config-target.h
CC lm32-softmmu/exec.o
CC i386-softmmu/memory.o
CC aarch64-softmmu/hw/misc/omap_sdrc.o
CC arm-softmmu/hw/misc/bcm2835_rng.o
CC aarch64-softmmu/hw/misc/omap_tap.o
CC arm-softmmu/hw/misc/zynq_slcr.o
CC aarch64-softmmu/hw/misc/bcm2835_mbox.o
CC i386-softmmu/cputlb.o
CC arm-softmmu/hw/misc/zynq-xadc.o
CC aarch64-softmmu/hw/misc/bcm2835_property.o
CC lm32-softmmu/translate-all.o
CC aarch64-softmmu/hw/misc/bcm2835_rng.o
CC arm-softmmu/hw/misc/stm32f2xx_syscfg.o
CC aarch64-softmmu/hw/misc/zynq_slcr.o
CC arm-softmmu/hw/misc/edu.o
CC aarch64-softmmu/hw/misc/zynq-xadc.o
CC lm32-softmmu/cpu-exec.o
CC i386-softmmu/memory_mapping.o
CC arm-softmmu/hw/misc/aspeed_scu.o
CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
CC arm-softmmu/hw/misc/aspeed_sdmc.o
CC lm32-softmmu/translate-common.o
CC aarch64-softmmu/hw/misc/edu.o
CC i386-softmmu/dump.o
CC lm32-softmmu/cpu-exec-common.o
CC arm-softmmu/hw/net/virtio-net.o
CC aarch64-softmmu/hw/misc/auxbus.o
CC lm32-softmmu/tcg/tcg.o
CC aarch64-softmmu/hw/misc/aspeed_scu.o
CC i386-softmmu/migration/ram.o
CC aarch64-softmmu/hw/misc/aspeed_sdmc.o
CC arm-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/pcmcia/pxa2xx.o
CC i386-softmmu/hw/9pfs/virtio-9p-device.o
CC arm-softmmu/hw/scsi/virtio-scsi.o
CC lm32-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/hw/net/vhost_net.o
CC i386-softmmu/hw/block/virtio-blk.o
CC aarch64-softmmu/hw/pcmcia/pxa2xx.o
CC arm-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-softmmu/hw/scsi/virtio-scsi.o
CC i386-softmmu/hw/block/dataplane/virtio-blk.o
CC arm-softmmu/hw/scsi/vhost-scsi-common.o
CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC arm-softmmu/hw/scsi/vhost-scsi.o
CC i386-softmmu/hw/char/virtio-serial-bus.o
CC arm-softmmu/hw/sd/omap_mmc.o
CC aarch64-softmmu/hw/scsi/vhost-scsi-common.o
CC i386-softmmu/hw/core/nmi.o
CC arm-softmmu/hw/sd/pxa2xx_mmci.o
CC aarch64-softmmu/hw/scsi/vhost-scsi.o
CC lm32-softmmu/tcg/optimize.o
CC i386-softmmu/hw/core/generic-loader.o
CC arm-softmmu/hw/sd/bcm2835_sdhost.o
CC i386-softmmu/hw/core/null-machine.o
CC arm-softmmu/hw/ssi/omap_spi.o
CC aarch64-softmmu/hw/sd/omap_mmc.o
CC i386-softmmu/hw/cpu/core.o
CC arm-softmmu/hw/ssi/imx_spi.o
CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o
CC lm32-softmmu/tcg/tcg-common.o
CC i386-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o
CC arm-softmmu/hw/timer/exynos4210_mct.o
CC lm32-softmmu/fpu/softfloat.o
CC aarch64-softmmu/hw/ssi/omap_spi.o
CC arm-softmmu/hw/timer/exynos4210_pwm.o
CC arm-softmmu/hw/timer/exynos4210_rtc.o
CC i386-softmmu/hw/display/virtio-gpu.o
CC aarch64-softmmu/hw/ssi/imx_spi.o
CC aarch64-softmmu/hw/timer/exynos4210_mct.o
CC arm-softmmu/hw/timer/omap_gptimer.o
CC aarch64-softmmu/hw/timer/exynos4210_pwm.o
CC arm-softmmu/hw/timer/omap_synctimer.o
CC i386-softmmu/hw/display/virtio-gpu-3d.o
CC arm-softmmu/hw/timer/pxa2xx_timer.o
CC aarch64-softmmu/hw/timer/exynos4210_rtc.o
CC i386-softmmu/hw/display/virtio-gpu-pci.o
CC arm-softmmu/hw/timer/digic-timer.o
CC aarch64-softmmu/hw/timer/omap_gptimer.o
CC lm32-softmmu/disas.o
CC arm-softmmu/hw/timer/allwinner-a10-pit.o
CC i386-softmmu/hw/display/virtio-vga.o
CC aarch64-softmmu/hw/timer/omap_synctimer.o
CC lm32-softmmu/tcg-runtime.o
CC arm-softmmu/hw/usb/tusb6010.o
CC aarch64-softmmu/hw/timer/pxa2xx_timer.o
CC lm32-softmmu/hax-stub.o
CC i386-softmmu/hw/intc/apic.o
CC lm32-softmmu/kvm-stub.o
CC arm-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/timer/digic-timer.o
CC lm32-softmmu/arch_init.o
CC i386-softmmu/hw/intc/apic_common.o
CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o
CC lm32-softmmu/cpus.o
CC i386-softmmu/hw/intc/ioapic.o
CC arm-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/usb/tusb6010.o
CC i386-softmmu/hw/isa/lpc_ich9.o
CC lm32-softmmu/monitor.o
CC aarch64-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/misc/vmport.o
CC aarch64-softmmu/hw/vfio/pci.o
CC arm-softmmu/hw/vfio/pci-quirks.o
CC i386-softmmu/hw/misc/ivshmem.o
CC lm32-softmmu/gdbstub.o
CC aarch64-softmmu/hw/vfio/pci-quirks.o
CC i386-softmmu/hw/misc/pvpanic.o
CC arm-softmmu/hw/vfio/platform.o
CC i386-softmmu/hw/misc/edu.o
CC arm-softmmu/hw/vfio/calxeda-xgmac.o
CC lm32-softmmu/balloon.o
CC aarch64-softmmu/hw/vfio/platform.o
CC i386-softmmu/hw/net/virtio-net.o
CC arm-softmmu/hw/vfio/amd-xgbe.o
CC lm32-softmmu/ioport.o
CC arm-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o
CC arm-softmmu/hw/virtio/virtio.o
CC lm32-softmmu/numa.o
CC aarch64-softmmu/hw/vfio/amd-xgbe.o
CC i386-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/hw/vfio/spapr.o
CC lm32-softmmu/qtest.o
CC i386-softmmu/hw/scsi/virtio-scsi.o
CC aarch64-softmmu/hw/virtio/virtio.o
CC lm32-softmmu/bootdevice.o
CC arm-softmmu/hw/virtio/virtio-balloon.o
CC i386-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC lm32-softmmu/memory.o
CC i386-softmmu/hw/scsi/vhost-scsi-common.o
CC arm-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/virtio/virtio-balloon.o
CC i386-softmmu/hw/scsi/vhost-scsi.o
CC arm-softmmu/hw/virtio/vhost-backend.o
CC lm32-softmmu/cputlb.o
CC aarch64-softmmu/hw/virtio/vhost.o
CC i386-softmmu/hw/timer/mc146818rtc.o
CC arm-softmmu/hw/virtio/vhost-user.o
CC arm-softmmu/hw/virtio/vhost-vsock.o
CC i386-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/virtio/vhost-backend.o
CC arm-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/virtio/vhost-user.o
CC lm32-softmmu/memory_mapping.o
CC i386-softmmu/hw/vfio/pci.o
CC lm32-softmmu/dump.o
CC aarch64-softmmu/hw/virtio/vhost-vsock.o
CC arm-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/virtio/virtio-crypto.o
CC lm32-softmmu/migration/ram.o
CC arm-softmmu/hw/arm/boot.o
CC i386-softmmu/hw/vfio/pci-quirks.o
CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
CC arm-softmmu/hw/arm/collie.o
CC aarch64-softmmu/hw/arm/boot.o
CC lm32-softmmu/hw/core/nmi.o
CC lm32-softmmu/hw/core/generic-loader.o
CC i386-softmmu/hw/vfio/platform.o
CC arm-softmmu/hw/arm/exynos4_boards.o
CC lm32-softmmu/hw/core/null-machine.o
CC aarch64-softmmu/hw/arm/collie.o
CC i386-softmmu/hw/vfio/spapr.o
CC arm-softmmu/hw/arm/gumstix.o
CC lm32-softmmu/hw/cpu/core.o
CC lm32-softmmu/hw/input/milkymist-softusb.o
CC aarch64-softmmu/hw/arm/exynos4_boards.o
CC i386-softmmu/hw/virtio/virtio.o
CC arm-softmmu/hw/arm/highbank.o
CC aarch64-softmmu/hw/arm/gumstix.o
CC lm32-softmmu/hw/misc/milkymist-hpdmc.o
CC aarch64-softmmu/hw/arm/highbank.o
CC arm-softmmu/hw/arm/digic_boards.o
CC lm32-softmmu/hw/misc/milkymist-pfpu.o
CC i386-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/arm/digic_boards.o
CC arm-softmmu/hw/arm/integratorcp.o
CC lm32-softmmu/hw/net/milkymist-minimac2.o
CC i386-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/arm/integratorcp.o
CC arm-softmmu/hw/arm/mainstone.o
CC lm32-softmmu/hw/net/vhost_net.o
CC aarch64-softmmu/hw/arm/mainstone.o
CC arm-softmmu/hw/arm/musicpal.o
CC i386-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/arm/musicpal.o
CC lm32-softmmu/hw/net/rocker/qmp-norocker.o
CC i386-softmmu/hw/virtio/vhost-user.o
CC lm32-softmmu/hw/sd/milkymist-memcard.o
CC arm-softmmu/hw/arm/nseries.o
CC i386-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/arm/nseries.o
CC lm32-softmmu/hw/vfio/common.o
CC i386-softmmu/hw/virtio/virtio-crypto.o
CC arm-softmmu/hw/arm/omap_sx1.o
CC lm32-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/arm/omap_sx1.o
CC i386-softmmu/hw/virtio/virtio-crypto-pci.o
CC arm-softmmu/hw/arm/palm.o
CC lm32-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/arm/palm.o
CC i386-softmmu/hw/i386/multiboot.o
CC arm-softmmu/hw/arm/realview.o
CC lm32-softmmu/hw/lm32/lm32_boards.o
CC i386-softmmu/hw/i386/pc.o
CC aarch64-softmmu/hw/arm/realview.o
CC arm-softmmu/hw/arm/spitz.o
CC lm32-softmmu/hw/lm32/milkymist.o
CC aarch64-softmmu/hw/arm/spitz.o
CC lm32-softmmu/target/lm32/translate.o
CC i386-softmmu/hw/i386/pc_piix.o
CC aarch64-softmmu/hw/arm/stellaris.o
CC arm-softmmu/hw/arm/stellaris.o
CC lm32-softmmu/target/lm32/op_helper.o
CC i386-softmmu/hw/i386/pc_q35.o
CC aarch64-softmmu/hw/arm/tosa.o
CC arm-softmmu/hw/arm/tosa.o
CC lm32-softmmu/target/lm32/helper.o
CC aarch64-softmmu/hw/arm/versatilepb.o
CC i386-softmmu/hw/i386/pc_sysfw.o
CC lm32-softmmu/target/lm32/cpu.o
CC aarch64-softmmu/hw/arm/vexpress.o
CC i386-softmmu/hw/i386/x86-iommu.o
CC arm-softmmu/hw/arm/versatilepb.o
CC lm32-softmmu/target/lm32/gdbstub.o
CC i386-softmmu/hw/i386/intel_iommu.o
CC aarch64-softmmu/hw/arm/virt.o
CC arm-softmmu/hw/arm/vexpress.o
CC lm32-softmmu/target/lm32/lm32-semi.o
CC arm-softmmu/hw/arm/virt.o
CC lm32-softmmu/target/lm32/machine.o
CC aarch64-softmmu/hw/arm/xilinx_zynq.o
GEN trace/generated-helpers.c
CC lm32-softmmu/trace/control-target.o
CC i386-softmmu/hw/i386/amd_iommu.o
CC aarch64-softmmu/hw/arm/z2.o
CC lm32-softmmu/trace/generated-helpers.o
CC arm-softmmu/hw/arm/xilinx_zynq.o
CC aarch64-softmmu/hw/arm/virt-acpi-build.o
LINK lm32-softmmu/qemu-system-lm32
CC arm-softmmu/hw/arm/z2.o
CC i386-softmmu/hw/i386/kvmvapic.o
CC aarch64-softmmu/hw/arm/netduino2.o
CC i386-softmmu/hw/i386/acpi-build.o
CC arm-softmmu/hw/arm/virt-acpi-build.o
CC aarch64-softmmu/hw/arm/sysbus-fdt.o
CC i386-softmmu/hw/i386/pci-assign-load-rom.o
CC arm-softmmu/hw/arm/netduino2.o
CC aarch64-softmmu/hw/arm/armv7m.o
CC aarch64-softmmu/hw/arm/exynos4210.o
CC i386-softmmu/target/i386/translate.o
CC arm-softmmu/hw/arm/sysbus-fdt.o
CC aarch64-softmmu/hw/arm/pxa2xx.o
CC arm-softmmu/hw/arm/armv7m.o
GEN m68k-softmmu/hmp-commands.h
GEN m68k-softmmu/hmp-commands-info.h
GEN m68k-softmmu/config-target.h
CC m68k-softmmu/exec.o
CC arm-softmmu/hw/arm/exynos4210.o
CC arm-softmmu/hw/arm/pxa2xx.o
CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o
CC aarch64-softmmu/hw/arm/pxa2xx_pic.o
CC arm-softmmu/hw/arm/pxa2xx_gpio.o
CC aarch64-softmmu/hw/arm/digic.o
CC arm-softmmu/hw/arm/pxa2xx_pic.o
CC m68k-softmmu/translate-all.o
CC aarch64-softmmu/hw/arm/omap1.o
CC arm-softmmu/hw/arm/digic.o
CC m68k-softmmu/cpu-exec.o
CC arm-softmmu/hw/arm/omap1.o
CC aarch64-softmmu/hw/arm/omap2.o
CC m68k-softmmu/translate-common.o
CC m68k-softmmu/cpu-exec-common.o
CC arm-softmmu/hw/arm/omap2.o
CC aarch64-softmmu/hw/arm/strongarm.o
CC m68k-softmmu/tcg/tcg.o
CC aarch64-softmmu/hw/arm/allwinner-a10.o
CC i386-softmmu/target/i386/helper.o
CC arm-softmmu/hw/arm/strongarm.o
CC aarch64-softmmu/hw/arm/cubieboard.o
CC i386-softmmu/target/i386/cpu.o
CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o
CC arm-softmmu/hw/arm/allwinner-a10.o
CC aarch64-softmmu/hw/arm/bcm2836.o
CC m68k-softmmu/tcg/tcg-op.o
CC arm-softmmu/hw/arm/cubieboard.o
CC i386-softmmu/target/i386/bpt_helper.o
CC arm-softmmu/hw/arm/bcm2835_peripherals.o
CC aarch64-softmmu/hw/arm/raspi.o
CC i386-softmmu/target/i386/excp_helper.o
CC i386-softmmu/target/i386/fpu_helper.o
CC arm-softmmu/hw/arm/bcm2836.o
CC aarch64-softmmu/hw/arm/stm32f205_soc.o
CC arm-softmmu/hw/arm/raspi.o
CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o
CC arm-softmmu/hw/arm/stm32f205_soc.o
CC m68k-softmmu/tcg/optimize.o
CC arm-softmmu/hw/arm/fsl-imx25.o
CC aarch64-softmmu/hw/arm/xlnx-ep108.o
CC arm-softmmu/hw/arm/imx25_pdk.o
CC aarch64-softmmu/hw/arm/fsl-imx25.o
CC m68k-softmmu/tcg/tcg-common.o
CC arm-softmmu/hw/arm/fsl-imx31.o
CC m68k-softmmu/fpu/softfloat.o
CC i386-softmmu/target/i386/cc_helper.o
CC arm-softmmu/hw/arm/kzm.o
CC aarch64-softmmu/hw/arm/imx25_pdk.o
CC i386-softmmu/target/i386/int_helper.o
CC arm-softmmu/hw/arm/fsl-imx6.o
CC aarch64-softmmu/hw/arm/fsl-imx31.o
CC i386-softmmu/target/i386/svm_helper.o
CC aarch64-softmmu/hw/arm/kzm.o
CC arm-softmmu/hw/arm/sabrelite.o
CC i386-softmmu/target/i386/smm_helper.o
CC aarch64-softmmu/hw/arm/fsl-imx6.o
CC arm-softmmu/hw/arm/aspeed_soc.o
CC i386-softmmu/target/i386/misc_helper.o
CC aarch64-softmmu/hw/arm/sabrelite.o
CC arm-softmmu/hw/arm/aspeed.o
CC aarch64-softmmu/hw/arm/aspeed_soc.o
CC aarch64-softmmu/hw/arm/aspeed.o
CC arm-softmmu/target/arm/arm-semi.o
CC i386-softmmu/target/i386/mem_helper.o
CC m68k-softmmu/disas.o
CC aarch64-softmmu/target/arm/arm-semi.o
CC i386-softmmu/target/i386/seg_helper.o
CC arm-softmmu/target/arm/machine.o
CC m68k-softmmu/tcg-runtime.o
CC aarch64-softmmu/target/arm/machine.o
GEN m68k-softmmu/gdbstub-xml.c
CC arm-softmmu/target/arm/psci.o
CC aarch64-softmmu/target/arm/psci.o
CC arm-softmmu/target/arm/arch_dump.o
CC m68k-softmmu/hax-stub.o
CC arm-softmmu/target/arm/monitor.o
CC aarch64-softmmu/target/arm/arch_dump.o
CC m68k-softmmu/kvm-stub.o
CC aarch64-softmmu/target/arm/monitor.o
CC arm-softmmu/target/arm/kvm-stub.o
CC m68k-softmmu/arch_init.o
CC arm-softmmu/target/arm/translate.o
CC aarch64-softmmu/target/arm/kvm-stub.o
CC m68k-softmmu/cpus.o
CC aarch64-softmmu/target/arm/translate.o
CC i386-softmmu/target/i386/mpx_helper.o
CC m68k-softmmu/monitor.o
CC i386-softmmu/target/i386/gdbstub.o
CC i386-softmmu/target/i386/machine.o
CC m68k-softmmu/gdbstub.o
CC i386-softmmu/target/i386/arch_memory_mapping.o
CC m68k-softmmu/balloon.o
CC i386-softmmu/target/i386/arch_dump.o
CC m68k-softmmu/ioport.o
CC i386-softmmu/target/i386/monitor.o
CC m68k-softmmu/numa.o
CC i386-softmmu/target/i386/kvm-stub.o
CC m68k-softmmu/qtest.o
CC arm-softmmu/target/arm/op_helper.o
GEN trace/generated-helpers.c
CC i386-softmmu/trace/control-target.o
CC m68k-softmmu/bootdevice.o
CC aarch64-softmmu/target/arm/op_helper.o
CC i386-softmmu/gdbstub-xml.o
CC m68k-softmmu/memory.o
CC arm-softmmu/target/arm/helper.o
CC i386-softmmu/trace/generated-helpers.o
CC aarch64-softmmu/target/arm/helper.o
CC m68k-softmmu/cputlb.o
LINK i386-softmmu/qemu-system-i386
CC m68k-softmmu/memory_mapping.o
CC m68k-softmmu/dump.o
CC arm-softmmu/target/arm/cpu.o
CC aarch64-softmmu/target/arm/cpu.o
CC m68k-softmmu/migration/ram.o
GEN microblazeel-softmmu/hmp-commands.h
CC aarch64-softmmu/target/arm/neon_helper.o
GEN microblazeel-softmmu/hmp-commands-info.h
GEN microblazeel-softmmu/config-target.h
CC arm-softmmu/target/arm/neon_helper.o
CC microblazeel-softmmu/exec.o
CC m68k-softmmu/hw/char/mcf_uart.o
CC aarch64-softmmu/target/arm/iwmmxt_helper.o
CC arm-softmmu/target/arm/iwmmxt_helper.o
CC m68k-softmmu/hw/core/nmi.o
CC microblazeel-softmmu/translate-all.o
CC m68k-softmmu/hw/core/generic-loader.o
CC arm-softmmu/target/arm/gdbstub.o
CC aarch64-softmmu/target/arm/gdbstub.o
CC m68k-softmmu/hw/core/null-machine.o
CC microblazeel-softmmu/cpu-exec.o
CC aarch64-softmmu/target/arm/cpu64.o
CC arm-softmmu/target/arm/crypto_helper.o
CC m68k-softmmu/hw/cpu/core.o
CC aarch64-softmmu/target/arm/translate-a64.o
CC arm-softmmu/target/arm/arm-powerctl.o
CC microblazeel-softmmu/translate-common.o
CC m68k-softmmu/hw/net/mcf_fec.o
GEN trace/generated-helpers.c
CC microblazeel-softmmu/cpu-exec-common.o
CC arm-softmmu/trace/control-target.o
CC m68k-softmmu/hw/net/vhost_net.o
CC arm-softmmu/gdbstub-xml.o
CC microblazeel-softmmu/tcg/tcg.o
CC m68k-softmmu/hw/net/rocker/qmp-norocker.o
CC m68k-softmmu/hw/vfio/common.o
CC arm-softmmu/trace/generated-helpers.o
CC m68k-softmmu/hw/vfio/platform.o
LINK arm-softmmu/qemu-system-arm
CC m68k-softmmu/hw/vfio/spapr.o
CC microblazeel-softmmu/tcg/tcg-op.o
CC m68k-softmmu/hw/m68k/an5206.o
CC m68k-softmmu/hw/m68k/mcf5208.o
CC m68k-softmmu/hw/m68k/mcf5206.o
CC m68k-softmmu/hw/m68k/mcf_intc.o
CC aarch64-softmmu/target/arm/helper-a64.o
CC m68k-softmmu/target/m68k/m68k-semi.o
CC m68k-softmmu/target/m68k/translate.o
CC aarch64-softmmu/target/arm/gdbstub64.o
CC microblazeel-softmmu/tcg/optimize.o
CC aarch64-softmmu/target/arm/crypto_helper.o
CC microblazeel-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/target/arm/arm-powerctl.o
CC microblazeel-softmmu/fpu/softfloat.o
GEN trace/generated-helpers.c
GEN microblaze-softmmu/hmp-commands.h
GEN microblaze-softmmu/hmp-commands-info.h
GEN microblaze-softmmu/config-target.h
CC aarch64-softmmu/trace/control-target.o
CC microblaze-softmmu/exec.o
CC aarch64-softmmu/gdbstub-xml.o
CC aarch64-softmmu/trace/generated-helpers.o
CC m68k-softmmu/target/m68k/op_helper.o
CC m68k-softmmu/target/m68k/helper.o
LINK aarch64-softmmu/qemu-system-aarch64
CC microblaze-softmmu/translate-all.o
CC m68k-softmmu/target/m68k/cpu.o
CC m68k-softmmu/target/m68k/gdbstub.o
CC microblazeel-softmmu/disas.o
CC microblaze-softmmu/cpu-exec.o
GEN trace/generated-helpers.c
CC microblazeel-softmmu/tcg-runtime.o
CC m68k-softmmu/trace/control-target.o
CC microblaze-softmmu/translate-common.o
CC m68k-softmmu/gdbstub-xml.o
CC microblazeel-softmmu/hax-stub.o
CC microblaze-softmmu/cpu-exec-common.o
CC m68k-softmmu/trace/generated-helpers.o
CC microblazeel-softmmu/kvm-stub.o
CC microblaze-softmmu/tcg/tcg.o
CC microblazeel-softmmu/arch_init.o
LINK m68k-softmmu/qemu-system-m68k
CC microblazeel-softmmu/cpus.o
CC microblazeel-softmmu/monitor.o
CC microblaze-softmmu/tcg/tcg-op.o
CC microblazeel-softmmu/gdbstub.o
GEN mips64el-softmmu/hmp-commands.h
GEN mips64el-softmmu/hmp-commands-info.h
GEN mips64el-softmmu/config-target.h
CC mips64el-softmmu/exec.o
CC microblazeel-softmmu/balloon.o
GEN mips64-softmmu/hmp-commands.h
GEN mips64-softmmu/hmp-commands-info.h
GEN mips64-softmmu/config-target.h
CC mips64-softmmu/exec.o
CC microblazeel-softmmu/ioport.o
CC microblazeel-softmmu/numa.o
CC microblaze-softmmu/tcg/optimize.o
CC microblazeel-softmmu/qtest.o
CC mips64el-softmmu/translate-all.o
CC mips64-softmmu/translate-all.o
CC microblazeel-softmmu/bootdevice.o
CC microblaze-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/cpu-exec.o
CC microblaze-softmmu/fpu/softfloat.o
CC mips64-softmmu/cpu-exec.o
CC microblazeel-softmmu/memory.o
CC mips64el-softmmu/translate-common.o
CC mips64-softmmu/translate-common.o
CC mips64el-softmmu/cpu-exec-common.o
CC mips64-softmmu/cpu-exec-common.o
CC mips64-softmmu/tcg/tcg.o
CC mips64el-softmmu/tcg/tcg.o
CC microblazeel-softmmu/cputlb.o
CC microblaze-softmmu/disas.o
CC microblazeel-softmmu/memory_mapping.o
CC microblazeel-softmmu/dump.o
CC mips64el-softmmu/tcg/tcg-op.o
CC mips64-softmmu/tcg/tcg-op.o
CC microblaze-softmmu/tcg-runtime.o
CC microblaze-softmmu/hax-stub.o
CC microblazeel-softmmu/migration/ram.o
CC microblaze-softmmu/kvm-stub.o
CC microblaze-softmmu/arch_init.o
CC microblazeel-softmmu/hw/core/nmi.o
CC microblaze-softmmu/cpus.o
CC microblazeel-softmmu/hw/core/generic-loader.o
CC microblazeel-softmmu/hw/core/null-machine.o
CC mips64el-softmmu/tcg/optimize.o
CC microblaze-softmmu/monitor.o
CC microblazeel-softmmu/hw/cpu/core.o
CC mips64-softmmu/tcg/optimize.o
CC microblazeel-softmmu/hw/net/xilinx_ethlite.o
CC microblazeel-softmmu/hw/net/vhost_net.o
CC mips64el-softmmu/tcg/tcg-common.o
CC microblazeel-softmmu/hw/net/rocker/qmp-norocker.o
CC mips64-softmmu/tcg/tcg-common.o
CC mips64el-softmmu/fpu/softfloat.o
CC microblazeel-softmmu/hw/vfio/common.o
CC mips64-softmmu/fpu/softfloat.o
CC microblaze-softmmu/gdbstub.o
CC microblazeel-softmmu/hw/vfio/platform.o
CC microblaze-softmmu/balloon.o
CC microblazeel-softmmu/hw/vfio/spapr.o
CC microblaze-softmmu/ioport.o
CC microblazeel-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC microblaze-softmmu/numa.o
CC microblazeel-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC mips64el-softmmu/disas.o
CC mips64-softmmu/disas.o
CC microblaze-softmmu/qtest.o
CC microblazeel-softmmu/hw/microblaze/boot.o
CC mips64-softmmu/tcg-runtime.o
CC mips64el-softmmu/tcg-runtime.o
CC microblazeel-softmmu/target/microblaze/translate.o
CC microblaze-softmmu/bootdevice.o
CC mips64-softmmu/hax-stub.o
CC mips64el-softmmu/hax-stub.o
CC microblaze-softmmu/memory.o
CC mips64-softmmu/kvm-stub.o
CC mips64el-softmmu/kvm-stub.o
CC mips64-softmmu/arch_init.o
CC microblazeel-softmmu/target/microblaze/op_helper.o
CC mips64-softmmu/cpus.o
CC mips64el-softmmu/arch_init.o
CC microblazeel-softmmu/target/microblaze/helper.o
CC microblaze-softmmu/cputlb.o
CC mips64el-softmmu/cpus.o
CC microblazeel-softmmu/target/microblaze/cpu.o
CC mips64-softmmu/monitor.o
CC microblazeel-softmmu/target/microblaze/gdbstub.o
CC mips64el-softmmu/monitor.o
CC microblazeel-softmmu/target/microblaze/mmu.o
CC microblaze-softmmu/memory_mapping.o
CC microblaze-softmmu/dump.o
CC mips64-softmmu/gdbstub.o
GEN trace/generated-helpers.c
CC microblazeel-softmmu/trace/control-target.o
CC mips64el-softmmu/gdbstub.o
CC mips64-softmmu/balloon.o
CC microblaze-softmmu/migration/ram.o
CC microblazeel-softmmu/trace/generated-helpers.o
CC mips64-softmmu/ioport.o
LINK microblazeel-softmmu/qemu-system-microblazeel
CC mips64el-softmmu/balloon.o
CC mips64-softmmu/numa.o
CC microblaze-softmmu/hw/core/nmi.o
CC mips64el-softmmu/ioport.o
CC microblaze-softmmu/hw/core/generic-loader.o
CC mips64-softmmu/qtest.o
CC mips64el-softmmu/numa.o
CC microblaze-softmmu/hw/core/null-machine.o
CC mips64el-softmmu/qtest.o
CC mips64el-softmmu/bootdevice.o
CC mips64-softmmu/bootdevice.o
CC microblaze-softmmu/hw/cpu/core.o
CC mips64el-softmmu/memory.o
CC mips64-softmmu/memory.o
CC microblaze-softmmu/hw/net/xilinx_ethlite.o
CC microblaze-softmmu/hw/net/vhost_net.o
CC microblaze-softmmu/hw/net/rocker/qmp-norocker.o
GEN mipsel-softmmu/hmp-commands.h
GEN mipsel-softmmu/hmp-commands-info.h
GEN mipsel-softmmu/config-target.h
CC mipsel-softmmu/exec.o
CC microblaze-softmmu/hw/vfio/common.o
CC mips64-softmmu/cputlb.o
CC mips64el-softmmu/cputlb.o
CC microblaze-softmmu/hw/vfio/platform.o
CC microblaze-softmmu/hw/vfio/spapr.o
CC mips64-softmmu/memory_mapping.o
CC mips64el-softmmu/memory_mapping.o
CC mipsel-softmmu/translate-all.o
CC microblaze-softmmu/hw/microblaze/petalogix_s3adsp1800_mmu.o
CC mips64-softmmu/dump.o
CC mips64el-softmmu/dump.o
CC microblaze-softmmu/hw/microblaze/petalogix_ml605_mmu.o
CC mipsel-softmmu/cpu-exec.o
CC mips64-softmmu/migration/ram.o
CC microblaze-softmmu/hw/microblaze/boot.o
CC mips64el-softmmu/migration/ram.o
CC mipsel-softmmu/translate-common.o
CC microblaze-softmmu/target/microblaze/translate.o
CC mipsel-softmmu/cpu-exec-common.o
CC mips64-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64el-softmmu/hw/9pfs/virtio-9p-device.o
CC mipsel-softmmu/tcg/tcg.o
CC mips64el-softmmu/hw/block/virtio-blk.o
CC mips64-softmmu/hw/block/virtio-blk.o
CC microblaze-softmmu/target/microblaze/op_helper.o
CC mips64el-softmmu/hw/block/dataplane/virtio-blk.o
CC mips64-softmmu/hw/block/dataplane/virtio-blk.o
CC microblaze-softmmu/target/microblaze/helper.o
CC mips64-softmmu/hw/char/virtio-serial-bus.o
CC mips64el-softmmu/hw/char/virtio-serial-bus.o
CC microblaze-softmmu/target/microblaze/cpu.o
CC mipsel-softmmu/tcg/tcg-op.o
CC microblaze-softmmu/target/microblaze/gdbstub.o
CC mips64-softmmu/hw/core/nmi.o
CC mips64el-softmmu/hw/core/nmi.o
CC mips64-softmmu/hw/core/generic-loader.o
CC microblaze-softmmu/target/microblaze/mmu.o
CC mips64el-softmmu/hw/core/generic-loader.o
CC mips64-softmmu/hw/core/null-machine.o
CC mips64el-softmmu/hw/core/null-machine.o
CC mips64-softmmu/hw/cpu/core.o
GEN trace/generated-helpers.c
CC microblaze-softmmu/trace/control-target.o
CC mips64el-softmmu/hw/cpu/core.o
CC mips64-softmmu/hw/display/vga.o
CC mips64el-softmmu/hw/display/vga.o
CC microblaze-softmmu/trace/generated-helpers.o
LINK microblaze-softmmu/qemu-system-microblaze
CC mips64-softmmu/hw/display/virtio-gpu.o
CC mips64el-softmmu/hw/display/virtio-gpu.o
CC mipsel-softmmu/tcg/optimize.o
CC mips64-softmmu/hw/display/virtio-gpu-3d.o
CC mips64el-softmmu/hw/display/virtio-gpu-3d.o
CC mipsel-softmmu/tcg/tcg-common.o
CC mipsel-softmmu/fpu/softfloat.o
CC mips64-softmmu/hw/display/virtio-gpu-pci.o
CC mips64el-softmmu/hw/display/virtio-gpu-pci.o
GEN mips-softmmu/hmp-commands.h
GEN mips-softmmu/hmp-commands-info.h
GEN mips-softmmu/config-target.h
CC mips64-softmmu/hw/intc/mips_gic.o
CC mips-softmmu/exec.o
CC mips64el-softmmu/hw/intc/mips_gic.o
CC mips64-softmmu/hw/misc/ivshmem.o
CC mips64-softmmu/hw/misc/mips_cmgcr.o
CC mips64el-softmmu/hw/misc/ivshmem.o
CC mips64el-softmmu/hw/misc/mips_cmgcr.o
CC mips64-softmmu/hw/misc/mips_cpc.o
CC mips64-softmmu/hw/misc/mips_itu.o
CC mips64el-softmmu/hw/misc/mips_cpc.o
CC mipsel-softmmu/disas.o
CC mips64el-softmmu/hw/misc/mips_itu.o
CC mips-softmmu/translate-all.o
CC mips64-softmmu/hw/misc/edu.o
CC mipsel-softmmu/tcg-runtime.o
CC mips64el-softmmu/hw/misc/edu.o
CC mipsel-softmmu/hax-stub.o
CC mips64-softmmu/hw/net/virtio-net.o
CC mipsel-softmmu/kvm-stub.o
CC mips-softmmu/cpu-exec.o
CC mips64el-softmmu/hw/net/virtio-net.o
CC mipsel-softmmu/arch_init.o
CC mips-softmmu/translate-common.o
CC mipsel-softmmu/cpus.o
CC mips-softmmu/cpu-exec-common.o
CC mips64-softmmu/hw/net/vhost_net.o
CC mips64el-softmmu/hw/net/vhost_net.o
CC mips-softmmu/tcg/tcg.o
CC mips64-softmmu/hw/scsi/virtio-scsi.o
CC mipsel-softmmu/monitor.o
CC mips64el-softmmu/hw/scsi/virtio-scsi.o
CC mips64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64el-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mips64-softmmu/hw/scsi/vhost-scsi-common.o
CC mips64el-softmmu/hw/scsi/vhost-scsi-common.o
CC mips64el-softmmu/hw/scsi/vhost-scsi.o
CC mips64-softmmu/hw/scsi/vhost-scsi.o
CC mipsel-softmmu/gdbstub.o
CC mips-softmmu/tcg/tcg-op.o
CC mips64-softmmu/hw/timer/mips_gictimer.o
CC mips64el-softmmu/hw/timer/mips_gictimer.o
CC mips64el-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/balloon.o
CC mips64-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/ioport.o
CC mips64el-softmmu/hw/vfio/common.o
CC mips64-softmmu/hw/vfio/common.o
CC mipsel-softmmu/numa.o
CC mips64el-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/qtest.o
CC mips64-softmmu/hw/vfio/pci.o
CC mips64el-softmmu/hw/vfio/pci-quirks.o
CC mips-softmmu/tcg/optimize.o
CC mipsel-softmmu/bootdevice.o
CC mips64el-softmmu/hw/vfio/platform.o
CC mipsel-softmmu/memory.o
CC mips64-softmmu/hw/vfio/pci-quirks.o
CC mips64el-softmmu/hw/vfio/spapr.o
CC mips-softmmu/tcg/tcg-common.o
CC mips-softmmu/fpu/softfloat.o
CC mips64-softmmu/hw/vfio/platform.o
CC mips64el-softmmu/hw/virtio/virtio.o
CC mipsel-softmmu/cputlb.o
CC mips64-softmmu/hw/vfio/spapr.o
CC mips64el-softmmu/hw/virtio/virtio-balloon.o
CC mips64-softmmu/hw/virtio/virtio.o
CC mips64el-softmmu/hw/virtio/vhost.o
CC mipsel-softmmu/memory_mapping.o
CC mips64-softmmu/hw/virtio/virtio-balloon.o
CC mips-softmmu/disas.o
CC mipsel-softmmu/dump.o
CC mips64el-softmmu/hw/virtio/vhost-backend.o
CC mips-softmmu/tcg-runtime.o
CC mips64-softmmu/hw/virtio/vhost.o
CC mips64el-softmmu/hw/virtio/vhost-user.o
CC mips-softmmu/hax-stub.o
CC mipsel-softmmu/migration/ram.o
CC mips64el-softmmu/hw/virtio/vhost-vsock.o
CC mips-softmmu/kvm-stub.o
CC mips64-softmmu/hw/virtio/vhost-backend.o
CC mips64el-softmmu/hw/virtio/virtio-crypto.o
CC mips-softmmu/arch_init.o
CC mips64-softmmu/hw/virtio/vhost-user.o
CC mips-softmmu/cpus.o
CC mips64el-softmmu/hw/virtio/virtio-crypto-pci.o
CC mipsel-softmmu/hw/9pfs/virtio-9p-device.o
CC mips64-softmmu/hw/virtio/vhost-vsock.o
CC mips64el-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/hw/block/virtio-blk.o
CC mips-softmmu/monitor.o
CC mips64-softmmu/hw/virtio/virtio-crypto.o
CC mipsel-softmmu/hw/block/dataplane/virtio-blk.o
CC mips64-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips64el-softmmu/hw/mips/mips_malta.o
CC mipsel-softmmu/hw/char/virtio-serial-bus.o
CC mips64el-softmmu/hw/mips/mips_mipssim.o
CC mips64-softmmu/hw/mips/mips_r4k.o
CC mipsel-softmmu/hw/core/nmi.o
CC mips64-softmmu/hw/mips/mips_malta.o
CC mips64el-softmmu/hw/mips/addr.o
CC mips-softmmu/gdbstub.o
CC mipsel-softmmu/hw/core/generic-loader.o
CC mips64el-softmmu/hw/mips/cputimer.o
CC mipsel-softmmu/hw/core/null-machine.o
CC mips64-softmmu/hw/mips/mips_mipssim.o
CC mips64el-softmmu/hw/mips/mips_int.o
CC mips-softmmu/balloon.o
CC mipsel-softmmu/hw/cpu/core.o
CC mips64-softmmu/hw/mips/addr.o
CC mips64el-softmmu/hw/mips/mips_jazz.o
CC mips-softmmu/ioport.o
CC mipsel-softmmu/hw/display/vga.o
CC mips64-softmmu/hw/mips/cputimer.o
CC mips64el-softmmu/hw/mips/mips_fulong2e.o
CC mips64-softmmu/hw/mips/mips_int.o
CC mips-softmmu/numa.o
CC mips64el-softmmu/hw/mips/gt64xxx_pci.o
CC mips64-softmmu/hw/mips/mips_jazz.o
CC mips-softmmu/qtest.o
CC mips64el-softmmu/hw/mips/cps.o
CC mipsel-softmmu/hw/display/virtio-gpu.o
CC mips64-softmmu/hw/mips/gt64xxx_pci.o
CC mips-softmmu/bootdevice.o
CC mips64el-softmmu/hw/mips/boston.o
CC mips-softmmu/memory.o
CC mips64-softmmu/hw/mips/cps.o
CC mips64el-softmmu/target/mips/translate.o
CC mipsel-softmmu/hw/display/virtio-gpu-3d.o
CC mips64-softmmu/target/mips/translate.o
CC mipsel-softmmu/hw/display/virtio-gpu-pci.o
CC mips-softmmu/cputlb.o
CC mipsel-softmmu/hw/intc/mips_gic.o
CC mipsel-softmmu/hw/misc/ivshmem.o
CC mips-softmmu/memory_mapping.o
CC mips-softmmu/dump.o
CC mipsel-softmmu/hw/misc/mips_cmgcr.o
CC mipsel-softmmu/hw/misc/mips_cpc.o
CC mips-softmmu/migration/ram.o
CC mipsel-softmmu/hw/misc/mips_itu.o
CC mipsel-softmmu/hw/misc/edu.o
CC mips-softmmu/hw/9pfs/virtio-9p-device.o
CC mipsel-softmmu/hw/net/virtio-net.o
CC mips-softmmu/hw/block/virtio-blk.o
CC mips-softmmu/hw/block/dataplane/virtio-blk.o
CC mips64el-softmmu/target/mips/dsp_helper.o
CC mipsel-softmmu/hw/net/vhost_net.o
CC mips-softmmu/hw/char/virtio-serial-bus.o
CC mipsel-softmmu/hw/scsi/virtio-scsi.o
CC mips64-softmmu/target/mips/dsp_helper.o
CC mips-softmmu/hw/core/nmi.o
CC mipsel-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mipsel-softmmu/hw/scsi/vhost-scsi-common.o
CC mips-softmmu/hw/core/generic-loader.o
CC mips64el-softmmu/target/mips/op_helper.o
CC mips-softmmu/hw/core/null-machine.o
CC mipsel-softmmu/hw/scsi/vhost-scsi.o
CC mips-softmmu/hw/cpu/core.o
CC mips64-softmmu/target/mips/op_helper.o
CC mipsel-softmmu/hw/timer/mips_gictimer.o
CC mipsel-softmmu/hw/timer/mc146818rtc.o
CC mips-softmmu/hw/display/vga.o
CC mipsel-softmmu/hw/vfio/common.o
CC mips-softmmu/hw/display/virtio-gpu.o
CC mips64el-softmmu/target/mips/lmi_helper.o
CC mipsel-softmmu/hw/vfio/pci.o
CC mips64-softmmu/target/mips/lmi_helper.o
CC mips-softmmu/hw/display/virtio-gpu-3d.o
CC mips64el-softmmu/target/mips/helper.o
CC mips64-softmmu/target/mips/helper.o
CC mipsel-softmmu/hw/vfio/pci-quirks.o
CC mips-softmmu/hw/display/virtio-gpu-pci.o
CC mips64el-softmmu/target/mips/cpu.o
CC mips64el-softmmu/target/mips/gdbstub.o
CC mips64-softmmu/target/mips/cpu.o
CC mipsel-softmmu/hw/vfio/platform.o
CC mips64-softmmu/target/mips/gdbstub.o
CC mips-softmmu/hw/intc/mips_gic.o
CC mips64el-softmmu/target/mips/msa_helper.o
CC mips64-softmmu/target/mips/msa_helper.o
CC mipsel-softmmu/hw/vfio/spapr.o
CC mips-softmmu/hw/misc/ivshmem.o
CC mipsel-softmmu/hw/virtio/virtio.o
CC mips-softmmu/hw/misc/mips_cmgcr.o
CC mips-softmmu/hw/misc/mips_cpc.o
CC mipsel-softmmu/hw/virtio/virtio-balloon.o
CC mips-softmmu/hw/misc/mips_itu.o
CC mipsel-softmmu/hw/virtio/vhost.o
CC mips-softmmu/hw/misc/edu.o
CC mips-softmmu/hw/net/virtio-net.o
CC mipsel-softmmu/hw/virtio/vhost-backend.o
CC mips64el-softmmu/target/mips/mips-semi.o
CC mipsel-softmmu/hw/virtio/vhost-user.o
CC mips64-softmmu/target/mips/mips-semi.o
CC mips-softmmu/hw/net/vhost_net.o
CC mips64el-softmmu/target/mips/machine.o
CC mipsel-softmmu/hw/virtio/vhost-vsock.o
CC mips64-softmmu/target/mips/machine.o
GEN trace/generated-helpers.c
CC mips-softmmu/hw/scsi/virtio-scsi.o
CC mips64el-softmmu/trace/control-target.o
CC mipsel-softmmu/hw/virtio/virtio-crypto.o
GEN trace/generated-helpers.c
CC mips64-softmmu/trace/control-target.o
CC mips64el-softmmu/trace/generated-helpers.o
CC mips-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC mipsel-softmmu/hw/virtio/virtio-crypto-pci.o
CC mips64-softmmu/trace/generated-helpers.o
LINK mips64el-softmmu/qemu-system-mips64el
CC mips-softmmu/hw/scsi/vhost-scsi-common.o
LINK mips64-softmmu/qemu-system-mips64
CC mipsel-softmmu/hw/mips/mips_r4k.o
CC mips-softmmu/hw/scsi/vhost-scsi.o
CC mipsel-softmmu/hw/mips/mips_malta.o
CC mips-softmmu/hw/timer/mips_gictimer.o
CC mipsel-softmmu/hw/mips/mips_mipssim.o
CC mips-softmmu/hw/timer/mc146818rtc.o
CC mipsel-softmmu/hw/mips/addr.o
CC mips-softmmu/hw/vfio/common.o
CC mipsel-softmmu/hw/mips/cputimer.o
GEN moxie-softmmu/hmp-commands.h
GEN moxie-softmmu/hmp-commands-info.h
GEN moxie-softmmu/config-target.h
CC moxie-softmmu/exec.o
GEN nios2-softmmu/hmp-commands.h
GEN nios2-softmmu/hmp-commands-info.h
GEN nios2-softmmu/config-target.h
CC nios2-softmmu/exec.o
CC mipsel-softmmu/hw/mips/mips_int.o
CC mips-softmmu/hw/vfio/pci.o
CC mipsel-softmmu/hw/mips/gt64xxx_pci.o
CC mips-softmmu/hw/vfio/pci-quirks.o
CC mipsel-softmmu/hw/mips/cps.o
CC nios2-softmmu/translate-all.o
CC mipsel-softmmu/target/mips/translate.o
CC moxie-softmmu/translate-all.o
CC mips-softmmu/hw/vfio/platform.o
CC nios2-softmmu/cpu-exec.o
CC moxie-softmmu/cpu-exec.o
CC mips-softmmu/hw/vfio/spapr.o
CC moxie-softmmu/translate-common.o
CC nios2-softmmu/translate-common.o
CC nios2-softmmu/cpu-exec-common.o
CC mips-softmmu/hw/virtio/virtio.o
CC moxie-softmmu/cpu-exec-common.o
CC nios2-softmmu/tcg/tcg.o
CC moxie-softmmu/tcg/tcg.o
CC mips-softmmu/hw/virtio/virtio-balloon.o
CC mips-softmmu/hw/virtio/vhost.o
CC nios2-softmmu/tcg/tcg-op.o
CC moxie-softmmu/tcg/tcg-op.o
CC mips-softmmu/hw/virtio/vhost-backend.o
CC mips-softmmu/hw/virtio/vhost-user.o
CC mipsel-softmmu/target/mips/dsp_helper.o
CC mips-softmmu/hw/virtio/vhost-vsock.o
CC nios2-softmmu/tcg/optimize.o
CC moxie-softmmu/tcg/optimize.o
CC mips-softmmu/hw/virtio/virtio-crypto.o
CC mipsel-softmmu/target/mips/op_helper.o
CC moxie-softmmu/tcg/tcg-common.o
CC mips-softmmu/hw/virtio/virtio-crypto-pci.o
CC nios2-softmmu/tcg/tcg-common.o
CC nios2-softmmu/fpu/softfloat.o
CC moxie-softmmu/fpu/softfloat.o
CC mips-softmmu/hw/mips/mips_r4k.o
CC mips-softmmu/hw/mips/mips_malta.o
CC mipsel-softmmu/target/mips/lmi_helper.o
CC mips-softmmu/hw/mips/mips_mipssim.o
CC mips-softmmu/hw/mips/addr.o
CC mipsel-softmmu/target/mips/helper.o
CC mips-softmmu/hw/mips/cputimer.o
CC nios2-softmmu/disas.o
CC moxie-softmmu/disas.o
CC mips-softmmu/hw/mips/mips_int.o
CC mipsel-softmmu/target/mips/cpu.o
CC nios2-softmmu/tcg-runtime.o
CC mips-softmmu/hw/mips/gt64xxx_pci.o
CC moxie-softmmu/tcg-runtime.o
CC mipsel-softmmu/target/mips/gdbstub.o
CC nios2-softmmu/hax-stub.o
CC moxie-softmmu/hax-stub.o
CC mips-softmmu/hw/mips/cps.o
CC mipsel-softmmu/target/mips/msa_helper.o
CC nios2-softmmu/kvm-stub.o
CC moxie-softmmu/kvm-stub.o
CC mips-softmmu/target/mips/translate.o
CC nios2-softmmu/arch_init.o
CC moxie-softmmu/arch_init.o
CC nios2-softmmu/cpus.o
CC moxie-softmmu/cpus.o
CC nios2-softmmu/monitor.o
CC moxie-softmmu/monitor.o
CC nios2-softmmu/gdbstub.o
CC moxie-softmmu/gdbstub.o
CC nios2-softmmu/balloon.o
CC mipsel-softmmu/target/mips/mips-semi.o
CC nios2-softmmu/ioport.o
CC moxie-softmmu/balloon.o
CC mipsel-softmmu/target/mips/machine.o
CC moxie-softmmu/ioport.o
CC nios2-softmmu/numa.o
GEN trace/generated-helpers.c
CC mipsel-softmmu/trace/control-target.o
CC moxie-softmmu/numa.o
CC nios2-softmmu/qtest.o
CC mipsel-softmmu/trace/generated-helpers.o
CC nios2-softmmu/bootdevice.o
CC moxie-softmmu/qtest.o
CC mips-softmmu/target/mips/dsp_helper.o
LINK mipsel-softmmu/qemu-system-mipsel
CC nios2-softmmu/memory.o
CC moxie-softmmu/bootdevice.o
CC mips-softmmu/target/mips/op_helper.o
CC moxie-softmmu/memory.o
CC moxie-softmmu/cputlb.o
CC nios2-softmmu/cputlb.o
CC mips-softmmu/target/mips/lmi_helper.o
CC moxie-softmmu/memory_mapping.o
CC moxie-softmmu/dump.o
CC nios2-softmmu/memory_mapping.o
CC mips-softmmu/target/mips/helper.o
CC nios2-softmmu/dump.o
CC mips-softmmu/target/mips/cpu.o
CC moxie-softmmu/migration/ram.o
CC moxie-softmmu/hw/core/nmi.o
CC mips-softmmu/target/mips/gdbstub.o
CC moxie-softmmu/hw/core/generic-loader.o
CC nios2-softmmu/migration/ram.o
CC mips-softmmu/target/mips/msa_helper.o
CC mips-softmmu/target/mips/mips-semi.o
CC moxie-softmmu/hw/core/null-machine.o
CC moxie-softmmu/hw/cpu/core.o
CC nios2-softmmu/hw/core/nmi.o
CC moxie-softmmu/hw/display/vga.o
CC nios2-softmmu/hw/core/generic-loader.o
CC mips-softmmu/target/mips/machine.o
CC moxie-softmmu/hw/net/vhost_net.o
CC nios2-softmmu/hw/core/null-machine.o
CC nios2-softmmu/hw/cpu/core.o
CC moxie-softmmu/hw/net/rocker/qmp-norocker.o
CC nios2-softmmu/hw/intc/nios2_iic.o
GEN or1k-softmmu/hmp-commands.h
CC moxie-softmmu/hw/timer/mc146818rtc.o
GEN or1k-softmmu/hmp-commands-info.h
GEN or1k-softmmu/config-target.h
CC or1k-softmmu/exec.o
CC nios2-softmmu/hw/net/vhost_net.o
CC moxie-softmmu/hw/vfio/common.o
CC moxie-softmmu/hw/vfio/platform.o
CC nios2-softmmu/hw/net/rocker/qmp-norocker.o
CC moxie-softmmu/hw/vfio/spapr.o
CC nios2-softmmu/hw/timer/altera_timer.o
GEN trace/generated-helpers.c
CC mips-softmmu/trace/control-target.o
CC moxie-softmmu/hw/moxie/moxiesim.o
CC nios2-softmmu/hw/vfio/common.o
CC mips-softmmu/trace/generated-helpers.o
CC moxie-softmmu/target/moxie/translate.o
CC or1k-softmmu/translate-all.o
CC nios2-softmmu/hw/vfio/platform.o
LINK mips-softmmu/qemu-system-mips
CC moxie-softmmu/target/moxie/helper.o
CC or1k-softmmu/cpu-exec.o
CC nios2-softmmu/hw/vfio/spapr.o
CC moxie-softmmu/target/moxie/machine.o
CC or1k-softmmu/translate-common.o
CC nios2-softmmu/hw/nios2/boot.o
CC or1k-softmmu/cpu-exec-common.o
CC moxie-softmmu/target/moxie/cpu.o
CC nios2-softmmu/hw/nios2/cpu_pic.o
CC or1k-softmmu/tcg/tcg.o
CC moxie-softmmu/target/moxie/mmu.o
CC nios2-softmmu/hw/nios2/10m50_devboard.o
GEN trace/generated-helpers.c
CC moxie-softmmu/trace/control-target.o
CC or1k-softmmu/tcg/tcg-op.o
CC nios2-softmmu/target/nios2/translate.o
CC moxie-softmmu/trace/generated-helpers.o
LINK moxie-softmmu/qemu-system-moxie
CC nios2-softmmu/target/nios2/op_helper.o
GEN ppc64-softmmu/hmp-commands.h
CC nios2-softmmu/target/nios2/helper.o
GEN ppc64-softmmu/hmp-commands-info.h
GEN ppc64-softmmu/config-target.h
CC ppc64-softmmu/exec.o
CC nios2-softmmu/target/nios2/cpu.o
CC nios2-softmmu/target/nios2/mmu.o
CC nios2-softmmu/target/nios2/monitor.o
CC or1k-softmmu/tcg/optimize.o
GEN trace/generated-helpers.c
CC nios2-softmmu/trace/control-target.o
GEN ppcemb-softmmu/hmp-commands.h
GEN ppcemb-softmmu/hmp-commands-info.h
GEN ppcemb-softmmu/config-target.h
CC nios2-softmmu/trace/generated-helpers.o
CC ppcemb-softmmu/exec.o
CC or1k-softmmu/tcg/tcg-common.o
LINK nios2-softmmu/qemu-system-nios2
CC or1k-softmmu/fpu/softfloat.o
CC ppc64-softmmu/translate-all.o
CC ppc64-softmmu/cpu-exec.o
CC ppcemb-softmmu/translate-all.o
GEN ppc-softmmu/hmp-commands.h
GEN ppc-softmmu/hmp-commands-info.h
GEN ppc-softmmu/config-target.h
CC ppc64-softmmu/translate-common.o
CC ppc-softmmu/exec.o
CC ppc64-softmmu/cpu-exec-common.o
CC ppcemb-softmmu/cpu-exec.o
CC ppc64-softmmu/tcg/tcg.o
CC or1k-softmmu/disas.o
CC ppcemb-softmmu/translate-common.o
CC or1k-softmmu/tcg-runtime.o
CC ppcemb-softmmu/cpu-exec-common.o
CC ppcemb-softmmu/tcg/tcg.o
CC ppc-softmmu/translate-all.o
CC or1k-softmmu/hax-stub.o
CC ppc64-softmmu/tcg/tcg-op.o
CC or1k-softmmu/kvm-stub.o
CC ppc-softmmu/cpu-exec.o
CC or1k-softmmu/arch_init.o
CC ppc-softmmu/translate-common.o
CC or1k-softmmu/cpus.o
CC ppc-softmmu/cpu-exec-common.o
CC ppc-softmmu/tcg/tcg.o
CC ppcemb-softmmu/tcg/tcg-op.o
CC or1k-softmmu/monitor.o
CC ppc64-softmmu/tcg/optimize.o
CC ppc-softmmu/tcg/tcg-op.o
CC or1k-softmmu/gdbstub.o
CC ppc64-softmmu/tcg/tcg-common.o
CC ppc64-softmmu/fpu/softfloat.o
CC ppcemb-softmmu/tcg/optimize.o
CC or1k-softmmu/balloon.o
CC or1k-softmmu/ioport.o
CC or1k-softmmu/numa.o
CC ppcemb-softmmu/tcg/tcg-common.o
CC ppc-softmmu/tcg/optimize.o
CC ppcemb-softmmu/fpu/softfloat.o
CC or1k-softmmu/qtest.o
CC ppc64-softmmu/disas.o
CC or1k-softmmu/bootdevice.o
CC ppc-softmmu/tcg/tcg-common.o
CC ppc64-softmmu/tcg-runtime.o
CC or1k-softmmu/memory.o
GEN ppc64-softmmu/gdbstub-xml.c
CC ppc-softmmu/fpu/softfloat.o
CC or1k-softmmu/cputlb.o
CC ppcemb-softmmu/disas.o
CC ppcemb-softmmu/tcg-runtime.o
CC ppc64-softmmu/hax-stub.o
GEN ppcemb-softmmu/gdbstub-xml.c
CC ppc64-softmmu/kvm-stub.o
CC ppc64-softmmu/libdecnumber/decContext.o
CC ppcemb-softmmu/hax-stub.o
CC or1k-softmmu/memory_mapping.o
CC ppc64-softmmu/libdecnumber/decNumber.o
CC ppcemb-softmmu/kvm-stub.o
CC ppc-softmmu/disas.o
CC or1k-softmmu/dump.o
CC ppcemb-softmmu/libdecnumber/decContext.o
CC ppc-softmmu/tcg-runtime.o
CC ppcemb-softmmu/libdecnumber/decNumber.o
CC or1k-softmmu/migration/ram.o
GEN ppc-softmmu/gdbstub-xml.c
CC ppc64-softmmu/libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/libdecnumber/dpd/decimal64.o
CC or1k-softmmu/hw/core/nmi.o
CC ppc-softmmu/hax-stub.o
CC ppc64-softmmu/libdecnumber/dpd/decimal128.o
CC ppc-softmmu/kvm-stub.o
CC or1k-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/arch_init.o
CC or1k-softmmu/hw/core/null-machine.o
CC ppc-softmmu/libdecnumber/decContext.o
CC ppc64-softmmu/cpus.o
CC ppcemb-softmmu/libdecnumber/dpd/decimal64.o
CC ppc-softmmu/libdecnumber/decNumber.o
CC or1k-softmmu/hw/cpu/core.o
CC ppcemb-softmmu/libdecnumber/dpd/decimal128.o
CC or1k-softmmu/hw/net/vhost_net.o
CC ppc64-softmmu/monitor.o
CC or1k-softmmu/hw/net/rocker/qmp-norocker.o
CC ppcemb-softmmu/arch_init.o
CC or1k-softmmu/hw/vfio/common.o
CC ppcemb-softmmu/cpus.o
CC or1k-softmmu/hw/vfio/platform.o
CC ppc-softmmu/libdecnumber/dpd/decimal32.o
CC ppc64-softmmu/gdbstub.o
CC or1k-softmmu/hw/vfio/spapr.o
CC ppc-softmmu/libdecnumber/dpd/decimal64.o
CC ppcemb-softmmu/monitor.o
CC or1k-softmmu/hw/openrisc/pic_cpu.o
CC ppc-softmmu/libdecnumber/dpd/decimal128.o
CC ppc64-softmmu/balloon.o
CC or1k-softmmu/hw/openrisc/cputimer.o
CC ppc64-softmmu/ioport.o
CC ppc-softmmu/arch_init.o
CC or1k-softmmu/hw/openrisc/openrisc_sim.o
CC ppc64-softmmu/numa.o
CC or1k-softmmu/target/openrisc/machine.o
CC ppc-softmmu/cpus.o
CC or1k-softmmu/target/openrisc/cpu.o
CC ppcemb-softmmu/gdbstub.o
CC ppc64-softmmu/qtest.o
CC or1k-softmmu/target/openrisc/exception.o
CC ppc-softmmu/monitor.o
CC or1k-softmmu/target/openrisc/interrupt.o
CC ppc64-softmmu/bootdevice.o
CC ppcemb-softmmu/balloon.o
CC ppcemb-softmmu/ioport.o
CC or1k-softmmu/target/openrisc/mmu.o
CC ppc64-softmmu/memory.o
CC or1k-softmmu/target/openrisc/translate.o
CC ppcemb-softmmu/numa.o
CC ppcemb-softmmu/qtest.o
CC ppc-softmmu/gdbstub.o
CC or1k-softmmu/target/openrisc/exception_helper.o
CC ppcemb-softmmu/bootdevice.o
CC or1k-softmmu/target/openrisc/fpu_helper.o
CC ppc64-softmmu/cputlb.o
CC ppcemb-softmmu/memory.o
CC ppc-softmmu/balloon.o
CC or1k-softmmu/target/openrisc/interrupt_helper.o
CC ppc-softmmu/ioport.o
CC or1k-softmmu/target/openrisc/mmu_helper.o
CC ppc-softmmu/numa.o
CC or1k-softmmu/target/openrisc/sys_helper.o
CC ppcemb-softmmu/cputlb.o
CC ppc64-softmmu/memory_mapping.o
CC or1k-softmmu/target/openrisc/gdbstub.o
CC ppc-softmmu/qtest.o
GEN trace/generated-helpers.c
CC ppc64-softmmu/dump.o
CC or1k-softmmu/trace/control-target.o
CC or1k-softmmu/trace/generated-helpers.o
CC ppc-softmmu/bootdevice.o
CC ppc64-softmmu/migration/ram.o
LINK or1k-softmmu/qemu-system-or1k
CC ppc-softmmu/memory.o
CC ppcemb-softmmu/memory_mapping.o
CC ppc64-softmmu/hw/9pfs/virtio-9p-device.o
CC ppcemb-softmmu/dump.o
CC ppc64-softmmu/hw/block/virtio-blk.o
CC ppc64-softmmu/hw/block/dataplane/virtio-blk.o
CC ppc-softmmu/cputlb.o
CC ppcemb-softmmu/migration/ram.o
CC ppc-softmmu/memory_mapping.o
CC ppc64-softmmu/hw/char/spapr_vty.o
CC ppcemb-softmmu/hw/9pfs/virtio-9p-device.o
CC ppc64-softmmu/hw/char/virtio-serial-bus.o
CC ppcemb-softmmu/hw/block/virtio-blk.o
CC ppc-softmmu/dump.o
CC ppc64-softmmu/hw/core/nmi.o
GEN s390x-softmmu/hmp-commands.h
GEN s390x-softmmu/hmp-commands-info.h
CC s390x-softmmu/gen-features
CC ppcemb-softmmu/hw/block/dataplane/virtio-blk.o
GEN s390x-softmmu/config-target.h
GEN s390x-softmmu/gen-features.h
CC ppc64-softmmu/hw/core/generic-loader.o
CC ppcemb-softmmu/hw/char/virtio-serial-bus.o
CC ppc64-softmmu/hw/core/null-machine.o
CC s390x-softmmu/exec.o
CC ppc-softmmu/migration/ram.o
CC ppc64-softmmu/hw/cpu/core.o
CC ppcemb-softmmu/hw/core/nmi.o
CC ppcemb-softmmu/hw/core/generic-loader.o
CC ppc64-softmmu/hw/display/sm501.o
CC ppc-softmmu/hw/9pfs/virtio-9p-device.o
CC ppcemb-softmmu/hw/core/null-machine.o
CC ppcemb-softmmu/hw/cpu/core.o
CC ppc-softmmu/hw/block/virtio-blk.o
CC ppc64-softmmu/hw/display/vga.o
CC s390x-softmmu/translate-all.o
CC ppcemb-softmmu/hw/display/sm501.o
CC ppc-softmmu/hw/block/dataplane/virtio-blk.o
CC s390x-softmmu/cpu-exec.o
CC ppc-softmmu/hw/char/virtio-serial-bus.o
CC ppcemb-softmmu/hw/display/vga.o
CC ppc64-softmmu/hw/display/virtio-gpu.o
CC s390x-softmmu/translate-common.o
CC ppc-softmmu/hw/core/nmi.o
CC s390x-softmmu/cpu-exec-common.o
CC ppcemb-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/hw/core/generic-loader.o
CC s390x-softmmu/tcg/tcg.o
CC ppc64-softmmu/hw/display/virtio-gpu-3d.o
CC ppc-softmmu/hw/core/null-machine.o
CC ppc64-softmmu/hw/display/virtio-gpu-pci.o
CC ppcemb-softmmu/hw/display/virtio-gpu-3d.o
CC ppc64-softmmu/hw/display/virtio-vga.o
CC ppc-softmmu/hw/cpu/core.o
CC ppcemb-softmmu/hw/display/virtio-gpu-pci.o
CC ppc-softmmu/hw/display/sm501.o
CC ppc64-softmmu/hw/intc/xics.o
CC s390x-softmmu/tcg/tcg-op.o
CC ppcemb-softmmu/hw/misc/ivshmem.o
CC ppc64-softmmu/hw/intc/xics_spapr.o
CC ppc-softmmu/hw/display/vga.o
CC ppcemb-softmmu/hw/misc/edu.o
CC ppc64-softmmu/hw/intc/xics_pnv.o
CC ppcemb-softmmu/hw/net/xilinx_ethlite.o
CC ppc64-softmmu/hw/misc/ivshmem.o
CC ppcemb-softmmu/hw/net/virtio-net.o
CC ppc-softmmu/hw/display/virtio-gpu.o
CC ppc64-softmmu/hw/misc/edu.o
CC ppcemb-softmmu/hw/net/vhost_net.o
CC s390x-softmmu/tcg/optimize.o
CC ppc64-softmmu/hw/net/spapr_llan.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi.o
CC ppc-softmmu/hw/display/virtio-gpu-3d.o
CC ppcemb-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppc64-softmmu/hw/net/xilinx_ethlite.o
CC s390x-softmmu/tcg/tcg-common.o
CC ppc64-softmmu/hw/net/virtio-net.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi-common.o
CC s390x-softmmu/fpu/softfloat.o
CC ppcemb-softmmu/hw/scsi/vhost-scsi.o
CC ppc-softmmu/hw/display/virtio-gpu-pci.o
CC ppcemb-softmmu/hw/vfio/common.o
CC ppc64-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/misc/ivshmem.o
CC ppc64-softmmu/hw/net/fsl_etsec/etsec.o
CC ppcemb-softmmu/hw/vfio/pci.o
CC ppc64-softmmu/hw/net/fsl_etsec/registers.o
CC ppc-softmmu/hw/misc/edu.o
CC ppc64-softmmu/hw/net/fsl_etsec/rings.o
CC ppc-softmmu/hw/net/xilinx_ethlite.o
CC ppc64-softmmu/hw/net/fsl_etsec/miim.o
CC ppcemb-softmmu/hw/vfio/pci-quirks.o
CC ppc64-softmmu/hw/nvram/spapr_nvram.o
CC ppc-softmmu/hw/net/virtio-net.o
CC ppc64-softmmu/hw/scsi/spapr_vscsi.o
CC s390x-softmmu/disas.o
CC ppcemb-softmmu/hw/vfio/platform.o
CC s390x-softmmu/tcg-runtime.o
GEN s390x-softmmu/gdbstub-xml.c
CC ppc-softmmu/hw/net/vhost_net.o
CC ppc64-softmmu/hw/scsi/virtio-scsi.o
CC ppc-softmmu/hw/net/fsl_etsec/etsec.o
CC ppcemb-softmmu/hw/vfio/spapr.o
CC ppc-softmmu/hw/net/fsl_etsec/registers.o
CC ppc64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC s390x-softmmu/hax-stub.o
CC ppcemb-softmmu/hw/virtio/virtio.o
CC ppc-softmmu/hw/net/fsl_etsec/rings.o
CC ppc64-softmmu/hw/scsi/vhost-scsi-common.o
CC s390x-softmmu/arch_init.o
CC ppc-softmmu/hw/net/fsl_etsec/miim.o
CC ppc64-softmmu/hw/scsi/vhost-scsi.o
CC ppc-softmmu/hw/scsi/virtio-scsi.o
CC s390x-softmmu/cpus.o
CC ppcemb-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/timer/mc146818rtc.o
CC ppc-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC ppcemb-softmmu/hw/virtio/vhost.o
CC s390x-softmmu/monitor.o
CC ppc64-softmmu/hw/vfio/common.o
CC ppc-softmmu/hw/scsi/vhost-scsi-common.o
CC ppcemb-softmmu/hw/virtio/vhost-backend.o
CC ppc-softmmu/hw/scsi/vhost-scsi.o
CC ppc64-softmmu/hw/vfio/pci.o
CC ppcemb-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/timer/mc146818rtc.o
CC s390x-softmmu/gdbstub.o
CC ppcemb-softmmu/hw/virtio/vhost-vsock.o
CC ppc-softmmu/hw/vfio/common.o
CC ppc64-softmmu/hw/vfio/pci-quirks.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto.o
CC s390x-softmmu/balloon.o
CC s390x-softmmu/ioport.o
CC ppcemb-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc-softmmu/hw/vfio/pci.o
CC s390x-softmmu/numa.o
CC ppc64-softmmu/hw/vfio/platform.o
CC ppcemb-softmmu/hw/ppc/ppc.o
CC ppc64-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/qtest.o
CC ppc64-softmmu/hw/virtio/virtio.o
CC ppcemb-softmmu/hw/ppc/ppc_booke.o
CC s390x-softmmu/bootdevice.o
CC ppc-softmmu/hw/vfio/pci-quirks.o
CC ppcemb-softmmu/hw/ppc/fdt.o
CC s390x-softmmu/kvm-all.o
CC ppcemb-softmmu/hw/ppc/ppc405_boards.o
CC ppc-softmmu/hw/vfio/platform.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc64-softmmu/hw/virtio/virtio-balloon.o
CC ppc-softmmu/hw/vfio/spapr.o
CC s390x-softmmu/memory.o
CC ppcemb-softmmu/hw/ppc/ppc405_uc.o
CC ppc-softmmu/hw/virtio/virtio.o
CC ppc64-softmmu/hw/virtio/vhost.o
CC ppcemb-softmmu/hw/ppc/ppc440_bamboo.o
CC s390x-softmmu/cputlb.o
CC ppcemb-softmmu/hw/ppc/ppc4xx_pci.o
CC ppc-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/virtio/vhost-backend.o
CC ppcemb-softmmu/hw/ppc/virtex_ml507.o
CC ppc64-softmmu/hw/virtio/vhost-user.o
CC ppc-softmmu/hw/virtio/vhost.o
CC ppcemb-softmmu/target/ppc/cpu-models.o
CC ppc64-softmmu/hw/virtio/vhost-vsock.o
CC ppc-softmmu/hw/virtio/vhost-backend.o
CC ppc-softmmu/hw/virtio/vhost-user.o
CC ppc64-softmmu/hw/virtio/virtio-crypto.o
CC s390x-softmmu/memory_mapping.o
CC ppc64-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc-softmmu/hw/virtio/vhost-vsock.o
CC ppcemb-softmmu/target/ppc/cpu.o
CC s390x-softmmu/dump.o
CC ppc64-softmmu/hw/ppc/ppc.o
CC ppc-softmmu/hw/virtio/virtio-crypto.o
CC ppcemb-softmmu/target/ppc/translate.o
CC ppc-softmmu/hw/virtio/virtio-crypto-pci.o
CC s390x-softmmu/migration/ram.o
CC ppc64-softmmu/hw/ppc/ppc_booke.o
CC ppc64-softmmu/hw/ppc/fdt.o
CC ppc-softmmu/hw/ppc/ppc.o
CC ppc64-softmmu/hw/ppc/spapr.o
CC s390x-softmmu/hw/9pfs/virtio-9p-device.o
CC ppc-softmmu/hw/ppc/ppc_booke.o
CC s390x-softmmu/hw/block/virtio-blk.o
CC ppc-softmmu/hw/ppc/fdt.o
CC ppc64-softmmu/hw/ppc/spapr_vio.o
CC s390x-softmmu/hw/block/dataplane/virtio-blk.o
CC ppc-softmmu/hw/ppc/ppc405_boards.o
CC ppc64-softmmu/hw/ppc/spapr_events.o
CC s390x-softmmu/hw/char/virtio-serial-bus.o
CC ppc-softmmu/hw/ppc/ppc4xx_devs.o
CC ppc64-softmmu/hw/ppc/spapr_hcall.o
CC s390x-softmmu/hw/char/terminal3270.o
CC ppc-softmmu/hw/ppc/ppc405_uc.o
CC ppc64-softmmu/hw/ppc/spapr_iommu.o
CC s390x-softmmu/hw/core/nmi.o
CC ppc64-softmmu/hw/ppc/spapr_rtas.o
CC s390x-softmmu/hw/core/generic-loader.o
CC ppc-softmmu/hw/ppc/ppc440_bamboo.o
CC ppc-softmmu/hw/ppc/ppc4xx_pci.o
CC s390x-softmmu/hw/core/null-machine.o
CC ppc64-softmmu/hw/ppc/spapr_pci.o
CC ppc-softmmu/hw/ppc/prep.o
CC s390x-softmmu/hw/cpu/core.o
CC s390x-softmmu/hw/display/virtio-gpu.o
CC ppc-softmmu/hw/ppc/prep_systemio.o
CC ppc64-softmmu/hw/ppc/spapr_rtc.o
CC ppc-softmmu/hw/ppc/rs6000_mc.o
CC ppc64-softmmu/hw/ppc/spapr_drc.o
CC s390x-softmmu/hw/display/virtio-gpu-3d.o
CC ppc-softmmu/hw/ppc/mac_oldworld.o
CC ppc64-softmmu/hw/ppc/spapr_rng.o
CC ppc-softmmu/hw/ppc/mac_newworld.o
CC ppc64-softmmu/hw/ppc/spapr_cpu_core.o
CC s390x-softmmu/hw/display/virtio-gpu-pci.o
CC ppc-softmmu/hw/ppc/e500.o
CC s390x-softmmu/hw/intc/s390_flic.o
CC ppc64-softmmu/hw/ppc/spapr_ovec.o
CC ppc-softmmu/hw/ppc/mpc8544ds.o
CC ppc64-softmmu/hw/ppc/pnv.o
CC s390x-softmmu/hw/intc/s390_flic_kvm.o
CC ppc-softmmu/hw/ppc/e500plat.o
CC s390x-softmmu/hw/net/virtio-net.o
CC ppc64-softmmu/hw/ppc/pnv_xscom.o
CC ppc-softmmu/hw/ppc/mpc8544_guts.o
CC ppc-softmmu/hw/ppc/ppce500_spin.o
CC ppc64-softmmu/hw/ppc/pnv_core.o
CC s390x-softmmu/hw/net/vhost_net.o
CC ppc-softmmu/hw/ppc/virtex_ml507.o
CC ppc64-softmmu/hw/ppc/pnv_lpc.o
CC ppc-softmmu/target/ppc/cpu-models.o
CC s390x-softmmu/hw/net/rocker/qmp-norocker.o
CC ppc64-softmmu/hw/ppc/pnv_psi.o
CC s390x-softmmu/hw/scsi/virtio-scsi.o
CC ppc64-softmmu/hw/ppc/pnv_occ.o
CC s390x-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC s390x-softmmu/hw/scsi/vhost-scsi-common.o
CC ppc64-softmmu/hw/ppc/pnv_bmc.o
CC ppc-softmmu/target/ppc/cpu.o
CC ppc64-softmmu/hw/ppc/spapr_pci_vfio.o
CC s390x-softmmu/hw/scsi/vhost-scsi.o
CC ppc-softmmu/target/ppc/translate.o
CC ppc64-softmmu/hw/ppc/spapr_rtas_ddw.o
CC s390x-softmmu/hw/vfio/common.o
CC ppc64-softmmu/hw/ppc/ppc405_boards.o
CC s390x-softmmu/hw/vfio/pci.o
CC ppcemb-softmmu/target/ppc/machine.o
CC ppc64-softmmu/hw/ppc/ppc4xx_devs.o
CC ppcemb-softmmu/target/ppc/mmu_helper.o
CC ppc64-softmmu/hw/ppc/ppc405_uc.o
CC s390x-softmmu/hw/vfio/pci-quirks.o
CC ppcemb-softmmu/target/ppc/mmu-hash32.o
CC s390x-softmmu/hw/vfio/ccw.o
CC ppcemb-softmmu/target/ppc/monitor.o
CC ppc64-softmmu/hw/ppc/ppc440_bamboo.o
CC s390x-softmmu/hw/vfio/platform.o
CC ppcemb-softmmu/target/ppc/arch_dump.o
CC ppc64-softmmu/hw/ppc/ppc4xx_pci.o
CC ppcemb-softmmu/target/ppc/kvm-stub.o
CC s390x-softmmu/hw/vfio/spapr.o
CC ppcemb-softmmu/target/ppc/dfp_helper.o
CC ppc64-softmmu/hw/ppc/prep.o
CC s390x-softmmu/hw/virtio/virtio.o
CC ppc64-softmmu/hw/ppc/prep_systemio.o
CC ppcemb-softmmu/target/ppc/excp_helper.o
CC ppc64-softmmu/hw/ppc/rs6000_mc.o
CC s390x-softmmu/hw/virtio/virtio-balloon.o
CC ppc64-softmmu/hw/ppc/mac_oldworld.o
CC ppcemb-softmmu/target/ppc/fpu_helper.o
CC s390x-softmmu/hw/virtio/vhost.o
CC ppc64-softmmu/hw/ppc/mac_newworld.o
CC ppc64-softmmu/hw/ppc/e500.o
CC s390x-softmmu/hw/virtio/vhost-backend.o
CC s390x-softmmu/hw/virtio/vhost-user.o
CC ppc64-softmmu/hw/ppc/mpc8544ds.o
CC s390x-softmmu/hw/virtio/vhost-vsock.o
CC s390x-softmmu/hw/virtio/virtio-crypto.o
CC ppc64-softmmu/hw/ppc/e500plat.o
CC ppc64-softmmu/hw/ppc/mpc8544_guts.o
CC s390x-softmmu/hw/virtio/virtio-crypto-pci.o
CC ppc64-softmmu/hw/ppc/ppce500_spin.o
CC s390x-softmmu/hw/s390x/s390-virtio.o
CC ppcemb-softmmu/target/ppc/int_helper.o
CC ppc64-softmmu/hw/ppc/virtex_ml507.o
CC s390x-softmmu/hw/s390x/s390-virtio-hcall.o
CC s390x-softmmu/hw/s390x/sclp.o
CC ppc64-softmmu/target/ppc/cpu-models.o
CC s390x-softmmu/hw/s390x/event-facility.o
CC ppcemb-softmmu/target/ppc/timebase_helper.o
CC s390x-softmmu/hw/s390x/sclpquiesce.o
CC ppcemb-softmmu/target/ppc/misc_helper.o
CC ppc64-softmmu/target/ppc/cpu.o
CC s390x-softmmu/hw/s390x/sclpcpu.o
CC ppcemb-softmmu/target/ppc/mem_helper.o
CC ppc64-softmmu/target/ppc/translate.o
CC s390x-softmmu/hw/s390x/ipl.o
CC ppc-softmmu/target/ppc/machine.o
CC s390x-softmmu/hw/s390x/css.o
CC ppcemb-softmmu/target/ppc/gdbstub.o
GEN trace/generated-helpers.c
CC ppcemb-softmmu/trace/control-target.o
CC ppc-softmmu/target/ppc/mmu_helper.o
CC ppcemb-softmmu/gdbstub-xml.o
CC s390x-softmmu/hw/s390x/s390-virtio-ccw.o
CC ppcemb-softmmu/trace/generated-helpers.o
CC s390x-softmmu/hw/s390x/3270-ccw.o
CC ppc-softmmu/target/ppc/mmu-hash32.o
LINK ppcemb-softmmu/qemu-system-ppcemb
CC s390x-softmmu/hw/s390x/virtio-ccw.o
CC ppc-softmmu/target/ppc/monitor.o
CC s390x-softmmu/hw/s390x/css-bridge.o
CC ppc-softmmu/target/ppc/arch_dump.o
CC s390x-softmmu/hw/s390x/ccw-device.o
CC ppc-softmmu/target/ppc/kvm-stub.o
CC s390x-softmmu/hw/s390x/s390-pci-bus.o
CC ppc-softmmu/target/ppc/dfp_helper.o
CC s390x-softmmu/hw/s390x/s390-pci-inst.o
GEN sh4eb-softmmu/hmp-commands.h
GEN sh4eb-softmmu/hmp-commands-info.h
GEN sh4eb-softmmu/config-target.h
CC ppc-softmmu/target/ppc/excp_helper.o
CC sh4eb-softmmu/exec.o
CC s390x-softmmu/hw/s390x/s390-skeys.o
CC ppc-softmmu/target/ppc/fpu_helper.o
CC s390x-softmmu/hw/s390x/s390-skeys-kvm.o
CC s390x-softmmu/hw/s390x/s390-ccw.o
CC sh4eb-softmmu/translate-all.o
CC s390x-softmmu/target/s390x/translate.o
CC sh4eb-softmmu/cpu-exec.o
CC sh4eb-softmmu/translate-common.o
CC sh4eb-softmmu/cpu-exec-common.o
CC ppc-softmmu/target/ppc/int_helper.o
CC sh4eb-softmmu/tcg/tcg.o
CC s390x-softmmu/target/s390x/helper.o
CC s390x-softmmu/target/s390x/cpu.o
CC s390x-softmmu/target/s390x/interrupt.o
CC sh4eb-softmmu/tcg/tcg-op.o
CC ppc-softmmu/target/ppc/timebase_helper.o
CC s390x-softmmu/target/s390x/int_helper.o
CC s390x-softmmu/target/s390x/fpu_helper.o
CC ppc-softmmu/target/ppc/misc_helper.o
CC s390x-softmmu/target/s390x/cc_helper.o
CC ppc64-softmmu/target/ppc/machine.o
CC ppc-softmmu/target/ppc/mem_helper.o
CC s390x-softmmu/target/s390x/mem_helper.o
CC ppc64-softmmu/target/ppc/mmu_helper.o
CC ppc-softmmu/target/ppc/gdbstub.o
CC sh4eb-softmmu/tcg/optimize.o
GEN trace/generated-helpers.c
CC ppc-softmmu/trace/control-target.o
CC ppc64-softmmu/target/ppc/mmu-hash32.o
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c: In function ‘helper_lpq’:
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1675:16: error: implicit declaration of function ‘helper_atomic_ldo_be_mmu’ [-Werror=implicit-function-declaration]
Int128 v = helper_atomic_ldo_be_mmu(env, addr, oi, ra);
^~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1675:5: error: nested extern declaration of ‘helper_atomic_ldo_be_mmu’ [-Werror=nested-externs]
Int128 v = helper_atomic_ldo_be_mmu(env, addr, oi, ra);
^~~~~~
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c: In function ‘helper_stpq’:
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1690:5: error: implicit declaration of function ‘helper_atomic_sto_be_mmu’ [-Werror=implicit-function-declaration]
helper_atomic_sto_be_mmu(env, addr, v, oi, ra);
^~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1690:5: error: nested extern declaration of ‘helper_atomic_sto_be_mmu’ [-Werror=nested-externs]
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-9ddil10x/src/rules.mak:69: recipe for target 'target/s390x/mem_helper.o' failed
make[1]: *** [target/s390x/mem_helper.o] Error 1
Makefile:327: recipe for target 'subdir-s390x-softmmu' failed
make: *** [subdir-s390x-softmmu] Error 2
make: *** Waiting for unfinished jobs....
CC sh4eb-softmmu/tcg/tcg-common.o
CC ppc-softmmu/gdbstub-xml.o
CC ppc64-softmmu/target/ppc/monitor.o
CC ppc-softmmu/trace/generated-helpers.o
CC sh4eb-softmmu/fpu/softfloat.o
CC sh4eb-softmmu/disas.o
CC ppc64-softmmu/target/ppc/arch_dump.o
CC ppc64-softmmu/target/ppc/mmu-hash64.o
CC ppc64-softmmu/target/ppc/mmu-book3s-v3.o
LINK ppc-softmmu/qemu-system-ppc
CC sh4eb-softmmu/tcg-runtime.o
CC ppc64-softmmu/target/ppc/compat.o
CC ppc64-softmmu/target/ppc/mmu-radix64.o
CC ppc64-softmmu/target/ppc/kvm-stub.o
CC sh4eb-softmmu/hax-stub.o
CC ppc64-softmmu/target/ppc/dfp_helper.o
CC ppc64-softmmu/target/ppc/excp_helper.o
CC sh4eb-softmmu/kvm-stub.o
CC ppc64-softmmu/target/ppc/fpu_helper.o
CC ppc64-softmmu/target/ppc/int_helper.o
CC sh4eb-softmmu/arch_init.o
CC ppc64-softmmu/target/ppc/timebase_helper.o
CC ppc64-softmmu/target/ppc/misc_helper.o
CC sh4eb-softmmu/cpus.o
CC ppc64-softmmu/target/ppc/mem_helper.o
CC sh4eb-softmmu/monitor.o
CC ppc64-softmmu/target/ppc/gdbstub.o
GEN trace/generated-helpers.c
CC ppc64-softmmu/trace/control-target.o
CC ppc64-softmmu/gdbstub-xml.o
CC sh4eb-softmmu/gdbstub.o
CC ppc64-softmmu/trace/generated-helpers.o
CC sh4eb-softmmu/balloon.o
CC sh4eb-softmmu/ioport.o
CC sh4eb-softmmu/numa.o
CC sh4eb-softmmu/qtest.o
CC sh4eb-softmmu/bootdevice.o
CC sh4eb-softmmu/memory.o
CC sh4eb-softmmu/cputlb.o
LINK ppc64-softmmu/qemu-system-ppc64
CC sh4eb-softmmu/memory_mapping.o
CC sh4eb-softmmu/dump.o
CC sh4eb-softmmu/migration/ram.o
CC sh4eb-softmmu/hw/9pfs/virtio-9p-device.o
CC sh4eb-softmmu/hw/block/tc58128.o
CC sh4eb-softmmu/hw/block/virtio-blk.o
CC sh4eb-softmmu/hw/block/dataplane/virtio-blk.o
CC sh4eb-softmmu/hw/char/sh_serial.o
CC sh4eb-softmmu/hw/char/virtio-serial-bus.o
CC sh4eb-softmmu/hw/core/nmi.o
CC sh4eb-softmmu/hw/core/generic-loader.o
CC sh4eb-softmmu/hw/core/null-machine.o
CC sh4eb-softmmu/hw/cpu/core.o
CC sh4eb-softmmu/hw/display/sm501.o
CC sh4eb-softmmu/hw/display/vga.o
CC sh4eb-softmmu/hw/display/virtio-gpu.o
CC sh4eb-softmmu/hw/display/virtio-gpu-3d.o
CC sh4eb-softmmu/hw/display/virtio-gpu-pci.o
CC sh4eb-softmmu/hw/misc/ivshmem.o
CC sh4eb-softmmu/hw/intc/sh_intc.o
CC sh4eb-softmmu/hw/misc/edu.o
CC sh4eb-softmmu/hw/net/virtio-net.o
CC sh4eb-softmmu/hw/net/vhost_net.o
CC sh4eb-softmmu/hw/scsi/virtio-scsi.o
CC sh4eb-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC sh4eb-softmmu/hw/scsi/vhost-scsi-common.o
CC sh4eb-softmmu/hw/scsi/vhost-scsi.o
CC sh4eb-softmmu/hw/timer/sh_timer.o
CC sh4eb-softmmu/hw/timer/mc146818rtc.o
CC sh4eb-softmmu/hw/vfio/common.o
CC sh4eb-softmmu/hw/vfio/pci.o
CC sh4eb-softmmu/hw/vfio/pci-quirks.o
CC sh4eb-softmmu/hw/vfio/platform.o
CC sh4eb-softmmu/hw/vfio/spapr.o
CC sh4eb-softmmu/hw/virtio/virtio.o
CC sh4eb-softmmu/hw/virtio/vhost.o
CC sh4eb-softmmu/hw/virtio/virtio-balloon.o
CC sh4eb-softmmu/hw/virtio/vhost-backend.o
CC sh4eb-softmmu/hw/virtio/vhost-user.o
CC sh4eb-softmmu/hw/virtio/vhost-vsock.o
CC sh4eb-softmmu/hw/virtio/virtio-crypto.o
CC sh4eb-softmmu/hw/virtio/virtio-crypto-pci.o
CC sh4eb-softmmu/hw/sh4/shix.o
CC sh4eb-softmmu/hw/sh4/r2d.o
CC sh4eb-softmmu/hw/sh4/sh7750.o
CC sh4eb-softmmu/hw/sh4/sh7750_regnames.o
CC sh4eb-softmmu/hw/sh4/sh_pci.o
CC sh4eb-softmmu/target/sh4/translate.o
CC sh4eb-softmmu/target/sh4/op_helper.o
CC sh4eb-softmmu/target/sh4/helper.o
CC sh4eb-softmmu/target/sh4/cpu.o
CC sh4eb-softmmu/target/sh4/monitor.o
CC sh4eb-softmmu/target/sh4/gdbstub.o
GEN trace/generated-helpers.c
CC sh4eb-softmmu/trace/control-target.o
CC sh4eb-softmmu/trace/generated-helpers.o
LINK sh4eb-softmmu/qemu-system-sh4eb
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [Qemu-devel] [PULL 00/69] target/s390x tcg patches
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
` (69 preceding siblings ...)
2017-06-04 18:32 ` [Qemu-devel] [PULL 00/69] target/s390x tcg patches no-reply
@ 2017-06-04 19:53 ` Aurelien Jarno
70 siblings, 0 replies; 73+ messages in thread
From: Aurelien Jarno @ 2017-06-04 19:53 UTC (permalink / raw)
To: Richard Henderson; +Cc: qemu-devel, peter.maydell
On 2017-06-04 10:34, Richard Henderson wrote:
> The queue has gotten overlong. This includes my unwinding patches,
> the execute rewrite, and Aurelien's flushing out of missing Z insns.
>
> It does *not* include Aurelian's final patch to bump the base tcg
> cpu to z800. David Hildenbrand had objections to that; I expect
> that we can address that in the next patch set.
Fair enough. I think I'll put this one in standby and look at that again
when QEMU can emulate a higher model like a z990.
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [Qemu-devel] [PULL 00/69] target/s390x tcg patches
2017-06-04 18:32 ` [Qemu-devel] [PULL 00/69] target/s390x tcg patches no-reply
@ 2017-06-04 19:54 ` Aurelien Jarno
0 siblings, 0 replies; 73+ messages in thread
From: Aurelien Jarno @ 2017-06-04 19:54 UTC (permalink / raw)
To: qemu-devel; +Cc: rth, famz, peter.maydell
On 2017-06-04 11:32, no-reply@patchew.org wrote:
> Hi,
>
> This series failed build test on s390x host. Please find the details below.
>
> Subject: [Qemu-devel] [PULL 00/69] target/s390x tcg patches
> Message-id: 20170604173509.29684-1-rth@twiddle.net
> Type: series
>
[snip]
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c: In function ‘helper_lpq’:
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1675:16: error: implicit declaration of function ‘helper_atomic_ldo_be_mmu’ [-Werror=implicit-function-declaration]
> Int128 v = helper_atomic_ldo_be_mmu(env, addr, oi, ra);
> ^~~~~~~~~~~~~~~~~~~~~~~~
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1675:5: error: nested extern declaration of ‘helper_atomic_ldo_be_mmu’ [-Werror=nested-externs]
> Int128 v = helper_atomic_ldo_be_mmu(env, addr, oi, ra);
> ^~~~~~
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c: In function ‘helper_stpq’:
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1690:5: error: implicit declaration of function ‘helper_atomic_sto_be_mmu’ [-Werror=implicit-function-declaration]
> helper_atomic_sto_be_mmu(env, addr, v, oi, ra);
> ^~~~~~~~~~~~~~~~~~~~~~~~
> /var/tmp/patchew-tester-tmp-9ddil10x/src/target/s390x/mem_helper.c:1690:5: error: nested extern declaration of ‘helper_atomic_sto_be_mmu’ [-Werror=nested-externs]
> cc1: all warnings being treated as errors
> /var/tmp/patchew-tester-tmp-9ddil10x/src/rules.mak:69: recipe for target 'target/s390x/mem_helper.o' failed
> make[1]: *** [target/s390x/mem_helper.o] Error 1
> Makefile:327: recipe for target 'subdir-s390x-softmmu' failed
> make: *** [subdir-s390x-softmmu] Error 2
> make: *** Waiting for unfinished jobs....
Sorry for not testing test building those patches properly.
The best is probably to just drop them for now as they are independent
besides some easy conflict to solve in helper.h. Properly implementing
the !CONFIG_ATOMIC128 case requires to check the alignment and it's
better done with the check_alignment function introduced later in the
series.
I'll send new patches for those two instructions in the next hours.
Aurelien
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 73+ messages in thread
end of thread, other threads:[~2017-06-04 19:54 UTC | newest]
Thread overview: 73+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-04 17:34 [Qemu-devel] [PULL 00/69] target/s390x tcg patches Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 01/69] target/s390x: Add support for the TEST BLOCK instruction Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 02/69] target/s390x: Use cpu_loop_exit_restore for tlb_fill Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 03/69] target/s390x: Move helper_ex to end of file Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 04/69] target/s390x: Use unwind data for helper_nc Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 05/69] target/s390x: Use unwind data for helper_oc Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 06/69] target/s390x: Use unwind data for helper_xc Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 07/69] target/s390x: Use unwind data for helper_mvc Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 08/69] target/s390x: Use unwind data for helper_clc Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 09/69] target/s390x: Use unwind data for helper_clm Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 10/69] target/s390x: Use unwind data for helper_srst Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 11/69] target/s390x: Use unwind data for helper_clst Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 12/69] target/s390x: Use unwind data for helper_mvpg Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 13/69] target/s390x: Use unwind data for helper_mvst Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 14/69] target/s390x: Use unwind data for helper_lam Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 15/69] target/s390x: Use unwind data for helper_stam Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 16/69] target/s390x: Use unwind data for helper_mvcl Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 17/69] target/s390x: Use unwind data for helper_mvcle Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 18/69] target/s390x: Use unwind data for helper_clcle Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 19/69] target/s390x: Use unwind data for helper_cksm Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 20/69] target/s390x: Use unwind data for helper_unpk Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 21/69] target/s390x: Use unwind data for helper_tr Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 22/69] target/s390x: Use unwind data for helper_tre Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 23/69] target/s390x: Use unwind data for helper_trt Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 24/69] target/s390x: Use unwind data for helper_lctlg Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 25/69] target/s390x: Use unwind data for helper_lctl Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 26/69] target/s390x: Use unwind data for helper_stctl Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 27/69] target/s390x: Use unwind data for helper_testblock Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 28/69] target/s390x: Use unwind data for helper_tprot Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 29/69] target/s390x: Use unwind data for helper_lra Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 30/69] target/s390x: Use unwind data for helper_mvcs/mvcp Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 31/69] target/s390x: Fix some helper_ex problems Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 32/69] target/s390x: Fix EXECUTE with R1==0 Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 33/69] target/s390x: Use atomic operations for COMPARE SWAP PURGE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 34/69] target/s390x: Implement CSPG Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 35/69] target/s390x: Save current ilen during translation Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 36/69] target/s390x: End the TB after EXECUTE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 37/69] target/s390x: Implement EXECUTE via new TranslationBlock Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 38/69] target/s390x: Re-implement a few EXECUTE target insns directly Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 39/69] target/s390x/cpu_models: Allow some additional feature bits for the "qemu" CPU Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 40/69] target/s390x: remove dead code in translate.c Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 41/69] target/s390x: remove some Linux assumptions from IPTE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 42/69] target/s390x: implement local-TLB-clearing in IPTE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 43/69] target/s390x: implement TEST AND SET Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 44/69] target/s390x: implement TEST ADDRESSING MODE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 45/69] target/s390x: implement PACK Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 46/69] target/s390x: implement LOAD PAIR FROM QUADWORD Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 47/69] target/s390x: implement STORE PAIR TO QUADWORD Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 48/69] target/s390x: implement COMPARE AND SIGNAL Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 49/69] target/s390x: implement MOVE INVERSE Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 50/69] target/s390x: implement MOVE NUMERICS Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 51/69] target/s390x: implement MOVE WITH OFFSET Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 52/69] target/s390x: implement MOVE ZONES Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 53/69] target/s390x: improve 24-bit and 31-bit addresses read Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 54/69] target/s390x: improve 24-bit and 31-bit addresses write Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 55/69] target/s390x: improve 24-bit and 31-bit lengths read/write Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 56/69] target/s390x: fix COMPARE LOGICAL LONG EXTENDED Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 57/69] target/s390x: implement COMPARE LOGICAL LONG Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 58/69] target/s390x: fix adj_len_to_page Richard Henderson
2017-06-04 17:34 ` [Qemu-devel] [PULL 59/69] target/s390x: improve MOVE LONG and MOVE LONG EXTENDED Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 60/69] target/s390x: implement COMPARE LOGICAL LONG UNICODE Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 61/69] target/s390x: implement MOVE " Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 62/69] target/s390x: implement PACK ASCII Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 63/69] target/s390x: implement PACK UNICODE Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 64/69] target/s390x: implement UNPACK ASCII Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 65/69] target/s390x: implement UNPACK UNICODE Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 66/69] target/s390x: implement TEST DECIMAL Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 67/69] target/s390x: implement TRANSLATE ONE/TWO TO ONE/TWO Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 68/69] target/s390x: mark ETF2 and ETF2-ENH facilities as available Richard Henderson
2017-06-04 17:35 ` [Qemu-devel] [PULL 69/69] target/s390x: addressing exceptions are suppressing Richard Henderson
2017-06-04 18:32 ` [Qemu-devel] [PULL 00/69] target/s390x tcg patches no-reply
2017-06-04 19:54 ` Aurelien Jarno
2017-06-04 19:53 ` Aurelien Jarno
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).