rewrite address format calculation
as { is not in the actual asm syntax
This commit is contained in:
parent
70e02768b6
commit
f1ac860d6a
19
src/parser.c
19
src/parser.c
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user