diff mbox

[Risu,2/2] risu_ppc64: Compare FPSCR flags

Message ID 1485744457-10324-3-git-send-email-joserz@linux.vnet.ibm.com
State New
Headers show

Commit Message

Jose Ricardo Ziviani Jan. 30, 2017, 2:47 a.m. UTC
When running FP operations, FPSCR flag must be compared to make sure
that any exception will behave consistently.

Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com>
---
 risu_reginfo_ppc64le.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Peter Maydell Feb. 3, 2017, 11:47 a.m. UTC | #1
On 30 January 2017 at 02:47, Jose Ricardo Ziviani
<joserz@linux.vnet.ibm.com> wrote:
> When running FP operations, FPSCR flag must be compared to make sure
> that any exception will behave consistently.
>
> Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com>
> ---
>  risu_reginfo_ppc64le.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/risu_reginfo_ppc64le.c b/risu_reginfo_ppc64le.c
> index 4dc509c..ee0e55e 100644
> --- a/risu_reginfo_ppc64le.c
> +++ b/risu_reginfo_ppc64le.c
> @@ -21,6 +21,7 @@
>
>  #define XER 37
>  #define CCR 38
> +#define FPREG 32
>
>  /* reginfo_init: initialize with a ucontext */
>  void reginfo_init(struct reginfo *ri, ucontext_t *uc)
> @@ -82,6 +83,10 @@ int reginfo_is_eq(struct reginfo *m, struct reginfo *a, ucontext_t *uc)
>          }
>      }
>
> +    if (m->fpregs[FPREG] != a->fpregs[FPREG]) {
> +        return 0;
> +    }
> +
>      for (i = 0; i < 32; i++) {
>          if (m->vrregs.vrregs[i][0] != a->vrregs.vrregs[i][0] ||
>                  m->vrregs.vrregs[i][1] != a->vrregs.vrregs[i][1] ||
> --

Do we also need to add something to reginfo_dump_mismatch()
to print the mismatching FPSCR values ?

thanks
-- PMM
diff mbox

Patch

diff --git a/risu_reginfo_ppc64le.c b/risu_reginfo_ppc64le.c
index 4dc509c..ee0e55e 100644
--- a/risu_reginfo_ppc64le.c
+++ b/risu_reginfo_ppc64le.c
@@ -21,6 +21,7 @@ 
 
 #define XER 37
 #define CCR 38
+#define FPREG 32
 
 /* reginfo_init: initialize with a ucontext */
 void reginfo_init(struct reginfo *ri, ucontext_t *uc)
@@ -82,6 +83,10 @@  int reginfo_is_eq(struct reginfo *m, struct reginfo *a, ucontext_t *uc)
         }
     }
 
+    if (m->fpregs[FPREG] != a->fpregs[FPREG]) {
+        return 0;
+    }
+
     for (i = 0; i < 32; i++) {
         if (m->vrregs.vrregs[i][0] != a->vrregs.vrregs[i][0] ||
                 m->vrregs.vrregs[i][1] != a->vrregs.vrregs[i][1] ||