In commit e9d652824b0 we extracted the vfp_set_fpscr_to_host()
function but failed at calling it in the correct place, we call
it after xregs[ARM_VFP_FPSCR] is modified.
Fix by calling this function before we update FPSCR.
Reported-by: Laurent Desnogues <laurent.desnogues@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
target/arm/vfp_helper.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c
index 46041e3294..9710ef1c3e 100644
--- a/target/arm/vfp_helper.c
+++ b/target/arm/vfp_helper.c
@@ -197,6 +197,8 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val)
val &= 0xf7c0009f;
}
+ vfp_set_fpscr_to_host(env, val);
+
/*
* We don't implement trapped exception handling, so the
* trap enable bits, IDE|IXE|UFE|OFE|DZE|IOE are all RAZ/WI (not RES0!)
@@ -217,8 +219,6 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val)
env->vfp.qc[1] = 0;
env->vfp.qc[2] = 0;
env->vfp.qc[3] = 0;
-
- vfp_set_fpscr_to_host(env, val);
}
void vfp_set_fpscr(CPUARMState *env, uint32_t val)
--
2.20.1
On Fri, Jul 5, 2019 at 2:43 PM Philippe Mathieu-Daudé <philmd@redhat.com> wrote: > > In commit e9d652824b0 we extracted the vfp_set_fpscr_to_host() > function but failed at calling it in the correct place, we call > it after xregs[ARM_VFP_FPSCR] is modified. > > Fix by calling this function before we update FPSCR. > > Reported-by: Laurent Desnogues <laurent.desnogues@gmail.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Laurent Desnogues <laurent.desnogues@gmail.com> Tested-by: Laurent Desnogues <laurent.desnogues@gmail.com> Thanks, Laurent > --- > target/arm/vfp_helper.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c > index 46041e3294..9710ef1c3e 100644 > --- a/target/arm/vfp_helper.c > +++ b/target/arm/vfp_helper.c > @@ -197,6 +197,8 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) > val &= 0xf7c0009f; > } > > + vfp_set_fpscr_to_host(env, val); > + > /* > * We don't implement trapped exception handling, so the > * trap enable bits, IDE|IXE|UFE|OFE|DZE|IOE are all RAZ/WI (not RES0!) > @@ -217,8 +219,6 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) > env->vfp.qc[1] = 0; > env->vfp.qc[2] = 0; > env->vfp.qc[3] = 0; > - > - vfp_set_fpscr_to_host(env, val); > } > > void vfp_set_fpscr(CPUARMState *env, uint32_t val) > -- > 2.20.1 >
Correct subject: "Call set_fpscr_to_host before updating FPSCR reg" (or without "reg"). On 7/5/19 2:43 PM, Philippe Mathieu-Daudé wrote: > In commit e9d652824b0 we extracted the vfp_set_fpscr_to_host() > function but failed at calling it in the correct place, we call > it after xregs[ARM_VFP_FPSCR] is modified. > > Fix by calling this function before we update FPSCR. > > Reported-by: Laurent Desnogues <laurent.desnogues@gmail.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > target/arm/vfp_helper.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c > index 46041e3294..9710ef1c3e 100644 > --- a/target/arm/vfp_helper.c > +++ b/target/arm/vfp_helper.c > @@ -197,6 +197,8 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) > val &= 0xf7c0009f; > } > > + vfp_set_fpscr_to_host(env, val); > + > /* > * We don't implement trapped exception handling, so the > * trap enable bits, IDE|IXE|UFE|OFE|DZE|IOE are all RAZ/WI (not RES0!) > @@ -217,8 +219,6 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) > env->vfp.qc[1] = 0; > env->vfp.qc[2] = 0; > env->vfp.qc[3] = 0; > - > - vfp_set_fpscr_to_host(env, val); > } > > void vfp_set_fpscr(CPUARMState *env, uint32_t val) >
Philippe Mathieu-Daudé <philmd@redhat.com> writes: > Correct subject: "Call set_fpscr_to_host before updating FPSCR reg" > (or without "reg"). Queued to testing/next, thanks. > > On 7/5/19 2:43 PM, Philippe Mathieu-Daudé wrote: >> In commit e9d652824b0 we extracted the vfp_set_fpscr_to_host() >> function but failed at calling it in the correct place, we call >> it after xregs[ARM_VFP_FPSCR] is modified. >> >> Fix by calling this function before we update FPSCR. >> >> Reported-by: Laurent Desnogues <laurent.desnogues@gmail.com> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> --- >> target/arm/vfp_helper.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c >> index 46041e3294..9710ef1c3e 100644 >> --- a/target/arm/vfp_helper.c >> +++ b/target/arm/vfp_helper.c >> @@ -197,6 +197,8 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) >> val &= 0xf7c0009f; >> } >> >> + vfp_set_fpscr_to_host(env, val); >> + >> /* >> * We don't implement trapped exception handling, so the >> * trap enable bits, IDE|IXE|UFE|OFE|DZE|IOE are all RAZ/WI (not RES0!) >> @@ -217,8 +219,6 @@ void HELPER(vfp_set_fpscr)(CPUARMState *env, uint32_t val) >> env->vfp.qc[1] = 0; >> env->vfp.qc[2] = 0; >> env->vfp.qc[3] = 0; >> - >> - vfp_set_fpscr_to_host(env, val); >> } >> >> void vfp_set_fpscr(CPUARMState *env, uint32_t val) >> -- Alex Bennée
© 2016 - 2024 Red Hat, Inc.