// 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.

#include "riscv/riscv32g_encoding.h"

#include <cstdint>

#include "googlemock/include/gmock/gmock.h"
#include "mpact/sim/generic/type_helpers.h"
#include "mpact/sim/util/memory/flat_demand_memory.h"
#include "riscv/riscv32g_enums.h"
#include "riscv/riscv_state.h"

namespace {

using ::mpact::sim::generic::operator*;  // NOLINT: clang-tidy false positive.

using mpact::sim::riscv::RiscVState;
using mpact::sim::riscv::RiscVXlen;
using mpact::sim::riscv::isa32::ComplexResourceEnum;
using mpact::sim::riscv::isa32::DestOpEnum;
using mpact::sim::riscv::isa32::kComplexResourceNames;
using mpact::sim::riscv::isa32::kDestOpNames;
using mpact::sim::riscv::isa32::kSimpleResourceNames;
using mpact::sim::riscv::isa32::kSourceOpNames;
using mpact::sim::riscv::isa32::RiscV32GEncoding;
using mpact::sim::riscv::isa32::SimpleResourceEnum;
using mpact::sim::riscv::isa32::SourceOpEnum;
using mpact::sim::util::FlatDemandMemory;
using SlotEnum = mpact::sim::riscv::isa32::SlotEnum;
using OpcodeEnum = mpact::sim::riscv::isa32::OpcodeEnum;

// Constexpr for opcodes for RV32G instructions grouped by isa group.

// RV32I
constexpr uint32_t kLui = 0b0000000000000000000000000'0110111;
constexpr uint32_t kAuipc = 0b0000000000000000000000000'0010111;
constexpr uint32_t kJal = 0b00000000000000000000'00000'1101111;
constexpr uint32_t kJalr = 0b00000000000'00000'000'00000'1100111;
constexpr uint32_t kBeq = 0b0000000'00000'00000'000'00000'1100011;
constexpr uint32_t kBne = 0b0000000'00000'00000'001'00000'1100011;
constexpr uint32_t kBlt = 0b0000000'00000'00000'100'00000'1100011;
constexpr uint32_t kBge = 0b0000000'00000'00000'101'00000'1100011;
constexpr uint32_t kBltu = 0b0000000'00000'00000'110'00000'1100011;
constexpr uint32_t kBgeu = 0b0000000'00000'00000'111'00000'1100011;
constexpr uint32_t kLb = 0b000000000000'00000'000'00000'0000011;
constexpr uint32_t kLh = 0b000000000000'00000'001'00000'0000011;
constexpr uint32_t kLw = 0b000000000000'00000'010'00000'0000011;
constexpr uint32_t kLbu = 0b000000000000'00000'100'00000'0000011;
constexpr uint32_t kLhu = 0b000000000000'00000'101'00000'0000011;
constexpr uint32_t kSb = 0b0000000'00000'00000'000'00000'0100011;
constexpr uint32_t kSh = 0b0000000'00000'00000'001'00000'0100011;
constexpr uint32_t kSw = 0b0000000'00000'00000'010'00000'0100011;
constexpr uint32_t kAddi = 0b000000000000'00000'000'00000'0010011;
constexpr uint32_t kSlti = 0b000000000000'00000'010'00000'0010011;
constexpr uint32_t kSltiu = 0b000000000000'00000'011'00000'0010011;
constexpr uint32_t kXori = 0b000000000000'00000'100'00000'0010011;
constexpr uint32_t kOri = 0b000000000000'00000'110'00000'0010011;
constexpr uint32_t kAndi = 0b000000000000'00000'111'00000'0010011;
constexpr uint32_t kSlli = 0b0000000'00000'00000'001'00000'0010011;
constexpr uint32_t kSrli = 0b0000000'00000'00000'101'00000'0010011;
constexpr uint32_t kSrai = 0b0100000'00000'00000'101'00000'0010011;
constexpr uint32_t kAdd = 0b0000000'00000'00000'000'00000'0110011;
constexpr uint32_t kSub = 0b0100000'00000'00000'000'00000'0110011;
constexpr uint32_t kSll = 0b0000000'00000'00000'001'00000'0110011;
constexpr uint32_t kSlt = 0b0000000'00000'00000'010'00000'0110011;
constexpr uint32_t kSltu = 0b0000000'00000'00000'011'00000'0110011;
constexpr uint32_t kXor = 0b0000000'00000'00000'100'00000'0110011;
constexpr uint32_t kSrl = 0b0000000'00000'00000'101'00000'0110011;
constexpr uint32_t kSra = 0b0100000'00000'00000'101'00000'0110011;
constexpr uint32_t kOr = 0b0000000'00000'00000'110'00000'0110011;
constexpr uint32_t kAnd = 0b0000000'00000'00000'111'00000'0110011;
constexpr uint32_t kFence = 0b000000000000'00000'000'00000'0001111;
constexpr uint32_t kEcall = 0b000000000000'00000'000'00000'1110011;
constexpr uint32_t kEbreak = 0b000000000001'00000'000'00000'1110011;
// RV32 Zifencei
constexpr uint32_t kFencei = 0b000000000000'00000'001'00000'0001111;
// RV32 Zicsr
constexpr uint32_t kCsrw = 0b000000000000'00000'001'00000'1110011;
constexpr uint32_t kCsrs = 0b000000000000'00000'010'00000'1110011;
constexpr uint32_t kCsrc = 0b000000000000'00000'011'00000'1110011;
constexpr uint32_t kCsrwi = 0b000000000000'00000'101'00000'1110011;
constexpr uint32_t kCsrsi = 0b000000000000'00000'110'00000'1110011;
constexpr uint32_t kCsrci = 0b000000000000'00000'111'00000'1110011;
// RV32M
constexpr uint32_t kMul = 0b0000001'00000'00000'000'00000'0110011;
constexpr uint32_t kMulh = 0b0000001'00000'00000'001'00000'0110011;
constexpr uint32_t kMulhsu = 0b0000001'00000'00000'010'00000'0110011;
constexpr uint32_t kMulhu = 0b0000001'00000'00000'011'00000'0110011;
constexpr uint32_t kDiv = 0b0000001'00000'00000'100'00000'0110011;
constexpr uint32_t kDivu = 0b0000001'00000'00000'101'00000'0110011;
constexpr uint32_t kRem = 0b0000001'00000'00000'110'00000'0110011;
constexpr uint32_t kRemu = 0b0000001'00000'00000'111'00000'0110011;
// RV32A
constexpr uint32_t kLrw = 0b00010'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kScw = 0b00011'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmoswapw = 0b00001'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmoaddw = 0b00000'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmoxorw = 0b00100'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmoandw = 0b01100'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmoorw = 0b01000'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmominw = 0b10000'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmomaxw = 0b10100'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmominuw = 0b11000'0'0'00000'00000'010'00000'0101111;
constexpr uint32_t kAmomaxuw = 0b11100'0'0'00000'00000'010'00000'0101111;
// RV32F
constexpr uint32_t kFlw = 0b000000000000'00000'010'00000'0000111;
constexpr uint32_t kFsw = 0b0000000'00000'00000'010'00000'0100111;
constexpr uint32_t kFmadds = 0b00000'00'00000'00000'000'00000'1000011;
constexpr uint32_t kFmsubs = 0b00000'00'00000'00000'000'00000'1000111;
constexpr uint32_t kFnmsubs = 0b00000'00'00000'00000'000'00000'1001011;
constexpr uint32_t kFnmadds = 0b00000'00'00000'00000'000'00000'1001111;
constexpr uint32_t kFadds = 0b0000000'00000'00000'000'00000'1010011;
constexpr uint32_t kFsubs = 0b0000100'00000'00000'000'00000'1010011;
constexpr uint32_t kFmuls = 0b0001000'00000'00000'000'00000'1010011;
constexpr uint32_t kFdivs = 0b0001100'00000'00000'000'00000'1010011;
constexpr uint32_t kFsqrts = 0b0101100'00000'00000'000'00000'1010011;
constexpr uint32_t kFsgnjs = 0b0010000'00000'00000'000'00000'1010011;
constexpr uint32_t kFsgnjns = 0b0010000'00000'00000'001'00000'1010011;
constexpr uint32_t kFsgnjxs = 0b0010000'00000'00000'010'00000'1010011;
constexpr uint32_t kFmins = 0b0010100'00000'00000'000'00000'1010011;
constexpr uint32_t kFmaxs = 0b0010100'00000'00000'001'00000'1010011;
constexpr uint32_t kFcvtws = 0b1100000'00000'00000'000'00000'1010011;
constexpr uint32_t kFcvtwus = 0b1100000'00001'00000'000'00000'1010011;
constexpr uint32_t kFmvxw = 0b1110000'00000'00000'000'00000'1010011;
constexpr uint32_t kFeqs = 0b1010000'00000'00000'010'00000'1010011;
constexpr uint32_t kFlts = 0b1010000'00000'00000'001'00000'1010011;
constexpr uint32_t kFles = 0b1010000'00000'00000'000'00000'1010011;
constexpr uint32_t kFclasss = 0b1110000'00000'00000'001'00000'1010011;
constexpr uint32_t kFcvtsw = 0b1101000'00000'00000'000'00000'1010011;
constexpr uint32_t kFcvtswu = 0b1101000'00001'00000'000'00000'1010011;
constexpr uint32_t kFmvwx = 0b1111000'00000'00000'000'00000'1010011;
// RV32D
constexpr uint32_t kFld = 0b000000000000'00000'011'00000'0000111;
constexpr uint32_t kFsd = 0b0000000'00000'00000'011'00000'0100111;
constexpr uint32_t kFmaddd = 0b00000'01'00000'00000'000'00000'1000011;
constexpr uint32_t kFmsubd = 0b00000'01'00000'00000'000'00000'1000111;
constexpr uint32_t kFnmsubd = 0b00000'01'00000'00000'000'00000'1001011;
constexpr uint32_t kFnmaddd = 0b00000'01'00000'00000'000'00000'1001111;
constexpr uint32_t kFaddd = 0b0000001'00000'00000'000'00000'1010011;
constexpr uint32_t kFsubd = 0b0000101'00000'00000'000'00000'1010011;
constexpr uint32_t kFmuld = 0b0001001'00000'00000'000'00000'1010011;
constexpr uint32_t kFdivd = 0b0001101'00000'00000'000'00000'1010011;
constexpr uint32_t kFsqrtd = 0b0101101'00000'00000'000'00000'1010011;
constexpr uint32_t kFsgnjd = 0b0010001'00000'00000'000'00000'1010011;
constexpr uint32_t kFsgnjnd = 0b0010001'00000'00000'001'00000'1010011;
constexpr uint32_t kFsgnjxd = 0b0010001'00000'00000'010'00000'1010011;
constexpr uint32_t kFmind = 0b0010101'00000'00000'000'00000'1010011;
constexpr uint32_t kFmaxd = 0b0010101'00000'00000'001'00000'1010011;
constexpr uint32_t kFcvtsd = 0b0100000'00001'00000'000'00000'1010011;
constexpr uint32_t kFcvtds = 0b0100001'00000'00000'000'00000'1010011;
constexpr uint32_t kFeqd = 0b1010001'00000'00000'010'00000'1010011;
constexpr uint32_t kFltd = 0b1010001'00000'00000'001'00000'1010011;
constexpr uint32_t kFled = 0b1010001'00000'00000'000'00000'1010011;
constexpr uint32_t kFclassd = 0b1110001'00000'00000'001'00000'1010011;
constexpr uint32_t kFcvtwd = 0b1100001'00000'00000'000'00000'1010011;
constexpr uint32_t kFcvtwud = 0b1100001'00001'00000'000'00000'1010011;
constexpr uint32_t kFcvtdw = 0b1101001'00000'00000'000'00000'1010011;
constexpr uint32_t kFcvtdwu = 0b1101001'00001'00000'000'00000'1010011;
// RV32C
constexpr uint32_t kClwsp = 0b010'0'00000'00000'10;
constexpr uint32_t kCflwsp = 0b011'0'00000'00000'10;
constexpr uint32_t kCdldsp = 0b001'0'00000'00000'10;
constexpr uint32_t kCswsp = 0b110'000000'00000'10;
constexpr uint32_t kCfswsp = 0b111'000000'00000'10;
constexpr uint32_t kCdsdsp = 0b101'000000'00000'10;
constexpr uint32_t kClw = 0b010'000'000'00'000'00;
constexpr uint32_t kCflw = 0b011'000'000'00'000'00;
constexpr uint32_t kCdld = 0b001'000'000'00'000'00;
constexpr uint32_t kCsw = 0b110'000'000'00'000'00;
constexpr uint32_t kCfsw = 0b111'000'000'00'000'00;
constexpr uint32_t kCdsd = 0b101'000'000'00'000'00;
constexpr uint32_t kCj = 0b101'00000000000'01;
constexpr uint32_t kCjal = 0b001'00000000000'01;
constexpr uint32_t kCjr = 0b100'0'00000'00000'10;
constexpr uint32_t kCjalr = 0b100'1'00000'00000'10;
constexpr uint32_t kCbeqz = 0b110'000'000'00000'01;
constexpr uint32_t kCbnez = 0b111'000'000'00000'01;
constexpr uint32_t kCli = 0b010'0'00000'00000'01;
constexpr uint32_t kClui = 0b011'0'00000'00000'01;
constexpr uint32_t kCaddi = 0b000'0'00000'00000'01;
constexpr uint32_t kCaddi16sp = 0b011'0'00010'00000'01;
constexpr uint32_t kCaddi4spn = 0b000'00000000'000'00;
constexpr uint32_t kCslli = 0b000'0'00000'00000'10;
constexpr uint32_t kCsrli = 0b100'0'00'000'00000'01;
constexpr uint32_t kCsrai = 0b100'0'01'000'00000'01;
constexpr uint32_t kCandi = 0b100'0'10'000'00000'01;
constexpr uint32_t kCmv = 0b100'0'00000'00000'10;
constexpr uint32_t kCadd = 0b100'1'00000'00000'10;
constexpr uint32_t kCand = 0b100'0'11'000'11'000'01;
constexpr uint32_t kCor = 0b100'0'11'000'10'000'01;
constexpr uint32_t kCxor = 0b100'0'11'000'01'000'01;
constexpr uint32_t kCSub = 0b100'0'11'000'00'000'01;
constexpr uint32_t kCnop = 0b000'0'00000'00000'01;
constexpr uint32_t kCebreak = 0b100'1'00000'00000'10;
constexpr uint32_t kUret = 0b000'0000'00010'00000'000'00000'111'0011;
constexpr uint32_t kSret = 0b000'1000'00010'00000'000'00000'111'0011;
constexpr uint32_t kMret = 0b001'1000'00010'00000'000'00000'111'0011;
constexpr uint32_t kWfi = 0b000'1000'00101'00000'000'00000'111'0011;
constexpr uint32_t kSfenceVmaZz = 0b000'1001'00000'00000'000'00000'111'0011;
constexpr uint32_t kSfenceVmaZn = 0b000'1001'00001'00000'000'00000'111'0011;
constexpr uint32_t kSfenceVmaNz = 0b000'1001'00000'00001'000'00000'111'0011;
constexpr uint32_t kSfenceVmaNn = 0b000'1001'00001'00001'000'00000'111'0011;

class RiscV32GEncodingTest : public testing::Test {
 protected:
  RiscV32GEncodingTest() {
    state_ = new RiscVState("test", RiscVXlen::RV32, &memory_);
    enc_ = new RiscV32GEncoding(state_);
  }
  ~RiscV32GEncodingTest() override {
    delete enc_;
    delete state_;
  }

  FlatDemandMemory memory_;
  RiscVState *state_;
  RiscV32GEncoding *enc_;
};

constexpr int kRdValue = 1;
constexpr int kSuccValue = 0xf;
constexpr int kPredValue = 0xf;

static uint32_t SetRd(uint32_t iword, uint32_t rdval) {
  return (iword | ((rdval & 0x1f) << 7));
}

static uint32_t SetRs1(uint32_t iword, uint32_t rsval) {
  return (iword | ((rsval & 0x1f) << 15));
}

static uint32_t SetPred(uint32_t iword, uint32_t pred) {
  return (iword | ((pred & 0xf) << 24));
}

static uint32_t SetSucc(uint32_t iword, uint32_t succ) {
  return (iword | ((succ & 0xf) << 20));
}

static uint32_t Set16Rd(uint32_t iword, uint32_t val) {
  return (iword | ((val & 0x1f) << 7));
}

static uint32_t Set16Rs2(uint32_t iword, uint32_t val) {
  return (iword | ((val & 0x1f) << 2));
}

TEST_F(RiscV32GEncodingTest, SourceOperands) {
  auto &getters = enc_->source_op_getters();
  for (int i = *SourceOpEnum::kNone; i < *SourceOpEnum::kPastMaxValue; ++i) {
    EXPECT_TRUE(getters.contains(i)) << "No source operand for enum value " << i
                                     << " (" << kSourceOpNames[i] << ")";
  }
}

TEST_F(RiscV32GEncodingTest, DestOperands) {
  auto &getters = enc_->dest_op_getters();
  for (int i = *DestOpEnum::kNone; i < *DestOpEnum::kPastMaxValue; ++i) {
    EXPECT_TRUE(getters.contains(i)) << "No dest operand for enum value " << i
                                     << " (" << kDestOpNames[i] << ")";
  }
}

TEST_F(RiscV32GEncodingTest, SimpleResources) {
  auto &getters = enc_->simple_resource_getters();
  for (int i = *SimpleResourceEnum::kNone;
       i < *SimpleResourceEnum::kPastMaxValue; ++i) {
    EXPECT_TRUE(getters.contains(i)) << "No source operand for enum value " << i
                                     << " (" << kSimpleResourceNames[i] << ")";
  }
}

TEST_F(RiscV32GEncodingTest, ComplexResources) {
  auto &getters = enc_->source_op_getters();
  for (int i = *ComplexResourceEnum::kNone;
       i < *ComplexResourceEnum::kPastMaxValue; ++i) {
    EXPECT_TRUE(getters.contains(i)) << "No source operand for enum value " << i
                                     << " (" << kComplexResourceNames[i] << ")";
  }
}

TEST_F(RiscV32GEncodingTest, RV32IOpcodes) {
  enc_->ParseInstruction(SetRd(kLui, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLui);
  enc_->ParseInstruction(SetRd(kAuipc, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAuipc);
  enc_->ParseInstruction(SetRd(kJal, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kJal);
  enc_->ParseInstruction(SetRd(kJalr, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kJalr);
  enc_->ParseInstruction(kBeq);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBeq);
  enc_->ParseInstruction(kBne);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBne);
  enc_->ParseInstruction(kBlt);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBlt);
  enc_->ParseInstruction(kBge);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBge);
  enc_->ParseInstruction(kBltu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBltu);
  enc_->ParseInstruction(kBgeu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kBgeu);
  enc_->ParseInstruction(SetRd(kLb, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLb);
  enc_->ParseInstruction(SetRd(kLh, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLh);
  enc_->ParseInstruction(SetRd(kLw, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLw);
  enc_->ParseInstruction(SetRd(kLbu, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLbu);
  enc_->ParseInstruction(SetRd(kLhu, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLhu);
  enc_->ParseInstruction(SetRd(kSb, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSb);
  enc_->ParseInstruction(SetRd(kSh, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSh);
  enc_->ParseInstruction(SetRd(kSw, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSw);
  enc_->ParseInstruction(SetRd(kAddi, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAddi);
  enc_->ParseInstruction(SetRd(kSlti, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSlti);
  enc_->ParseInstruction(SetRd(kSltiu, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSltiu);
  enc_->ParseInstruction(SetRd(kXori, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kXori);
  enc_->ParseInstruction(SetRd(kOri, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kOri);
  enc_->ParseInstruction(SetRd(kAndi, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAndi);
  enc_->ParseInstruction(SetRd(kSlli, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSlli);
  enc_->ParseInstruction(SetRd(kSrli, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSrli);
  enc_->ParseInstruction(SetRd(kSrai, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSrai);
  enc_->ParseInstruction(SetRd(kAdd, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAdd);
  enc_->ParseInstruction(SetRd(kSub, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSub);
  enc_->ParseInstruction(SetRd(kSll, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSll);
  enc_->ParseInstruction(SetRd(kSlt, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSlt);
  enc_->ParseInstruction(SetRd(kSltu, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSltu);
  enc_->ParseInstruction(SetRd(kXor, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kXor);
  enc_->ParseInstruction(SetRd(kSrl, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSrl);
  enc_->ParseInstruction(SetRd(kSra, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSra);
  enc_->ParseInstruction(SetRd(kOr, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kOr);
  enc_->ParseInstruction(SetRd(kAnd, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAnd);
  enc_->ParseInstruction(SetSucc(SetPred(kFence, kPredValue), kSuccValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFence);
  enc_->ParseInstruction(kEcall);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kEcall);
  enc_->ParseInstruction(kEbreak);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kEbreak);
}

TEST_F(RiscV32GEncodingTest, ZifenceiOpcodes) {
  // RV32 Zifencei
  enc_->ParseInstruction(kFencei);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFencei);
}

TEST_F(RiscV32GEncodingTest, ZicsrOpcodes) {
  // RV32 Zicsr
  enc_->ParseInstruction(SetRd(kCsrw, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrw);
  enc_->ParseInstruction(SetRd(SetRs1(kCsrs, kRdValue), kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrs);
  enc_->ParseInstruction(SetRd(SetRs1(kCsrc, kRdValue), kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrc);
  enc_->ParseInstruction(SetRs1(kCsrw, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrwNr);
  enc_->ParseInstruction(kCsrs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrsNw);
  enc_->ParseInstruction(kCsrc);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrcNw);
  enc_->ParseInstruction(SetRd(kCsrwi, kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrwi);
  enc_->ParseInstruction(SetRd(SetRs1(kCsrsi, kRdValue), kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrsi);
  enc_->ParseInstruction(SetRd(SetRs1(kCsrci, kRdValue), kRdValue));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrci);
  enc_->ParseInstruction(kCsrwi);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrwiNr);
  enc_->ParseInstruction(kCsrsi);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrsiNw);
  enc_->ParseInstruction(kCsrci);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrrciNw);
  enc_->ParseInstruction(kCsrw | 0xc00'00000);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kUnimp);
}

TEST_F(RiscV32GEncodingTest, RV32MOpcodes) {
  // RV32M
  enc_->ParseInstruction(kMul);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kMul);
  enc_->ParseInstruction(kMulh);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kMulh);
  enc_->ParseInstruction(kMulhsu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kMulhsu);
  enc_->ParseInstruction(kMulhu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kMulhu);
  enc_->ParseInstruction(kDiv);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kDiv);
  enc_->ParseInstruction(kDivu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kDivu);
  enc_->ParseInstruction(kRem);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kRem);
  enc_->ParseInstruction(kRemu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kRemu);
}

TEST_F(RiscV32GEncodingTest, RV32AOpcodes) {
  // RV32A
  enc_->ParseInstruction(kLrw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kLrw);
  enc_->ParseInstruction(kScw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kScw);
  enc_->ParseInstruction(kAmoswapw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmoswapw);
  enc_->ParseInstruction(kAmoaddw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmoaddw);
  enc_->ParseInstruction(kAmoxorw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmoxorw);
  enc_->ParseInstruction(kAmoandw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmoandw);
  enc_->ParseInstruction(kAmoorw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmoorw);
  enc_->ParseInstruction(kAmominw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmominw);
  enc_->ParseInstruction(kAmomaxw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmomaxw);
  enc_->ParseInstruction(kAmominuw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmominuw);
  enc_->ParseInstruction(kAmomaxuw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kAmomaxuw);
}

TEST_F(RiscV32GEncodingTest, RV32FOpcodes) {
  // RV32F
  enc_->ParseInstruction(kFlw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFlw);
  enc_->ParseInstruction(kFsw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsw);
  enc_->ParseInstruction(kFmadds);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmaddS);
  enc_->ParseInstruction(kFmsubs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmsubS);
  enc_->ParseInstruction(kFnmsubs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFnmsubS);
  enc_->ParseInstruction(kFnmadds);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFnmaddS);
  enc_->ParseInstruction(kFadds);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFaddS);
  enc_->ParseInstruction(kFsubs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsubS);
  enc_->ParseInstruction(kFmuls);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmulS);
  enc_->ParseInstruction(kFdivs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFdivS);
  enc_->ParseInstruction(kFsqrts);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsqrtS);
  enc_->ParseInstruction(kFsgnjs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjS);
  enc_->ParseInstruction(kFsgnjns);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjnS);
  enc_->ParseInstruction(kFsgnjxs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjxS);
  enc_->ParseInstruction(kFmins);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFminS);
  enc_->ParseInstruction(kFmaxs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmaxS);
  enc_->ParseInstruction(kFcvtws);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtWs);
  enc_->ParseInstruction(kFcvtwus);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtWus);
  enc_->ParseInstruction(kFmvxw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmvXw);
  enc_->ParseInstruction(kFeqs);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpeqS);
  enc_->ParseInstruction(kFlts);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpltS);
  enc_->ParseInstruction(kFles);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpleS);
  enc_->ParseInstruction(kFclasss);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFclassS);
  enc_->ParseInstruction(kFcvtsw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtSw);
  enc_->ParseInstruction(kFcvtswu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtSwu);
  enc_->ParseInstruction(kFmvwx);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmvWx);
}

TEST_F(RiscV32GEncodingTest, RV32DOpcodes) {
  // RF32D
  enc_->ParseInstruction(kFld);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFld);
  enc_->ParseInstruction(kFsd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsd);
  enc_->ParseInstruction(kFmaddd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmaddD);
  enc_->ParseInstruction(kFmsubd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmsubD);
  enc_->ParseInstruction(kFnmsubd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFnmsubD);
  enc_->ParseInstruction(kFnmaddd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFnmaddD);
  enc_->ParseInstruction(kFaddd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFaddD);
  enc_->ParseInstruction(kFsubd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsubD);
  enc_->ParseInstruction(kFmuld);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmulD);
  enc_->ParseInstruction(kFdivd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFdivD);
  enc_->ParseInstruction(kFsqrtd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsqrtD);
  enc_->ParseInstruction(kFsgnjd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjD);
  enc_->ParseInstruction(kFsgnjnd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjnD);
  enc_->ParseInstruction(kFsgnjxd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFsgnjxD);
  enc_->ParseInstruction(kFmind);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFminD);
  enc_->ParseInstruction(kFmaxd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFmaxD);
  enc_->ParseInstruction(kFcvtsd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtSd);
  enc_->ParseInstruction(kFcvtds);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtDs);
  enc_->ParseInstruction(kFeqd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpeqD);
  enc_->ParseInstruction(kFltd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpltD);
  enc_->ParseInstruction(kFled);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcmpleD);
  enc_->ParseInstruction(kFclassd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFclassD);
  enc_->ParseInstruction(kFcvtwd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtWd);
  enc_->ParseInstruction(kFcvtwud);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtWud);
  enc_->ParseInstruction(kFcvtdw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtDw);
  enc_->ParseInstruction(kFcvtdwu);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kFcvtDwu);
}

// Test for decoding compact opcodes.
TEST_F(RiscV32GEncodingTest, RV32COpcodes) {
  enc_->ParseInstruction(Set16Rd(kClwsp, 1));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kClwsp);
  enc_->ParseInstruction(kCflwsp);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCflwsp);
  enc_->ParseInstruction(kCdldsp);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfldsp);
  enc_->ParseInstruction(kCswsp);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCswsp);
  enc_->ParseInstruction(kCfswsp);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfswsp);
  enc_->ParseInstruction(kCdsdsp);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfsdsp);
  enc_->ParseInstruction(kClw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kClw);
  enc_->ParseInstruction(kCflw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCflw);
  enc_->ParseInstruction(kCdld);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfld);
  enc_->ParseInstruction(kCsw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsw);
  enc_->ParseInstruction(kCfsw);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfsw);
  enc_->ParseInstruction(kCdsd);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCfsd);
  enc_->ParseInstruction(kCj);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCj);
  enc_->ParseInstruction(kCjal);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCjal);
  enc_->ParseInstruction(Set16Rd(kCjr, 1));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCjr);
  enc_->ParseInstruction(Set16Rd(kCjalr, 1));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCjalr);
  enc_->ParseInstruction(kCbeqz);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCbeqz);
  enc_->ParseInstruction(kCbnez);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCbnez);
  enc_->ParseInstruction(Set16Rd(kCli, 1));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCli);
  enc_->ParseInstruction(Set16Rs2(Set16Rd(kClui, 1), 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kClui);
  enc_->ParseInstruction(Set16Rs2(Set16Rd(kCaddi, 1), 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCaddi);
  enc_->ParseInstruction(Set16Rs2(kCaddi16sp, 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCaddi16sp);
  enc_->ParseInstruction(kCaddi4spn | 0b000'01010101'000'00);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCaddi4spn);
  enc_->ParseInstruction(Set16Rs2(Set16Rd(kCslli, 1), 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCslli);
  enc_->ParseInstruction(Set16Rs2(kCsrli, 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrli);
  enc_->ParseInstruction(Set16Rs2(kCsrai, 5));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsrai);
  enc_->ParseInstruction(kCandi);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCandi);
  enc_->ParseInstruction(Set16Rs2(Set16Rd(kCmv, 1), 2));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCmv);
  enc_->ParseInstruction(Set16Rs2(Set16Rd(kCadd, 1), 2));
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCadd);
  enc_->ParseInstruction(kCand);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCand);
  enc_->ParseInstruction(kCor);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCor);
  enc_->ParseInstruction(kCxor);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCxor);
  enc_->ParseInstruction(kCSub);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCsub);
  enc_->ParseInstruction(kCnop);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCnop);
  enc_->ParseInstruction(kCebreak);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCebreak);
  enc_->ParseInstruction(0x0000);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kCunimp);
}

TEST_F(RiscV32GEncodingTest, RV32PrivilegedOpcodes) {
  enc_->ParseInstruction(kUret);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kUret);
  enc_->ParseInstruction(kSret);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSret);
  enc_->ParseInstruction(kMret);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kMret);
  enc_->ParseInstruction(kWfi);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kWfi);
  enc_->ParseInstruction(kSfenceVmaZz);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSfenceVmaZz);
  enc_->ParseInstruction(kSfenceVmaZn);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSfenceVmaZn);
  enc_->ParseInstruction(kSfenceVmaNz);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSfenceVmaNz);
  enc_->ParseInstruction(kSfenceVmaNn);
  EXPECT_EQ(enc_->GetOpcode(SlotEnum::kRiscv32g, 0), OpcodeEnum::kSfenceVmaNn);
}

}  // namespace
