1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-01-18 23:29:49 +00:00

52 lines
1.1 KiB
C++
Raw Normal View History

2021-01-15 18:16:01 -05:00
//
// Decoder.hpp
// Clock Signal
//
// Created by Thomas Harte on 30/12/20.
2021-01-15 18:16:01 -05:00
// Copyright © 2020 Thomas Harte. All rights reserved.
//
#pragma once
2021-01-15 18:16:01 -05:00
#include "Instruction.hpp"
2023-05-10 16:02:18 -05:00
namespace InstructionSet::PowerPC {
2021-01-15 18:16:01 -05:00
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,
};
2024-12-01 17:51:20 -05:00
constexpr bool is64bit(const Model model) {
return model == Model::MPC620;
}
2024-12-01 17:51:20 -05:00
constexpr bool is32bit(const Model model) {
return !is64bit(model);
}
2024-12-01 17:51:20 -05:00
constexpr bool is601(const Model model) {
return model == Model::MPC601;
}
2021-01-15 18:16:01 -05:00
/*!
Implements PowerPC instruction decoding.
@c model Indicates the instruction set to decode.
2021-01-15 18:16:01 -05:00
@c validate_reserved_bits If set to @c true, check that all
2022-04-10 09:37:18 -04:00
reserved bits are 0 or 1 as required and produce an invalid opcode if not.
Otherwise does no inspection of reserved bits.
2021-01-15 18:16:01 -05:00
TODO: determine what specific models of PowerPC do re: reserved bits.
*/
template <Model model, bool validate_reserved_bits = false> struct Decoder {
2024-12-01 17:51:20 -05:00
Instruction decode(uint32_t);
2021-01-15 18:16:01 -05:00
};
}