xref: /XiangShan/src/main/scala/xiangshan/backend/decode/VecDecoder.scala (revision 7f2b7720ff1889edcfc44902e64e1a082b775d9b)
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