[opcodes,sim,xcc] move opcodes for 3 source instructions
authorYunsup Lee <yunsup@cs.berkeley.edu>
Fri, 10 Sep 2010 06:21:11 +0000 (23:21 -0700)
committerYunsup Lee <yunsup@cs.berkeley.edu>
Fri, 10 Sep 2010 06:21:51 +0000 (23:21 -0700)
riscv/execute.h

index 15f90efcd67800172974b9c9d62e1c7c11fe845d..b4ae6b9397d4a717eeb6a3d0572e75bf241eaaab 100644 (file)
@@ -277,62 +277,6 @@ switch((insn.bits >> 0x19) & 0x7f)
         }
         #include "insns/unimp.h"
       }
-      case 0x4:
-      {
-        if((insn.bits & 0xfe007c00) == 0xd0004000)
-        {
-          #include "insns/madd_s.h"
-          break;
-        }
-        if((insn.bits & 0xfe007c00) == 0xd0004c00)
-        {
-          #include "insns/madd_d.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
-      case 0x5:
-      {
-        if((insn.bits & 0xfe007c00) == 0xd0005000)
-        {
-          #include "insns/msub_s.h"
-          break;
-        }
-        if((insn.bits & 0xfe007c00) == 0xd0005c00)
-        {
-          #include "insns/msub_d.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
-      case 0x6:
-      {
-        if((insn.bits & 0xfe007c00) == 0xd0006000)
-        {
-          #include "insns/nmadd_s.h"
-          break;
-        }
-        if((insn.bits & 0xfe007c00) == 0xd0006c00)
-        {
-          #include "insns/nmadd_d.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
-      case 0x7:
-      {
-        if((insn.bits & 0xfe007c00) == 0xd0007c00)
-        {
-          #include "insns/nmsub_d.h"
-          break;
-        }
-        if((insn.bits & 0xfe007c00) == 0xd0007000)
-        {
-          #include "insns/nmsub_s.h"
-          break;
-        }
-        #include "insns/unimp.h"
-      }
       default:
       {
         #include "insns/unimp.h"
@@ -418,6 +362,73 @@ switch((insn.bits >> 0x19) & 0x7f)
     }
     break;
   }
+  case 0x6b:
+  {
+    switch((insn.bits >> 0xc) & 0x7)
+    {
+      case 0x0:
+      {
+        if((insn.bits & 0xfe007c00) == 0xd6000000)
+        {
+          #include "insns/madd_s.h"
+          break;
+        }
+        if((insn.bits & 0xfe007c00) == 0xd6000c00)
+        {
+          #include "insns/madd_d.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      case 0x1:
+      {
+        if((insn.bits & 0xfe007c00) == 0xd6001000)
+        {
+          #include "insns/msub_s.h"
+          break;
+        }
+        if((insn.bits & 0xfe007c00) == 0xd6001c00)
+        {
+          #include "insns/msub_d.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      case 0x2:
+      {
+        if((insn.bits & 0xfe007c00) == 0xd6002000)
+        {
+          #include "insns/nmadd_s.h"
+          break;
+        }
+        if((insn.bits & 0xfe007c00) == 0xd6002c00)
+        {
+          #include "insns/nmadd_d.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      case 0x3:
+      {
+        if((insn.bits & 0xfe007c00) == 0xd6003c00)
+        {
+          #include "insns/nmsub_d.h"
+          break;
+        }
+        if((insn.bits & 0xfe007c00) == 0xd6003000)
+        {
+          #include "insns/nmsub_s.h"
+          break;
+        }
+        #include "insns/unimp.h"
+      }
+      default:
+      {
+        #include "insns/unimp.h"
+      }
+    }
+    break;
+  }
   case 0x71:
   {
     #include "insns/lui.h"