| Index: src/arm/disasm-arm.cc
|
| ===================================================================
|
| --- src/arm/disasm-arm.cc (revision 4607)
|
| +++ src/arm/disasm-arm.cc (working copy)
|
| @@ -418,6 +418,12 @@
|
| ASSERT(STRING_STARTS_WITH(format, "memop"));
|
| if (instr->HasL()) {
|
| Print("ldr");
|
| + } else if ((instr->Bits(27, 25) == 0) && (instr->Bit(20) == 0)) {
|
| + if (instr->Bits(7, 4) == 0xf) {
|
| + Print("strd");
|
| + } else {
|
| + Print("ldrd");
|
| + }
|
| } else {
|
| Print("str");
|
| }
|
| @@ -614,6 +620,47 @@
|
| } else {
|
| Unknown(instr); // not used by V8
|
| }
|
| + } else if ((instr->Bit(20) == 0) && ((instr->Bits(7, 4) & 0xd) == 0xd)) {
|
| + // ldrd, strd
|
| + switch (instr->PUField()) {
|
| + case 0: {
|
| + if (instr->Bit(22) == 0) {
|
| + Format(instr, "'memop'cond's 'rd, ['rn], -'rm");
|
| + } else {
|
| + Format(instr, "'memop'cond's 'rd, ['rn], #-'off8");
|
| + }
|
| + break;
|
| + }
|
| + case 1: {
|
| + if (instr->Bit(22) == 0) {
|
| + Format(instr, "'memop'cond's 'rd, ['rn], +'rm");
|
| + } else {
|
| + Format(instr, "'memop'cond's 'rd, ['rn], #+'off8");
|
| + }
|
| + break;
|
| + }
|
| + case 2: {
|
| + if (instr->Bit(22) == 0) {
|
| + Format(instr, "'memop'cond's 'rd, ['rn, -'rm]'w");
|
| + } else {
|
| + Format(instr, "'memop'cond's 'rd, ['rn, #-'off8]'w");
|
| + }
|
| + break;
|
| + }
|
| + case 3: {
|
| + if (instr->Bit(22) == 0) {
|
| + Format(instr, "'memop'cond's 'rd, ['rn, +'rm]'w");
|
| + } else {
|
| + Format(instr, "'memop'cond's 'rd, ['rn, #+'off8]'w");
|
| + }
|
| + break;
|
| + }
|
| + default: {
|
| + // The PU field is a 2-bit field.
|
| + UNREACHABLE();
|
| + break;
|
| + }
|
| + }
|
| } else {
|
| // extra load/store instructions
|
| switch (instr->PUField()) {
|
|
|