Add instruction type classification to decode, w/ T

This commit is contained in:
sBubshait 2024-05-30 15:21:24 +01:00
parent c07cbd12c9
commit 497cd7ce3b
2 changed files with 26 additions and 0 deletions

View File

@ -21,4 +21,23 @@ a64inst_instruction *decode(word wrd) {
fprintf(stderr, "Ran out of memory while attempting to decode an instruction!\n"); fprintf(stderr, "Ran out of memory while attempting to decode an instruction!\n");
exit(1); exit(1);
} }
word DPImmFlag = getBits(wrd, DATA_PROCESSING_DPIMM_LSB, DATA_PROCESSING_DPIMM_MSB);
if (wrd == HALT_WORD) {
inst->type = a64inst_Halt;
} else if (DPImmFlag == 0) {
inst->type = a64inst_DPImmediate;
}else if (DPImmFlag == 1) {
inst->type = a64inst_Branch;
} else if (getBits(wrd, DATA_PROCESSING_DPReg_LSB, DATA_PROCESSING_DPReg_MSB) == 1) {
inst->type = a64inst_DPRegister;
} else {
// Load and Store, or unknown
}
} }

View File

@ -2,5 +2,12 @@
#include "a64instruction.h" #include "a64instruction.h"
#define BYTE_BITS 8 #define BYTE_BITS 8
#define HALT_WORD 0x8a000000
#define DATA_PROCESSING_DPIMM_LSB 26
#define DATA_PROCESSING_DPIMM_MSB 29
#define DATA_PROCESSING_DPReg_LSB 25
#define DATA_PROCESSING_DPReg_MSB 26
a64inst_instruction *decode(word w); a64inst_instruction *decode(word w);