// // Decoder.hpp // Clock Signal // // Created by Thomas Harte on 30/12/20. // Copyright © 2020 Thomas Harte. All rights reserved. // #ifndef InstructionSets_PowerPC_Decoder_hpp #define InstructionSets_PowerPC_Decoder_hpp #include "Instruction.hpp" namespace InstructionSet::PowerPC { enum class Model { /// i.e. 32-bit, with POWER carry-over instructions. MPC601, /// i.e. 32-bit, no POWER instructions. MPC603, /// i.e. 64-bit. MPC620, }; constexpr bool is64bit(Model model) { return model == Model::MPC620; } constexpr bool is32bit(Model model) { return !is64bit(model); } constexpr bool is601(Model model) { return model == Model::MPC601; } /*! Implements PowerPC instruction decoding. @c model Indicates the instruction set to decode. @c validate_reserved_bits If set to @c true, check that all reserved bits are 0 or 1 as required and produce an invalid opcode if not. Otherwise does no inspection of reserved bits. TODO: determine what specific models of PowerPC do re: reserved bits. */ template struct Decoder { Instruction decode(uint32_t opcode); }; } #endif /* InstructionSets_PowerPC_Decoder_hpp */