1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-27 01:31:42 +00:00

Fully decode TRAPcc.

This commit is contained in:
Thomas Harte 2022-10-25 12:19:03 -04:00
parent f8cb3ca8b5
commit 1ceabb30b0

View File

@ -513,6 +513,12 @@ template <typename Predecoder<model>::OpT op> uint32_t Predecoder<model>::invali
switch(op) {
default: break;
case OpT(Operation::TRAPcc):
return ~TwoOperandMask<
Ext | NoOperand,
Ext | NoOperand
>::value;
case OpT(Operation::Bccl): case OpT(Operation::BSRl):
return ~OneOperandMask<
Imm
@ -1064,6 +1070,29 @@ template <typename Predecoder<model>::OpT op, bool validate> Preinstruction Pred
return validated<op, validate>(addressing_mode, ea_register);
}
//
// MARK: TRAPcc
//
// Has 0, 1 or 2 following words, neither of which contributes to operation.
//
case OpT(Operation::TRAPcc): {
switch(instruction & 7) {
default: return Preinstruction();
// No extension.
case 4: return validated<op, validate>();
// Word-sized extension.
case 2: return validated<op, validate>(AddressingMode::ExtensionWord);
// DWord-sized extension (which is encoded as two extension operands).
case 3:
return validated<op, validate>(
AddressingMode::ExtensionWord, 0,
AddressingMode::ExtensionWord, 0);
}
}
//
// MARK: PACK
//
@ -1076,6 +1105,7 @@ template <typename Predecoder<model>::OpT op, bool validate> Preinstruction Pred
// TODO; need to square the wheel on a prima-facie three operands.
return Preinstruction();
//
// MARK: DIVl
//