#pragma once #include #include #include "Opcode.hpp" namespace Targets::RiscV::Opcodes { struct Sw { GprNumber baseAddressRegister; GprNumber valueRegister; std::uint16_t addressOffset; [[nodiscard]] constexpr Opcode opcode() const { assert(this->addressOffset <= 0xFFF); return Opcode{0x2023} | static_cast(this->addressOffset & 0x1F) << 7 | static_cast(this->baseAddressRegister) << 15 | static_cast(this->valueRegister) << 20 | static_cast((this->addressOffset >> 5) & 0x7F) << 25 ; } }; }