From 07ea411d3e6d6fb1f42a1493b02e8ac48a79c13e Mon Sep 17 00:00:00 2001
From: Bob Supnik <bob@supnik.org>
Date: Thu, 16 Jun 2022 16:13:46 -0700
Subject: [PATCH] PDP8: Zeroed result exponent in double precision (COVERITY)

---
 PDP8/pdp8_cpu.c | 1 +
 PDP8/pdp8_fpp.c | 9 +++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/PDP8/pdp8_cpu.c b/PDP8/pdp8_cpu.c
index c91c6c98..1fce64d9 100644
--- a/PDP8/pdp8_cpu.c
+++ b/PDP8/pdp8_cpu.c
@@ -25,6 +25,7 @@
 
    cpu          central processor
 
+   21-Oct-21    RMS     Fixed bug in reporting device conflicts (Hans-Bernd Eggenstein)
    07-Sep-17    RMS     Fixed sim_eval declaration in history routine (COVERITY)
    09-Mar-17    RMS     Fixed PCQ_ENTRY for interrupts (COVERITY)
    13-Feb-17    RMS     RESET clear L'AC, per schematics
diff --git a/PDP8/pdp8_fpp.c b/PDP8/pdp8_fpp.c
index a96c89b1..8113c848 100644
--- a/PDP8/pdp8_fpp.c
+++ b/PDP8/pdp8_fpp.c
@@ -1,6 +1,6 @@
 /* pdp8_fpp.c: PDP-8 floating point processor (FPP8A)
 
-   Copyright (c) 2007-2021, Robert M Supnik
+   Copyright (c) 2007-2022, Robert M Supnik
 
    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
@@ -25,6 +25,7 @@
 
    fpp          FPP8A floating point processor
 
+   11-Mar-22    RMS     Zeroed result exponent in double precision (COVERITY)
    05-Jan-22    RHM     Fix fencepost error in FP multiply for extended
                         precision
    21-Oct-21    RMS     Added device number display
@@ -842,6 +843,7 @@ if (fpp_sta & FPS_DP) {                                 /* dp? */
     uint32 cout = fpp_fr_add (z.fr, x.fr, y.fr, EXTEND);/* z = a + b */
     uint32 zsign = z.fr[0] & FPN_FRSIGN;
     cout = (cout? 04000: 0);                            /* make sign bit */
+    z.exp = 0;                                          /* not used in DP */
     /* overflow is indicated when signs are equal and overflow does not
        match the result sign bit */
     fpp_copy (a, &z);                                   /* result is z */
@@ -897,8 +899,10 @@ if ((fpp_fr_test(y.fr, 0, EXACT-1) == 0) && (y.fr[EXACT-1] < 2)) {
     y.exp = 0;
     y.fr[EXACT-1] = 0;
 }
-if (fpp_sta & FPS_DP)                                   /* dp? */
+if (fpp_sta & FPS_DP) {                                 /* dp? */
     fpp_fr_mul (z.fr, x.fr, y.fr, TRUE);                /* mult frac */
+    z.exp = 0;                                          /* not used in DP */
+    }
 else {                                                  /* fp or ep */
     fpp_norm (&x, EXACT);
     fpp_norm (&y, EXACT);
@@ -934,6 +938,7 @@ if (fpp_sta & FPS_DP) {                                 /* dp? */
         fpp_dump_apt (fpp_apta, FPS_IOVX);              /* error */
         return;
         }
+    z.exp = 0;                                          /* not used in DP */
     fpp_copy (a, &z);                                   /* result is z */
     }
 else {                                                  /* fp or ep */