x86: change divide-by-zero fault to divide-error
authorNilay Vaish <nilay@cs.wisc.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
Same exception is raised whether division with zero is performed or the
quotient is greater than the maximum value that the provided space can hold.
Divide-by-Zero is the AMD terminology, while Divide-Error is Intel's.

src/arch/x86/faults.hh
src/arch/x86/isa/microops/regop.isa

index b9eb85e21be5b09906987bb25496baa3b2d9abdc..f8715ded20386adf2041941f20afb910aacb8608 100644 (file)
@@ -167,7 +167,7 @@ namespace X86ISA
 
     // Class  |  Type    | vector |               Cause                 | mnem
     //------------------------------------------------------------------------
-    //Contrib   Fault     0         Divide-by-Zero-Error                  #DE
+    //Contrib   Fault     0         Divide Error                          #DE
     //Benign    Either    1         Debug                                 #DB
     //Benign    Interrupt 2         Non-Maskable-Interrupt                #NMI
     //Benign    Trap      3         Breakpoint                            #BP
@@ -193,11 +193,12 @@ namespace X86ISA
     //Benign    Interrupt 0-255     External Interrupts                   #INTR
     //Benign    Interrupt 0-255     Software Interrupts                   INTn
 
-    class DivideByZero : public X86Fault
+    // Note that
+    class DivideError : public X86Fault
     {
       public:
-        DivideByZero() :
-            X86Fault("Divide-by-Zero-Error", "#DE", 0)
+        DivideError() :
+            X86Fault("Divide-Error", "#DE", 0)
         {}
     };
 
index 7d0374f02ad72c32bbdf5204b5cb89eedc5734f6..15515ed12e43ff62e1d354f8c269cf610c594208 100644 (file)
@@ -629,7 +629,7 @@ let {{
             uint64_t dividend = remainder;
             //Do the division.
             if (divisor == 0) {
-                fault = std::make_shared<DivideByZero>();
+                fault = std::make_shared<DivideError>();
             } else {
                 divide(dividend, divisor, quotient, remainder);
                 //Record the final results.
@@ -652,7 +652,7 @@ let {{
             //If we overshot, do nothing. This lets us unrool division loops a
             //little.
             if (divisor == 0) {
-                fault = std::make_shared<DivideByZero>();
+                fault = std::make_shared<DivideError>();
             } else if (remaining) {
                 if (divisor & (ULL(1) << 63)) {
                     while (remaining && !(dividend & (ULL(1) << 63))) {