blob: b93fc56d71ffa58f6610db46098a80b2840a1366 [file]
// Copyright 2025 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 contains the subset of the ISA description for the RiscV64G architecture for
// the purpose of generating a simple "subset" assembler for testing
// First disasm field is 18 char wide and left justified.
disasm widths = {-18};
int global_latency = 1;
isa RiscV64X {
namespace mpact::sim::riscv::isa64;
slots { riscv64x; }
}
// Minimal set of instructions for hello world.
slot riscv64x {
includes {
#include "mpact/sim/util/asm/test/riscv64x_instructions.h"
}
default size = 4;
default latency = global_latency;
default opcode =
disasm: "Illegal instruction at %(@:08x)",
semfunc: "&RiscVIllegalInstruction";
opcodes {
addi{: rs1, %reloc(I_imm12) : rd},
disasm: "addi", "%rd, %rs1, %I_imm12";
lui{: %reloc(U_imm20) : rd},
disasm: "lui", "%rd, %(U_imm20:08x)";
sd{: rs1, %reloc(S_imm12), rs2 : },
disasm: "sd", "%rs2, %S_imm12(%rs1)";
jal{: %reloc(J_imm20) : next_pc, rd},
disasm: "jal", "%rd, %(@+J_imm20:08x)";
j{: %reloc(J_imm20) : next_pc, rd},
disasm: "j", "%(@+J_imm20:08x)";
slli{: rs1, I_uimm6 : rd},
disasm: "slli", "%rd, %rs1, %(I_uimm6:x)";
ebreak{},
disasm: "ebreak";
srai{: rs1, I_uimm6 : rd},
disasm: "srai", "%rd, %rs1, %(I_uimm6:x)";
jr{: rs1, %reloc(J_imm12) : next_pc, rd},
disasm: "jr", "%rs1, %(J_imm12:08x)";
}
}