| // 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. |
| |
| // This file defines a protobuf for representing a subset of RiscV32G |
| // instructions. |
| |
| syntax = "proto2"; |
| |
| package mpact_sim.decoder.test; |
| |
| option java_multiple_files = true; |
| |
| enum RiscVOpcode { |
| OPCODE_NOP = 0; |
| OPCODE_LOAD_UPPER_IMM = 1; |
| OPCODE_ADD_UPPER_IMM_PC = 2; |
| OPCODE_JUMP_AND_LINK = 3; |
| OPCODE_JUMP = 4; |
| OPCODE_JUMP_AND_LINK_REG = 5; |
| OPCODE_JUMP_REG = 6; |
| OPCODE_BEQ = 7; |
| OPCODE_BNE = 8; |
| OPCODE_BLT = 9; |
| OPCODE_BLTU = 10; |
| OPCODE_BGE = 11; |
| OPCODE_BGEU = 12; |
| OPCODE_LOAD_BYTE = 13; |
| OPCODE_LOAD_HALF = 14; |
| OPCODE_LOAD_WORD = 15; |
| OPCODE_LOAD_BYTE_UNSIGNED = 16; |
| OPCODE_LOAD_HALF_UNSIGNED = 17; |
| OPCODE_STORE_BYTE = 18; |
| OPCODE_STORE_HALF = 19; |
| OPCODE_STORE_WORD = 20; |
| OPCODE_ADD_IMM = 21; |
| OPCODE_SET_LT_IMM = 22; |
| OPCODE_SET_LTU_IMM = 23; |
| OPCODE_XOR_IMM = 24; |
| OPCODE_OR_IMM = 25; |
| OPCODE_AND_IMM = 26; |
| OPCODE_SHIFT_LEFT_LOGICAL_IMM = 27; |
| OPCODE_SHIFT_RIGHT_LOGICAL_IMM = 28; |
| OPCODE_SHIFT_RIGHT_ARITH_IMM = 29; |
| OPCODE_ADD = 30; |
| OPCODE_SUB = 31; |
| OPCODE_SHIFT_LEFT_LOGICAL = 32; |
| OPCODE_SET_LT = 33; |
| OPCODE_SET_LTU = 34; |
| OPCODE_XOR = 35; |
| OPCODE_SHIFT_RIGHT_LOGICAL = 36; |
| OPCODE_SHIFT_RIGHT_ARITH = 37; |
| OPCODE_OR = 38; |
| OPCODE_AND = 39; |
| OPCODE_FENCE = 40; |
| OPCODE_ECALL = 41; |
| OPCODE_EBREAK = 42; |
| OPCODE_FENCEI = 43; |
| OPCODE_MUL = 44; |
| OPCODE_MULH = 45; |
| OPCODE_MULHSU = 46; |
| OPCODE_MULHU = 47; |
| OPCODE_DIV = 48; |
| OPCODE_DIVU = 49; |
| OPCODE_REM = 50; |
| OPCODE_REMU = 51; |
| OPCODE_CSRRW = 52; |
| OPCODE_CSRRS = 53; |
| OPCODE_CSRRC = 54; |
| OPCODE_CSRRS_NR = 55; |
| OPCODE_CSRRC_NR = 56; |
| OPCODE_CSRRW_NR = 57; |
| OPCODE_CSRRS_NW = 58; |
| OPCODE_CSRRC_NW = 59; |
| OPCODE_CSRRW_IMM = 60; |
| OPCODE_CSRRS_IMM = 61; |
| OPCODE_CSRRC_IMM = 62; |
| OPCODE_CSRRS_IMM_NR = 63; |
| OPCODE_CSRRC_IMM_NR = 64; |
| OPCODE_CSRRW_IMM_NR = 65; |
| OPCODE_CSRRS_IMM_NW = 66; |
| OPCODE_CSRRC_IMM_NW = 67; |
| OPCODE_URET = 68; |
| OPCODE_SRET = 69; |
| OPCODE_WFI = 70; |
| OPCODE_SFENCE_VMA_ZZ = 71; |
| OPCODE_SFENCE_VMA_ZN = 72; |
| OPCODE_SFENCE_VMA_NZ = 73; |
| OPCODE_SFENCE_VMA_NN = 74; |
| } |
| |
| message UType { |
| optional int64 immediate = 1; |
| optional int32 rd = 2; |
| } |
| |
| message JType { |
| optional int64 immediate = 1; |
| } |
| |
| message JRegType { |
| optional int64 immediate = 1; |
| optional int32 rs1 = 2; |
| } |
| |
| message IType { |
| optional int64 immediate = 1; |
| optional int32 rs1 = 2; |
| optional int32 rd = 3; |
| } |
| |
| message BType { |
| optional int64 immediate = 1; |
| optional int32 rs1 = 2; |
| optional int32 rs2 = 3; |
| } |
| |
| message R3Type { |
| optional int32 rs1 = 1; |
| optional int32 rs2 = 2; |
| optional int32 rd = 3; |
| } |
| |
| message RiscVInstruction { |
| optional RiscVOpcode opcode = 1; |
| oneof format { |
| UType utype = 2; |
| JType jtype = 3; |
| JRegType jregtype = 4; |
| IType itype = 5; |
| BType btype = 6; |
| R3Type rtype = 7; |
| } |
| optional int32 size = 8; |
| } |