From 05b409f48d36dff18bb354b3f3b4974c505d3850 Mon Sep 17 00:00:00 2001 From: Yunsup Lee Date: Thu, 9 Sep 2010 23:21:11 -0700 Subject: [PATCH] [opcodes,sim,xcc] move opcodes for 3 source instructions --- riscv/execute.h | 123 ++++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 56 deletions(-) diff --git a/riscv/execute.h b/riscv/execute.h index 15f90ef..b4ae6b9 100644 --- a/riscv/execute.h +++ b/riscv/execute.h @@ -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" -- 2.30.2