blob: 002e0851e7e33dbb79969d57aebcb1f9304ba5cb [file] [edit]
/*
* 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
*
* http://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.
*/
#ifndef MPACT_SIM_CODELABS_SEMANTIC_FUNCTIONS_RV32I_INSTRUCTIONS_H_
#define MPACT_SIM_CODELABS_SEMANTIC_FUNCTIONS_RV32I_INSTRUCTIONS_H_
#include "mpact/sim/generic/instruction.h"
// This file contains the declarations of the instruction semantic functions
// for the RiscV 32i instructions.
namespace mpact {
namespace sim {
namespace codelab {
using ::mpact::sim::generic::Instruction;
//
// All semantic functions must have the signature void(Instruction *).
//
// For the following, source operand 0 refers to the register specified in rs1,
// and source operand 1 refers to either the register specified in rs2, or the
// immediate. Destination operand 0 refers to the register specified in rd.
// Semantic functions for Exercise 2.
// End semantic functions for Exercise 2.
// For the following, source operand 0 refers to the 20-bit immediate value,
// already shifted left by 12 to form a 32-bit immediate.
// Semantic functions for Exercise 3.
// End semantic functions for Exercise 3.
// For the following branch instructions. Source operand 0 refers to the
// register specified by rs1, source operand 2 refers to the register specified
// by rs2, and source operand 3 refers to the immediate offset. Destination
// operand 0 refers to the pc destination operand.
// Semantic functions for Exercise 4 - branches.
// End semantic functions for Exercise 4 - branches.
// Source operand 0 contains the immediate value. Destination operand 0 refers
// to the pc destination operand, wheras destination operand 1 refers to the
// link register specified in rd.
// Semantic function for Exercise 4 - jal.
// End semantic function for Exercise 4 - jal.
// Source operand 0 refers to the base registers specified by rs1, source
// operand 1 contains the immediate value. Destination operand 0 refers to the
// pc destination operand, wheras destination operand 1 refers to the
// link register specified in rd.
// Semantic function for Exercise 4 - jalr.
// End semantic functions for Exercise 4 - jalr.
// For each store instruction semantic function, source operand 0 is the base
// register, source operand 1 is the offset, while source operand 2 is the value
// to be stored referred to by rs2.
// Semantic functions for Exercise 5.
// End semantic functions for Exercise 5.
// Each of the load instructions are modeled by a pair of semantic instruction
// functions. The "main" function computes the effective address and initiates
// the load, the "child" function processes the load result and writes it back
// to the destination register.
// For the "main" semantic function, source operand 0 is the base register,
// source operand 1 the offset. Destination operand 0 is the register specified
// by rd. The "child" semantic function will get a copy of the destination
// operand.
// Semantic functions for Exercise 6.
// End semantic functions for Exercise 6.
// Exercises End.
// The Fence instruction takes a single source operand (index 0) which consists
// of an immediate value containing the right justified concatenation of the FM,
// predecessor, and successor bit fields of the instruction.
void RV32IFence(Instruction *instruction);
// Software breakpoint instruction.
void RV32IEbreak(Instruction *instruction);
void RV32IllegalInstruction(Instruction *inst);
} // namespace codelab
} // namespace sim
} // namespace mpact
#endif // MPACT_SIM_CODELABS_SEMANTIC_FUNCTIONS_RV32I_INSTRUCTIONS_H_