David Brownell <david-b@pacbell.net>:
Print old-style Thumb NOP instructions as such. (GCC uses "mov r8, r8" instead of the architected NOP which is new in Thumb2.) git-svn-id: svn://svn.berlios.de/openocd/trunk@2536 b42882b7-edfa-0310-969c-e2dbd0fdcd60__archive__
parent
d2088f0d29
commit
84e86e9aee
|
@ -1512,6 +1512,7 @@ int evaluate_data_proc_thumb(uint16_t opcode, uint32_t address, arm_instruction_
|
||||||
{
|
{
|
||||||
uint8_t high_reg, op, Rm, Rd,H1,H2;
|
uint8_t high_reg, op, Rm, Rd,H1,H2;
|
||||||
char *mnemonic = NULL;
|
char *mnemonic = NULL;
|
||||||
|
bool nop = false;
|
||||||
|
|
||||||
high_reg = (opcode & 0x0400) >> 10;
|
high_reg = (opcode & 0x0400) >> 10;
|
||||||
op = (opcode & 0x03C0) >> 6;
|
op = (opcode & 0x03C0) >> 6;
|
||||||
|
@ -1546,6 +1547,8 @@ int evaluate_data_proc_thumb(uint16_t opcode, uint32_t address, arm_instruction_
|
||||||
case 0x2:
|
case 0x2:
|
||||||
instruction->type = ARM_MOV;
|
instruction->type = ARM_MOV;
|
||||||
mnemonic = "MOV";
|
mnemonic = "MOV";
|
||||||
|
if (Rd == Rm)
|
||||||
|
nop = true;
|
||||||
break;
|
break;
|
||||||
case 0x3:
|
case 0x3:
|
||||||
if ((opcode & 0x7) == 0x0)
|
if ((opcode & 0x7) == 0x0)
|
||||||
|
@ -1671,9 +1674,15 @@ int evaluate_data_proc_thumb(uint16_t opcode, uint32_t address, arm_instruction_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(instruction->text, 128,
|
if (nop)
|
||||||
"0x%8.8" PRIx32 " 0x%4.4x \t%s\tr%i, r%i",
|
snprintf(instruction->text, 128,
|
||||||
address, opcode, mnemonic, Rd, Rm);
|
"0x%8.8" PRIx32 " 0x%4.4x \tNOP\t\t\t"
|
||||||
|
"; (%s r%i, r%i)",
|
||||||
|
address, opcode, mnemonic, Rd, Rm);
|
||||||
|
else
|
||||||
|
snprintf(instruction->text, 128,
|
||||||
|
"0x%8.8" PRIx32 " 0x%4.4x \t%s\tr%i, r%i",
|
||||||
|
address, opcode, mnemonic, Rd, Rm);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue