rewrite address format calculation

as { is not in the actual asm syntax
This commit is contained in:
EDiasAlberto 2024-06-06 14:46:16 +01:00
parent 70e02768b6
commit f1ac860d6a

View File

@ -16,21 +16,18 @@
//calculate offsets from string //calculate offsets from string
void calcluateAddressFormat(a64inst_instruction *instr, char *operandList[]){ void calcluateAddressFormat(a64inst_instruction *instr, char *operandList[]){
if(strcmp(operandList[0][strlen(operandList[0])-1], "{") == 0) {
//unsigned immediate offset if(strcmp(operandList[1][strlen(operandList[1])-1], "!")==0){
instr->data.processOpData.addressingMode = a64inst_UNSIGNED_OFFSET; instr->data.processOpData.addressingMode = a64inst_PRE_INDEXED;
} else if(strcmp(operandList[0][strlen(operandList[0])-1], "]") == 0) { } else if(strcmp(operandList[0][strlen(operandList[0])-1], "]") == 0) {
//post-indexed //post-indexed
instr->data.processOpData.addressingMode = a64inst_POST_INDEXED; instr->data.processOpData.addressingMode = a64inst_POST_INDEXED;
} else if( (strcmp(operandList[1][strlen(operandList[1])-1], "x") == 0)
|| (strcmp(operandList[1][strlen(operandList[1])-1], "w") == 0)){
//register
instr->data.processOpData.addressingMode = a64inst_REGISTER_OFFSET;
} else { } else {
//check second operand to distinguish between pre-indexed and register instr->data.processOpData.addressingMode = a64inst_UNSIGNED_OFFSET;
if(strcmp(operandList[1][0], "#")==0){
//pre-indexed
instr->data.processOpData.addressingMode = a64inst_PRE_INDEXED;
} else {
//register
instr->data.processOpData.addressingMode = a64inst_REGISTER_OFFSET;
}
} }
} }