| // Copyright 2023 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // First disasm field is 18 char wide and left justified. |
| disasm widths = {-18}; |
| |
| int global_latency = 0; |
| |
| isa RiscV32I { |
| namespace mpact::sim::riscv::rv32; |
| slots { riscv32i; } |
| } |
| |
| #include "mpact/sim/decoder/test/testfiles/base.isa" |
| |
| slot riscv32i : riscv32i_base { |
| includes { |
| #include "mpact/sim/decoder/test/testfiles/riscv32i.h" |
| } |
| default size = 4; |
| default latency = global_latency; |
| default opcode = |
| disasm: "Illegal instruction at 0x%(@:08x)", |
| semfunc: "&SomeFunction"; |
| resources TwoOp = { next_pc, rs1 : rd[..rd]}; |
| resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]}; |
| opcodes { |
| addi = override, |
| resources: TwoOp, |
| disasm: "addi", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| slti = override, |
| resources: TwoOp, |
| disasm: "slti", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| sltiu = override, |
| resources: TwoOp, |
| disasm: "sltiu", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| andi = override, |
| resources: TwoOp, |
| disasm: "andi", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| ori = override, |
| resources: TwoOp, |
| disasm: "ori", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| xori = override, |
| resources: TwoOp, |
| disasm: "xori", "%rd, %rs1, %I_imm12", |
| semfunc: "&SomeFunction"; |
| slli = override, |
| resources: TwoOp, |
| disasm: "slli", "%rd, %rs1, 0x%(I_uimm5:x)", |
| semfunc: "&SomeFunction"; |
| srli = override, |
| resources: TwoOp, |
| disasm: "srli", "%rd %rs1, 0x%(I_uimm5:x)", |
| semfunc: "&SomeFunction"; |
| srai = override, |
| resources: TwoOp, |
| disasm: "srai", "%rd, %rs1, 0x%(I_uimm5:x)", |
| semfunc: "&SomeFunction"; |
| lui = override, |
| disasm: "lui", "%rd, 0x%(U_imm20:08x)", |
| semfunc: "&SomeFunction"; |
| auipc = override, |
| disasm: "auipc", "%rd, 0x%(U_imm20:08x)", |
| semfunc: "&SomeFunction"; |
| add = override, |
| resources: ThreeOp, |
| disasm: "add", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| slt = override, |
| resources: ThreeOp, |
| disasm: "slt", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| sltu = override, |
| resources: ThreeOp, |
| disasm: "sltu", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| and = override, |
| resources: ThreeOp, |
| disasm: "and", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| or = override, |
| resources: ThreeOp, |
| disasm: "or", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| xor = override, |
| resources: ThreeOp, |
| disasm: "xor", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| sll = override, |
| resources: ThreeOp, |
| disasm: "sll", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| srl = override, |
| resources: ThreeOp, |
| disasm: "srl", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| sub = override, |
| resources: ThreeOp, |
| disasm: "sub", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| sra = override, |
| resources: ThreeOp, |
| disasm: "sra", "%rd, %rs1, %rs2", |
| semfunc: "&SomeFunction"; |
| nop = override, |
| disasm: "nop", |
| semfunc: "&SomeFunction"; |
| hint = override, |
| disasm: "hint", |
| semfunc: "&SomeFunction"; |
| jal = override, |
| disasm: "jal", "%rd, %(@+J_imm20:08x)", |
| semfunc: "&SomeFunction"; |
| jalr = override, |
| disasm: "jalr", "%rd, %rs1, %J_imm12", |
| semfunc: "&SomeFunction"; |
| j = override, |
| disasm: "j", "%(@+J_imm20:08x)", |
| semfunc: "&SomeFunction"; |
| jr = override, |
| disasm: "jr", "%rs1, %J_imm12", |
| semfunc: "&SomeFunction"; |
| beq = override, |
| disasm: "beq", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| bne = override, |
| disasm: "bne", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| blt = override, |
| disasm: "blt", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| bltu = override, |
| disasm: "bltu", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| bge = override, |
| disasm: "bge", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| bgeu = override, |
| disasm: "bgeu", "%rs1, %rs2, %(@+B_imm12:08x)", |
| semfunc: "&SomeFunction"; |
| lw = override, |
| disasm: "lw", "%rd, %I_imm12(%rs1)", |
| semfunc: "&SomeFunction", "&SomeOtherFunction"; |
| lh = override, |
| disasm: "lh", "%rd, %I_imm12(%rs1)", |
| semfunc: "&SomeFunction", "&SomeOtherFunction"; |
| lhu = override, |
| disasm: "lhu", "%rd, %I_imm12(%rs1)", |
| semfunc: "&SomeFunction", "&SomeOtherFunction"; |
| lb = override, |
| disasm: "lb", "%rd, %I_imm12(%rs1)", |
| semfunc: "&SomeFunction", "&SomeOtherFunction"; |
| lbu = override, |
| disasm: "lbu", "%rd, %I_imm12(%rs1)", |
| semfunc: "&SomeFunction", "&SomeOtherFunction"; |
| sw = override, |
| disasm: "sw", "%rs2, %S_imm12(%rs1)", |
| semfunc: "&SomeFunction"; |
| sh = override, |
| disasm: "sh", "%rs2, %S_imm12(%rs1)", |
| semfunc: "&SomeFunction"; |
| sb = override, |
| disasm: "sb", "%rs2, %S_imm12(%rs1)", |
| semfunc: "&SomeFunction"; |
| fence = override, |
| disasm: "fence", |
| semfunc: "&SomeFunction"; |
| ecall = override, |
| disasm: "ecall", |
| semfunc: "&SomeFunction"; |
| ebreak = override, |
| disasm: "ebreak", |
| semfunc: "&SomeFunction"; |
| } |
| } |