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