* [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
@ 2013-11-25 14:22 Sebastian Huber
2013-11-26 11:24 ` Fabien Chouteau
2013-11-26 21:02 ` Peter Maydell
0 siblings, 2 replies; 8+ messages in thread
From: Sebastian Huber @ 2013-11-25 14:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Ronald Hecht, Blue Swirl, Fabien Chouteau, Sebastian Huber
The env->pc is not necessarily up-to-date in the helper function. Use
the program counter of the disassembly context instead.
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
target-sparc/helper.c | 6 +++---
target-sparc/helper.h | 2 +-
target-sparc/translate.c | 3 ++-
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/target-sparc/helper.c b/target-sparc/helper.c
index e70d1bc..50912ff 100644
--- a/target-sparc/helper.c
+++ b/target-sparc/helper.c
@@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
}
#ifndef TARGET_SPARC64
-void helper_power_down(CPUSPARCState *env)
+void helper_power_down(CPUSPARCState *env, uint32_t pc)
{
CPUState *cs = CPU(sparc_env_get_cpu(env));
cs->halted = 1;
env->exception_index = EXCP_HLT;
- env->pc = env->npc;
- env->npc = env->pc + 4;
+ env->pc = pc + 4;
+ env->npc = pc + 8;
cpu_loop_exit(env);
}
#endif
diff --git a/target-sparc/helper.h b/target-sparc/helper.h
index fc49cd8..c4752c7 100644
--- a/target-sparc/helper.h
+++ b/target-sparc/helper.h
@@ -6,7 +6,7 @@ DEF_HELPER_2(trace_insn, void, env, i32)
DEF_HELPER_1(rett, void, env)
DEF_HELPER_2(wrpsr, void, env, tl)
DEF_HELPER_1(rdpsr, tl, env)
-DEF_HELPER_1(power_down, void, env)
+DEF_HELPER_2(power_down, void, env, i32)
#else
DEF_HELPER_2(wrpil, void, env, tl)
DEF_HELPER_2(wrpstate, void, env, tl)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 0588d23..d9ee90c 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -3631,7 +3631,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
if ((rd == 0x13) && (dc->def->features &
CPU_FEATURE_POWERDOWN)) {
/* LEON3 power-down */
- gen_helper_power_down(cpu_env);
+ tcg_gen_movi_i32(cpu_tmp0, dc->pc);
+ gen_helper_power_down(cpu_env, cpu_tmp0);
}
break;
#else
--
1.7.7
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
@ 2013-11-26 11:24 ` Fabien Chouteau
2013-11-26 21:02 ` Peter Maydell
1 sibling, 0 replies; 8+ messages in thread
From: Fabien Chouteau @ 2013-11-26 11:24 UTC (permalink / raw)
To: Sebastian Huber, qemu-devel; +Cc: Ronald Hecht, Blue Swirl
On 11/25/2013 03:22 PM, Sebastian Huber wrote:
> The env->pc is not necessarily up-to-date in the helper function. Use
> the program counter of the disassembly context instead.
>
Looks good. Thanks Sebastian.
Reviewed-by: Fabien Chouteau <chouteau@adacore.com>
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
> target-sparc/helper.c | 6 +++---
> target-sparc/helper.h | 2 +-
> target-sparc/translate.c | 3 ++-
> 3 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/target-sparc/helper.c b/target-sparc/helper.c
> index e70d1bc..50912ff 100644
> --- a/target-sparc/helper.c
> +++ b/target-sparc/helper.c
> @@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
> }
>
> #ifndef TARGET_SPARC64
> -void helper_power_down(CPUSPARCState *env)
> +void helper_power_down(CPUSPARCState *env, uint32_t pc)
> {
> CPUState *cs = CPU(sparc_env_get_cpu(env));
>
> cs->halted = 1;
> env->exception_index = EXCP_HLT;
> - env->pc = env->npc;
> - env->npc = env->pc + 4;
> + env->pc = pc + 4;
> + env->npc = pc + 8;
> cpu_loop_exit(env);
> }
> #endif
> diff --git a/target-sparc/helper.h b/target-sparc/helper.h
> index fc49cd8..c4752c7 100644
> --- a/target-sparc/helper.h
> +++ b/target-sparc/helper.h
> @@ -6,7 +6,7 @@ DEF_HELPER_2(trace_insn, void, env, i32)
> DEF_HELPER_1(rett, void, env)
> DEF_HELPER_2(wrpsr, void, env, tl)
> DEF_HELPER_1(rdpsr, tl, env)
> -DEF_HELPER_1(power_down, void, env)
> +DEF_HELPER_2(power_down, void, env, i32)
> #else
> DEF_HELPER_2(wrpil, void, env, tl)
> DEF_HELPER_2(wrpstate, void, env, tl)
> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> index 0588d23..d9ee90c 100644
> --- a/target-sparc/translate.c
> +++ b/target-sparc/translate.c
> @@ -3631,7 +3631,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
> if ((rd == 0x13) && (dc->def->features &
> CPU_FEATURE_POWERDOWN)) {
> /* LEON3 power-down */
> - gen_helper_power_down(cpu_env);
> + tcg_gen_movi_i32(cpu_tmp0, dc->pc);
> + gen_helper_power_down(cpu_env, cpu_tmp0);
> }
> break;
> #else
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction
2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
2013-11-26 11:24 ` Fabien Chouteau
@ 2013-11-26 21:02 ` Peter Maydell
2013-11-27 7:50 ` [Qemu-devel] [PATCH v2] " Sebastian Huber
1 sibling, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2013-11-26 21:02 UTC (permalink / raw)
To: Sebastian Huber
Cc: Ronald Hecht, Blue Swirl, QEMU Developers, Fabien Chouteau
On 25 November 2013 14:22, Sebastian Huber
<sebastian.huber@embedded-brains.de> wrote:
> The env->pc is not necessarily up-to-date in the helper function. Use
> the program counter of the disassembly context instead.
>
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
> target-sparc/helper.c | 6 +++---
> target-sparc/helper.h | 2 +-
> target-sparc/translate.c | 3 ++-
> 3 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/target-sparc/helper.c b/target-sparc/helper.c
> index e70d1bc..50912ff 100644
> --- a/target-sparc/helper.c
> +++ b/target-sparc/helper.c
> @@ -314,14 +314,14 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
> }
>
> #ifndef TARGET_SPARC64
> -void helper_power_down(CPUSPARCState *env)
> +void helper_power_down(CPUSPARCState *env, uint32_t pc)
> {
> CPUState *cs = CPU(sparc_env_get_cpu(env));
>
> cs->halted = 1;
> env->exception_index = EXCP_HLT;
> - env->pc = env->npc;
> - env->npc = env->pc + 4;
> + env->pc = pc + 4;
> + env->npc = pc + 8;
> cpu_loop_exit(env);
This seems a bit of an odd way to do this. I think most of
the frontends have the generated code do a sync-up of the
PC before calling the helper.
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
2013-11-26 21:02 ` Peter Maydell
@ 2013-11-27 7:50 ` Sebastian Huber
2013-12-06 17:48 ` Richard Henderson
0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2013-11-27 7:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Meydell, Fabien Chouteau, Sebastian Huber
Synchronize the program counter before the power down helper call
otherwise interrupts will return to the wrong context.
Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
---
target-sparc/translate.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 05639ef..7481c85 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
if ((rd == 0x13) && (dc->def->features &
CPU_FEATURE_POWERDOWN)) {
/* LEON3 power-down */
+ save_state(dc);
gen_helper_power_down(cpu_env);
}
break;
--
1.7.7
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
2013-11-27 7:50 ` [Qemu-devel] [PATCH v2] " Sebastian Huber
@ 2013-12-06 17:48 ` Richard Henderson
2014-01-07 18:07 ` Sebastian Huber
0 siblings, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2013-12-06 17:48 UTC (permalink / raw)
To: Sebastian Huber, qemu-devel; +Cc: Peter Meydell, Fabien Chouteau
On 11/27/2013 08:50 PM, Sebastian Huber wrote:
> Synchronize the program counter before the power down helper call
> otherwise interrupts will return to the wrong context.
>
> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> ---
> target-sparc/translate.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> index 05639ef..7481c85 100644
> --- a/target-sparc/translate.c
> +++ b/target-sparc/translate.c
> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
> if ((rd == 0x13) && (dc->def->features &
> CPU_FEATURE_POWERDOWN)) {
> /* LEON3 power-down */
> + save_state(dc);
> gen_helper_power_down(cpu_env);
> }
> break;
>
Reviewed-by: Richard Henderson <rth@twiddle.net>
r~
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
2013-12-06 17:48 ` Richard Henderson
@ 2014-01-07 18:07 ` Sebastian Huber
2014-01-14 7:04 ` Sebastian Huber
0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2014-01-07 18:07 UTC (permalink / raw)
To: qemu-devel; +Cc: blauwirbel, Fabien Chouteau, Richard Henderson
Hello,
would somebody mind committing this.
On 12/06/2013 06:48 PM, Richard Henderson wrote:
> On 11/27/2013 08:50 PM, Sebastian Huber wrote:
>> Synchronize the program counter before the power down helper call
>> otherwise interrupts will return to the wrong context.
>>
>> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
>> ---
>> target-sparc/translate.c | 1 +
>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
>> index 05639ef..7481c85 100644
>> --- a/target-sparc/translate.c
>> +++ b/target-sparc/translate.c
>> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
>> if ((rd == 0x13) && (dc->def->features &
>> CPU_FEATURE_POWERDOWN)) {
>> /* LEON3 power-down */
>> + save_state(dc);
>> gen_helper_power_down(cpu_env);
>> }
>> break;
>>
> Reviewed-by: Richard Henderson <rth@twiddle.net>
>
>
> r~
>
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
2014-01-07 18:07 ` Sebastian Huber
@ 2014-01-14 7:04 ` Sebastian Huber
2014-01-15 5:47 ` Edgar E. Iglesias
0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Huber @ 2014-01-14 7:04 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial
Hello,
maybe this patch can be qualified as trivial?
http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg03488.html
On 2014-01-07 19:07, Sebastian Huber wrote:
> Hello,
>
> would somebody mind committing this.
>
> On 12/06/2013 06:48 PM, Richard Henderson wrote:
>> On 11/27/2013 08:50 PM, Sebastian Huber wrote:
>>> Synchronize the program counter before the power down helper call
>>> otherwise interrupts will return to the wrong context.
>>>
>>> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
>>> ---
>>> target-sparc/translate.c | 1 +
>>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
>>> index 05639ef..7481c85 100644
>>> --- a/target-sparc/translate.c
>>> +++ b/target-sparc/translate.c
>>> @@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc,
>>> unsigned int insn)
>>> if ((rd == 0x13) && (dc->def->features &
>>>
>>> CPU_FEATURE_POWERDOWN)) {
>>> /* LEON3 power-down */
>>> + save_state(dc);
>>> gen_helper_power_down(cpu_env);
>>> }
>>> break;
>>>
>> Reviewed-by: Richard Henderson <rth@twiddle.net>
>>
>>
>> r~
>>
>
>
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v2] SPARC: Fix LEON3 power down instruction
2014-01-14 7:04 ` Sebastian Huber
@ 2014-01-15 5:47 ` Edgar E. Iglesias
0 siblings, 0 replies; 8+ messages in thread
From: Edgar E. Iglesias @ 2014-01-15 5:47 UTC (permalink / raw)
To: Sebastian Huber; +Cc: qemu-trivial, qemu-devel
On Tue, Jan 14, 2014 at 08:04:40AM +0100, Sebastian Huber wrote:
> Hello,
>
> maybe this patch can be qualified as trivial?
Hi,
I've applied it, thanks.
Cheers,
Edgar
>
> http://lists.nongnu.org/archive/html/qemu-devel/2013-11/msg03488.html
>
> On 2014-01-07 19:07, Sebastian Huber wrote:
> >Hello,
> >
> >would somebody mind committing this.
> >
> >On 12/06/2013 06:48 PM, Richard Henderson wrote:
> >>On 11/27/2013 08:50 PM, Sebastian Huber wrote:
> >>>Synchronize the program counter before the power down helper call
> >>>otherwise interrupts will return to the wrong context.
> >>>
> >>>Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
> >>>---
> >>> target-sparc/translate.c | 1 +
> >>> 1 files changed, 1 insertions(+), 0 deletions(-)
> >>>
> >>>diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> >>>index 05639ef..7481c85 100644
> >>>--- a/target-sparc/translate.c
> >>>+++ b/target-sparc/translate.c
> >>>@@ -3630,6 +3630,7 @@ static void disas_sparc_insn(DisasContext * dc,
> >>>unsigned int insn)
> >>> if ((rd == 0x13) && (dc->def->features &
> >>>
> >>>CPU_FEATURE_POWERDOWN)) {
> >>> /* LEON3 power-down */
> >>>+ save_state(dc);
> >>> gen_helper_power_down(cpu_env);
> >>> }
> >>> break;
> >>>
> >>Reviewed-by: Richard Henderson <rth@twiddle.net>
> >>
> >>
> >>r~
> >>
> >
> >
>
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone : +49 89 189 47 41-16
> Fax : +49 89 189 47 41-09
> E-Mail : sebastian.huber@embedded-brains.de
> PGP : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-01-15 5:48 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-25 14:22 [Qemu-devel] [PATCH] SPARC: Fix LEON3 power down instruction Sebastian Huber
2013-11-26 11:24 ` Fabien Chouteau
2013-11-26 21:02 ` Peter Maydell
2013-11-27 7:50 ` [Qemu-devel] [PATCH v2] " Sebastian Huber
2013-12-06 17:48 ` Richard Henderson
2014-01-07 18:07 ` Sebastian Huber
2014-01-14 7:04 ` Sebastian Huber
2014-01-15 5:47 ` Edgar E. Iglesias
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).