xref: /XiangShan/src/main/scala/xiangshan/backend/decode/isa/predecode/predecode.scala (revision b8b991d636e3eae0d6cc2e36846166652699f0c2)
1c6d43980SLemover/***************************************************************************************
2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory
4c6d43980SLemover*
5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
8c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
9c6d43980SLemover*
10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13c6d43980SLemover*
14c6d43980SLemover* See the Mulan PSL v2 for more details.
15c6d43980SLemover***************************************************************************************/
16c6d43980SLemover
1766314a38Szhangfwpackage xiangshan.backend.decode.isa.predecode
1866314a38Szhangfw
1966314a38Szhangfwimport chisel3.util._
2066314a38Szhangfwimport xiangshan.frontend.BrType
2166314a38Szhangfw
2268eeafa8Szhangfwobject PreDecodeInst {
23d077b118Szhanglinjuan  // def C_JAL     = BitPat("b????????????????_?01_?_??_???_??_???_01") // RV32C
24d077b118Szhanglinjuan  def C_J       = BitPat("b????????????????_101_?_??_???_??_???_01")
25*b8b991d6SGuokai Chen  def C_EBREAK  = BitPat("b????????????????_100_?_00_000_00_000_10")
26f498737cSzhangfw  def C_JALR    = BitPat("b????????????????_100_?_??_???_00_000_10")  // c.jalr & c.jr
27f498737cSzhangfw  def C_BRANCH  = BitPat("b????????????????_11?_?_??_???_??_???_01")
28f498737cSzhangfw  def JAL       = BitPat("b????????????????_???_?????_1101111")
29f498737cSzhangfw  def JALR      = BitPat("b????????????????_000_?????_1100111")
30f498737cSzhangfw  def BRANCH    = BitPat("b????????????????_???_?????_1100011")
3135ee668dSJinYue  def NOP       = BitPat("b???????????????0_100_01010_0000001")   //li	a0,0
3266314a38Szhangfw
3366314a38Szhangfw
3466314a38Szhangfw  val brTable = Array(
35d077b118Szhanglinjuan    // C_JAL     -> List(BrType.jal),
36*b8b991d6SGuokai Chen    C_EBREAK  -> List(BrType.notCFI), // c.ebreak should not be decoded as jalr, higher priority than c.jalr
37d077b118Szhanglinjuan    C_J       -> List(BrType.jal),
3866314a38Szhangfw    C_JALR    -> List(BrType.jalr),
3966314a38Szhangfw    C_BRANCH  -> List(BrType.branch),
4066314a38Szhangfw    JAL       -> List(BrType.jal),
4166314a38Szhangfw    JALR      -> List(BrType.jalr),
4266314a38Szhangfw    BRANCH    -> List(BrType.branch)
4366314a38Szhangfw  )
4466314a38Szhangfw}
45