{ "B", 0xf0009000, 0xf800d000, B_T4 },\r
{ "BL", 0xf000d000, 0xf800d000, B_T4 },\r
{ "BLX", 0xf000c000, 0xf800d000, BL_T2 }\r
- \r
+ // ADD POP PUSH STR(B)(D) LDR(B)(D) EOR MOV ADDS SUBS STM\r
#if 0 \r
\r
// 32-bit Thumb instructions op1 01\r
for (Index = 0; Index < sizeof (gOpThumb2)/sizeof (THUMB_INSTRUCTIONS); Index++) {\r
if ((OpCode32 & gOpThumb2[Index].Mask) == gOpThumb2[Index].OpCode) {\r
if (Extended) {\r
- Offset = AsciiSPrint (Buf, Size, "0x%04x %-6a", OpCode32, gOpThumb2[Index].Start); \r
+ Offset = AsciiSPrint (Buf, Size, "0x%04x %-6a", OpCode32, gOpThumb2[Index].Start); \r
} else {\r
- Offset = AsciiSPrint (Buf, Size, " %-6a", gOpThumb2[Index].Start); \r
+ Offset = AsciiSPrint (Buf, Size, " %-6a", gOpThumb2[Index].Start); \r
}\r
switch (gOpThumb2[Index].AddressMode) {\r
case B_T3:\r
Buf[Offset-4] = *Cond;\r
// S:J2:J1:imm6:imm11:0\r
Target = ((OpCode32 << 1) & 0xffe) + ((OpCode32 >> 4) & 0x3f000);\r
- Target |= (OpCode & BIT11) ? BIT18 : 0; // J2\r
- Target |= (OpCode & BIT13) ? BIT17 : 0; // J1\r
- Target |= (OpCode & BIT26) ? BIT19 : 0; // S\r
- Target = SignExtend32 (Target, BIT19);\r
- AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", Target); \r
+ Target |= ((OpCode32 & BIT11) == BIT11)? BIT19 : 0; // J2\r
+ Target |= ((OpCode32 & BIT13) == BIT13)? BIT18 : 0; // J1\r
+ Target |= ((OpCode32 & BIT26) == BIT26)? BIT20 : 0; // S\r
+ Target = SignExtend32 (Target, BIT20);\r
+ AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", PC + 4 + Target); \r
return;\r
case B_T4:\r
// S:I1:I2:imm10:imm11:0\r
Target = ((OpCode32 << 1) & 0xffe) + ((OpCode32 >> 4) & 0x3ff000);\r
- S = (OpCode & BIT26);\r
- J1 = (OpCode & BIT13);\r
- J2 = (OpCode & BIT11);\r
- Target |= !(J2 ^ S) ? BIT21 : 0; // I2\r
- Target |= !(J1 ^ S) ? BIT22 : 0; // I1\r
- Target |= (OpCode & BIT26) ? BIT23 : 0; // S\r
- Target = SignExtend32 (Target, BIT23);\r
- AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", Target); \r
+ S = (OpCode32 & BIT26) == BIT26;\r
+ J1 = (OpCode32 & BIT13) == BIT13;\r
+ J2 = (OpCode32 & BIT11) == BIT11;\r
+ Target |= (!(J2 ^ S) ? BIT22 : 0); // I2\r
+ Target |= (!(J1 ^ S) ? BIT23 : 0); // I1\r
+ Target |= (S ? BIT24 : 0); // S\r
+ Target = SignExtend32 (Target, BIT24);\r
+ AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", PC + 4 + Target); \r
return;\r
\r
case BL_T2:\r
- // S:I1:I2:imm10:imm11:0\r
+ // S:I1:I2:imm10:imm11:00\r
Target = ((OpCode32 << 2) & 0x1ffc) + ((OpCode32 >> 3) & 0x7fe000);\r
- S = (OpCode & BIT26);\r
- J1 = (OpCode & BIT13);\r
- J2 = (OpCode & BIT11);\r
- Target |= !(J2 ^ S) ? BIT22 : 0; // I2\r
- Target |= !(J1 ^ S) ? BIT23 : 0; // I1\r
- Target |= (OpCode & BIT26) ? BIT24 : 0; // S\r
- Target = SignExtend32 (Target, BIT24);\r
- AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", Target); \r
+ S = (OpCode32 & BIT26) == BIT26;\r
+ J1 = (OpCode32 & BIT13) == BIT13;\r
+ J2 = (OpCode32 & BIT11) == BIT11;\r
+ Target |= (!(J2 ^ S) ? BIT23 : 0); // I2\r
+ Target |= (!(J1 ^ S) ? BIT24 : 0); // I1\r
+ Target |= (S ? BIT25 : 0); // S\r
+ Target = SignExtend32 (Target, BIT25);\r
+ AsciiSPrint (&Buf[Offset], Size - Offset, " 0x%08x", PC + 4 + Target); \r
return;\r
}\r
}\r