summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler_arm.cc
diff options
context:
space:
mode:
authorDave Allison <dallison@google.com>2014-04-07 18:58:07 +0000
committerDave Allison <dallison@google.com>2014-04-07 18:58:07 +0000
commit081f73e888b3c246cf7635db37b7f1105cf1a2ff (patch)
tree3ad0cab1dfa3bca814ab162cb04af125e819e623 /disassembler/disassembler_arm.cc
parent754ddad084ccb610d0cf486f6131bdc69bae5bc6 (diff)
downloadart-081f73e888b3c246cf7635db37b7f1105cf1a2ff.zip
art-081f73e888b3c246cf7635db37b7f1105cf1a2ff.tar.gz
art-081f73e888b3c246cf7635db37b7f1105cf1a2ff.tar.bz2
Revert "Use trampolines for calls to helpers"
This reverts commit 754ddad084ccb610d0cf486f6131bdc69bae5bc6. Change-Id: Icd979adee1d8d781b40a5e75daf3719444cb72e8
Diffstat (limited to 'disassembler/disassembler_arm.cc')
-rw-r--r--disassembler/disassembler_arm.cc30
1 files changed, 5 insertions, 25 deletions
diff --git a/disassembler/disassembler_arm.cc b/disassembler/disassembler_arm.cc
index 05e7576..d6d2058 100644
--- a/disassembler/disassembler_arm.cc
+++ b/disassembler/disassembler_arm.cc
@@ -1221,43 +1221,23 @@ size_t DisassemblerArm::DumpThumb32(std::ostream& os, const uint8_t* instr_ptr)
// |332|22|2|2222221111|11|1 |1|1 |10000000000|
// |1 9|87|6|5 0 6|54|3 |2|1 |0 5 0|
// |---|--|-|----------|--|--|-|--|-----------|
- // |111|10|S| imm10 |11|J1|X|J2| imm11 |
+ // |111|10|S| imm10 |11|J1|L|J2| imm11 |
uint32_t S = (instr >> 26) & 1;
uint32_t J2 = (instr >> 11) & 1;
- uint32_t X = (instr >> 12) & 1;
+ uint32_t L = (instr >> 12) & 1;
uint32_t J1 = (instr >> 13) & 1;
uint32_t imm10 = (instr >> 16) & 0x3FF;
uint32_t imm11 = instr & 0x7FF;
- if (X == 0) {
- // This bit is unnamed in spec, but if zero, the instruction
- // is BLX.
- opcode << "blx";
+ if (L == 0) {
+ opcode << "bx";
} else {
- opcode << "bl";
+ opcode << "blx";
}
uint32_t I1 = ~(J1 ^ S);
uint32_t I2 = ~(J2 ^ S);
int32_t imm32 = (S << 24) | (I1 << 23) | (I2 << 22) | (imm10 << 12) | (imm11 << 1);
imm32 = (imm32 << 8) >> 8; // sign extend 24 bit immediate.
DumpBranchTarget(args, instr_ptr + 4, imm32);
- if (X == 1) {
- // For a BL instruction we look and see if it's an entrypoint
- // trampoline.
- const uint16_t* target = reinterpret_cast<const uint16_t*>(instr_ptr + 4 + imm32);
- if (target == nullptr) {
- // Defensive, will probably never happen.
- break;
- }
- const uint32_t targetinst = static_cast<uint32_t>(*target << 16 | *(target + 1));
-
- // Is the target instruction an entrypoint trampoline:
- // ldr pc,[r9,#foo]
- if ((targetinst & 0xfffff000) == (0xf8d0f000 | (9 << 16))) {
- uint16_t offset = targetinst & 0xfff;
- args << " ; ";
- Thread::DumpThreadOffset<4>(args, offset);
- }
- }
break;
}
}