* [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k
@ 2017-01-13 18:36 Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 1/5] target-m68k: fix bit operation with immediate value Laurent Vivier
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
This is a series of fixes for target/m68k found:
- with RISU (bit operation with immediate)
- while debugging package build under chroot
(gen_flush_flags() and CAS address modes)
- while I was working on the softmmu mode
(CAS alignment and SP address modes)
v2:
- Don't align stack access on coldfire.
v3:
- Fix v2 :( that has introduced a subi instead of
an addi
Laurent Vivier (5):
target-m68k: fix bit operation with immediate value
target-m68k: fix gen_flush_flags()
target-m68k: manage pre-dec et post-inc in CAS
target-m68k: CAS doesn't need aligned access
target-m68k: increment/decrement with SP
target/m68k/translate.c | 40 +++++++++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 7 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 1/5] target-m68k: fix bit operation with immediate value
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
@ 2017-01-13 18:36 ` Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 2/5] target-m68k: fix gen_flush_flags() Laurent Vivier
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
M680x0 bit operations with an immediate value use 9 bits of the 16bit
value, while coldfire ones use only 8 bits.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
---
target/m68k/translate.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 5f7357e..410f56a 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -1801,9 +1801,16 @@ DISAS_INSN(bitop_im)
op = (insn >> 6) & 3;
bitnum = read_im16(env, s);
- if (bitnum & 0xff00) {
- disas_undef(env, s, insn);
- return;
+ if (m68k_feature(s->env, M68K_FEATURE_M68000)) {
+ if (bitnum & 0xfe00) {
+ disas_undef(env, s, insn);
+ return;
+ }
+ } else {
+ if (bitnum & 0xff00) {
+ disas_undef(env, s, insn);
+ return;
+ }
}
SRC_EA(env, src1, opsize, 0, op ? &addr: NULL);
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 2/5] target-m68k: fix gen_flush_flags()
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 1/5] target-m68k: fix bit operation with immediate value Laurent Vivier
@ 2017-01-13 18:36 ` Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 3/5] target-m68k: manage pre-dec et post-inc in CAS Laurent Vivier
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
gen_flush_flags() is setting unconditionally cc_op_synced to 1
and s->cc_op to CC_OP_FLAGS, whereas env->cc_op can be set
to something else by a previous tcg fragment.
We fix that by not setting cc_op_synced to 1
(except for gen_helper_flush_flags() that updates env->cc_op)
FIX: https://github.com/vivier/qemu-m68k/issues/19
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
---
target/m68k/translate.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 410f56a..0e97900 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -595,18 +595,19 @@ static void gen_flush_flags(DisasContext *s)
case CC_OP_DYNAMIC:
gen_helper_flush_flags(cpu_env, QREG_CC_OP);
+ s->cc_op_synced = 1;
break;
default:
t0 = tcg_const_i32(s->cc_op);
gen_helper_flush_flags(cpu_env, t0);
tcg_temp_free(t0);
+ s->cc_op_synced = 1;
break;
}
/* Note that flush_flags also assigned to env->cc_op. */
s->cc_op = CC_OP_FLAGS;
- s->cc_op_synced = 1;
}
static inline TCGv gen_extend(TCGv val, int opsize, int sign)
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 3/5] target-m68k: manage pre-dec et post-inc in CAS
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 1/5] target-m68k: fix bit operation with immediate value Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 2/5] target-m68k: fix gen_flush_flags() Laurent Vivier
@ 2017-01-13 18:36 ` Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 4/5] target-m68k: CAS doesn't need aligned access Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP Laurent Vivier
4 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
In these cases we must update the address register after
the operation.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
---
target/m68k/translate.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 0e97900..23e2b06 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -1963,6 +1963,15 @@ DISAS_INSN(cas)
gen_partset_reg(opsize, DREG(ext, 0), load);
tcg_temp_free(load);
+
+ switch (extract32(insn, 3, 3)) {
+ case 3: /* Indirect postincrement. */
+ tcg_gen_addi_i32(AREG(insn, 0), addr, opsize_bytes(opsize));
+ break;
+ case 4: /* Indirect predecrememnt. */
+ tcg_gen_mov_i32(AREG(insn, 0), addr);
+ break;
+ }
}
DISAS_INSN(cas2w)
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 4/5] target-m68k: CAS doesn't need aligned access
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
` (2 preceding siblings ...)
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 3/5] target-m68k: manage pre-dec et post-inc in CAS Laurent Vivier
@ 2017-01-13 18:36 ` Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP Laurent Vivier
4 siblings, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
---
target/m68k/translate.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index 23e2b06..cf5d8dd 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -1934,7 +1934,6 @@ DISAS_INSN(cas)
default:
g_assert_not_reached();
}
- opc |= MO_ALIGN;
ext = read_im16(env, s);
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
` (3 preceding siblings ...)
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 4/5] target-m68k: CAS doesn't need aligned access Laurent Vivier
@ 2017-01-13 18:36 ` Laurent Vivier
2017-01-13 20:08 ` Richard Henderson
4 siblings, 1 reply; 7+ messages in thread
From: Laurent Vivier @ 2017-01-13 18:36 UTC (permalink / raw)
To: qemu-devel; +Cc: Thomas Huth, rth, Laurent Vivier
On 680x0 family only.
Address Register indirect With postincrement:
When using the stack pointer (A7) with byte size data, the register
is incremented by two.
Address Register indirect With predecrement:
When using the stack pointer (A7) with byte size data, the register
is decremented by two.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Thomas Huth <huth@tuxfamily.org>
---
target/m68k/translate.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index cf5d8dd..9f60fbc 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -725,7 +725,12 @@ static TCGv gen_lea_mode(CPUM68KState *env, DisasContext *s,
}
reg = get_areg(s, reg0);
tmp = tcg_temp_new();
- tcg_gen_subi_i32(tmp, reg, opsize_bytes(opsize));
+ if (reg0 == 7 && opsize == OS_BYTE &&
+ m68k_feature(s->env, M68K_FEATURE_M68000)) {
+ tcg_gen_subi_i32(tmp, reg, 2);
+ } else {
+ tcg_gen_subi_i32(tmp, reg, opsize_bytes(opsize));
+ }
return tmp;
case 5: /* Indirect displacement. */
reg = get_areg(s, reg0);
@@ -801,7 +806,12 @@ static TCGv gen_ea_mode(CPUM68KState *env, DisasContext *s, int mode, int reg0,
result = gen_ldst(s, opsize, reg, val, what);
if (what == EA_STORE || !addrp) {
TCGv tmp = tcg_temp_new();
- tcg_gen_addi_i32(tmp, reg, opsize_bytes(opsize));
+ if (reg0 == 7 && opsize == OS_BYTE &&
+ m68k_feature(s->env, M68K_FEATURE_M68000)) {
+ tcg_gen_addi_i32(tmp, reg, 2);
+ } else {
+ tcg_gen_addi_i32(tmp, reg, opsize_bytes(opsize));
+ }
delay_set_areg(s, reg0, tmp, true);
}
return result;
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP Laurent Vivier
@ 2017-01-13 20:08 ` Richard Henderson
0 siblings, 0 replies; 7+ messages in thread
From: Richard Henderson @ 2017-01-13 20:08 UTC (permalink / raw)
To: Laurent Vivier, qemu-devel; +Cc: Thomas Huth
On 01/13/2017 10:36 AM, Laurent Vivier wrote:
> On 680x0 family only.
>
> Address Register indirect With postincrement:
>
> When using the stack pointer (A7) with byte size data, the register
> is incremented by two.
>
> Address Register indirect With predecrement:
>
> When using the stack pointer (A7) with byte size data, the register
> is decremented by two.
>
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> Reviewed-by: Thomas Huth <huth@tuxfamily.org>
> ---
> target/m68k/translate.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
Reviewed-by: Richard Henderson <rth@twiddle.net>
r~
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-01-13 20:08 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-13 18:36 [Qemu-devel] [PATCH v3 0/5] Fixes for target/m68k Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 1/5] target-m68k: fix bit operation with immediate value Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 2/5] target-m68k: fix gen_flush_flags() Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 3/5] target-m68k: manage pre-dec et post-inc in CAS Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 4/5] target-m68k: CAS doesn't need aligned access Laurent Vivier
2017-01-13 18:36 ` [Qemu-devel] [PATCH v3 5/5] target-m68k: increment/decrement with SP Laurent Vivier
2017-01-13 20:08 ` Richard Henderson
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).