[opcodes] minor opcode changes
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Sat, 26 Mar 2011 02:02:37 +0000 (19:02 -0700)
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Sat, 26 Mar 2011 02:02:37 +0000 (19:02 -0700)
riscv/execute.h

index e64ebe12c169f91ae43cbe0271c7bf514e48a05c..7067530176afba4e5993ad8d23297459e3315203 100644 (file)
@@ -243,6 +243,105 @@ switch((insn.bits >> 0x0) & 0x7f)
     }
     break;
   }
+  case 0x2b:
+  {
+    switch((insn.bits >> 0x7) & 0x7)
+    {
+      case 0x2:
+      {
+        if((insn.bits & 0x1ffff) == 0x192b)
+        {
+          #include "insns/amominu_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x92b)
+        {
+          #include "insns/amoand_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x1d2b)
+        {
+          #include "insns/amomaxu_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x152b)
+        {
+          #include "insns/amomax_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x12b)
+        {
+          #include "insns/amoadd_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0xd2b)
+        {
+          #include "insns/amoor_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x112b)
+        {
+          #include "insns/amomin_w.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x52b)
+        {
+          #include "insns/amoswap_w.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      case 0x3:
+      {
+        if((insn.bits & 0x1ffff) == 0x19ab)
+        {
+          #include "insns/amominu_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x9ab)
+        {
+          #include "insns/amoand_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x1dab)
+        {
+          #include "insns/amomaxu_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x1ab)
+        {
+          #include "insns/amoadd_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x15ab)
+        {
+          #include "insns/amomax_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0xdab)
+        {
+          #include "insns/amoor_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x5ab)
+        {
+          #include "insns/amoswap_d.h"
+          break;
+        }
+        if((insn.bits & 0x1ffff) == 0x11ab)
+        {
+          #include "insns/amomin_d.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      default:
+      {
+        #include "insns/unimp.h"
+      }
+    }
+    break;
+  }
   case 0x2f:
   {
     switch((insn.bits >> 0x7) & 0x7)
@@ -501,94 +600,6 @@ switch((insn.bits >> 0x0) & 0x7f)
         #include "insns/fmadd_d.h"
         break;
       }
-      case 0x2:
-      {
-        if((insn.bits & 0x1ffff) == 0x1943)
-        {
-          #include "insns/amominu_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x943)
-        {
-          #include "insns/amoand_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x1d43)
-        {
-          #include "insns/amomaxu_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x1543)
-        {
-          #include "insns/amomax_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x143)
-        {
-          #include "insns/amoadd_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0xd43)
-        {
-          #include "insns/amoor_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x1143)
-        {
-          #include "insns/amomin_w.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x543)
-        {
-          #include "insns/amoswap_w.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
-      case 0x3:
-      {
-        if((insn.bits & 0x1ffff) == 0x19c3)
-        {
-          #include "insns/amominu_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x9c3)
-        {
-          #include "insns/amoand_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x1dc3)
-        {
-          #include "insns/amomaxu_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x1c3)
-        {
-          #include "insns/amoadd_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x15c3)
-        {
-          #include "insns/amomax_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0xdc3)
-        {
-          #include "insns/amoor_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x5c3)
-        {
-          #include "insns/amoswap_d.h"
-          break;
-        }
-        if((insn.bits & 0x1ffff) == 0x11c3)
-        {
-          #include "insns/amomin_d.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
       default:
       {
         #include "insns/unimp.h"
@@ -814,7 +825,7 @@ switch((insn.bits >> 0x0) & 0x7f)
           #include "insns/fcvt_d_w.h"
           break;
         }
-        if((insn.bits & 0x3ff1ff) == 0x100d3)
+        if((insn.bits & 0x3fffff) == 0x100d3)
         {
           #include "insns/fcvt_d_s.h"
           break;