blob: 651867030b6b39050e800767e33c886aec7033cb [file]
// 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;
}