1*7f2b7720SXuan Hupackage xiangshan.backend.decode 2*7f2b7720SXuan Hu 3*7f2b7720SXuan Huimport chipsalliance.rocketchip.config.Parameters 4*7f2b7720SXuan Huimport chisel3._ 5*7f2b7720SXuan Huimport chisel3.util._ 6*7f2b7720SXuan Huimport freechips.rocketchip.util.uintToBitPat 7*7f2b7720SXuan Huimport utils._ 8*7f2b7720SXuan Huimport xiangshan.ExceptionNO.illegalInstr 9*7f2b7720SXuan Huimport xiangshan._ 10*7f2b7720SXuan Huimport freechips.rocketchip.rocket.Instructions._ 11*7f2b7720SXuan Hu 12*7f2b7720SXuan Huabstract class VecType { 13*7f2b7720SXuan Hu def X = BitPat("b?") 14*7f2b7720SXuan Hu def N = BitPat("b0") 15*7f2b7720SXuan Hu def Y = BitPat("b1") 16*7f2b7720SXuan Hu def generate() : List[BitPat] 17*7f2b7720SXuan Hu def asOldDecodeOutput(): List[BitPat] = { 18*7f2b7720SXuan Hu val src1::src2::src3::fu::fuOp::xWen::fWen::vWen::mWen::xsTrap::noSpec::blockBack::flushPipe::selImm::Nil = generate() 19*7f2b7720SXuan Hu List (src1, src2, src3, fu, fuOp, xWen, fWen, xsTrap, noSpec, blockBack, flushPipe, selImm) 20*7f2b7720SXuan Hu } 21*7f2b7720SXuan Hu} 22*7f2b7720SXuan Hu 23*7f2b7720SXuan Hucase class OPIVV(fu: BitPat, fuOp: BitPat, vWen: Boolean, mWen: Boolean) extends VecType { 24*7f2b7720SXuan Hu def generate() : List[BitPat] = { 25*7f2b7720SXuan Hu List (SrcType.vp, SrcType.vp, SrcType.X, fu, fuOp, N, N, vWen.B, mWen.B, N, N, N, N, SelImm.X) 26*7f2b7720SXuan Hu } 27*7f2b7720SXuan Hu} 28*7f2b7720SXuan Hu 29*7f2b7720SXuan Hucase class OPIVX() extends VecType { 30*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 31*7f2b7720SXuan Hu} 32*7f2b7720SXuan Hu 33*7f2b7720SXuan Hucase class OPIVI() extends VecType { 34*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 35*7f2b7720SXuan Hu} 36*7f2b7720SXuan Hu 37*7f2b7720SXuan Hucase class OPMVV(fu: BitPat, fuOp: BitPat, xWen: Boolean, vWen: Boolean, mWen: Boolean, others: Any) extends VecType { 38*7f2b7720SXuan Hu def generate() : List[BitPat] = { 39*7f2b7720SXuan Hu List (SrcType.vp, SrcType.vp, SrcType.X, fu, fuOp, xWen.B, N, vWen.B, mWen.B, N, N, N, N, SelImm.X) 40*7f2b7720SXuan Hu } 41*7f2b7720SXuan Hu} 42*7f2b7720SXuan Hu 43*7f2b7720SXuan Hucase class OPMVX() extends VecType { 44*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 45*7f2b7720SXuan Hu} 46*7f2b7720SXuan Hu 47*7f2b7720SXuan Hucase class OPFVV() extends VecType { 48*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 49*7f2b7720SXuan Hu} 50*7f2b7720SXuan Hu 51*7f2b7720SXuan Hucase class OPFVF(fu: BitPat, fuOp: BitPat, fWen: Boolean, vWen: Boolean, mWen: Boolean) extends VecType { 52*7f2b7720SXuan Hu def generate() : List[BitPat] = { 53*7f2b7720SXuan Hu List (SrcType.vp, SrcType.fp, SrcType.X, fu, fuOp, N, fWen.B, vWen.B, mWen.B, N, N, N, N, SelImm.X) 54*7f2b7720SXuan Hu } 55*7f2b7720SXuan Hu} 56*7f2b7720SXuan Hu 57*7f2b7720SXuan Hucase class VSET() extends VecType { 58*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 59*7f2b7720SXuan Hu} 60*7f2b7720SXuan Hu 61*7f2b7720SXuan Hucase class VLS() extends VecType { 62*7f2b7720SXuan Hu def generate() : List[BitPat] = { null } 63*7f2b7720SXuan Hu} 64*7f2b7720SXuan Hu 65*7f2b7720SXuan Huobject VecDecoder extends DecodeConstants { 66*7f2b7720SXuan Hu private def F = false 67*7f2b7720SXuan Hu private def T = true 68*7f2b7720SXuan Hu 69*7f2b7720SXuan Hu val opivvTable: Array[(BitPat, List[BitPat])] = Array( 70*7f2b7720SXuan Hu VADD_VV -> OPIVV(FuType.vipu, VipuType.dummy, T, F).generate(), 71*7f2b7720SXuan Hu 72*7f2b7720SXuan Hu VMSEQ_VV -> OPIVV(FuType.vipu, VipuType.dummy, F, T).generate(), 73*7f2b7720SXuan Hu ) 74*7f2b7720SXuan Hu 75*7f2b7720SXuan Hu val opivxTable: Array[(BitPat, List[BitPat])] = Array() 76*7f2b7720SXuan Hu val opiviTable: Array[(BitPat, List[BitPat])] = Array() 77*7f2b7720SXuan Hu 78*7f2b7720SXuan Hu val opmvvTable: Array[(BitPat, List[BitPat])] = Array() 79*7f2b7720SXuan Hu val opmvxTable: Array[(BitPat, List[BitPat])] = Array() 80*7f2b7720SXuan Hu 81*7f2b7720SXuan Hu val opfvvTable: Array[(BitPat, List[BitPat])] = Array() 82*7f2b7720SXuan Hu 83*7f2b7720SXuan Hu val opfvfTable: Array[(BitPat, List[BitPat])] = Array( 84*7f2b7720SXuan Hu VFADD_VF -> OPFVF(FuType.vfpu, VfpuType.dummy, F, T, F).generate(), 85*7f2b7720SXuan Hu VMFEQ_VF -> OPFVF(FuType.vfpu, VfpuType.dummy, F, F, T).generate(), 86*7f2b7720SXuan Hu ) 87*7f2b7720SXuan Hu 88*7f2b7720SXuan Hu val vsetTable: Array[(BitPat, List[BitPat])] = Array() 89*7f2b7720SXuan Hu val vlsTable: Array[(BitPat, List[BitPat])] = Array() 90*7f2b7720SXuan Hu 91*7f2b7720SXuan Hu val table = opivvTable ++ opivxTable ++ opiviTable ++ 92*7f2b7720SXuan Hu opmvvTable ++ opmvxTable ++ 93*7f2b7720SXuan Hu opfvvTable ++ opfvfTable ++ 94*7f2b7720SXuan Hu vsetTable ++ vlsTable 95*7f2b7720SXuan Hu} 96