Chromium Code Reviews| Index: src/arm/simulator-arm.cc |
| diff --git a/src/arm/simulator-arm.cc b/src/arm/simulator-arm.cc |
| index 563912bf6fa14e5c0d1dfb06fa033c097f288023..2b67c89f27d753414167d1a0dc010f990df90628 100644 |
| --- a/src/arm/simulator-arm.cc |
| +++ b/src/arm/simulator-arm.cc |
| @@ -2647,6 +2647,16 @@ void Simulator::DecodeType2(Instruction* instr) { |
| } |
| +static uint32_t ReverseBits(uint32_t value) { |
|
titzer
2016/02/14 11:18:34
Good candidate for src/base/bits.cc?
Rodolph Perfetta
2016/02/15 17:56:01
Done.
|
| + uint32_t result = 0; |
| + for (unsigned i = 0; i < 32; ++i) { |
| + result = (result << 1) | (value & 1); |
| + value >>= 1; |
| + } |
| + return result; |
| +} |
| + |
| + |
| void Simulator::DecodeType3(Instruction* instr) { |
| int rd = instr->RdValue(); |
| int rn = instr->RnValue(); |
| @@ -2920,7 +2930,15 @@ void Simulator::DecodeType3(Instruction* instr) { |
| } |
| } |
| } else { |
| - UNIMPLEMENTED(); |
| + // PU == 0b01, BW == 0b11, Bits(9, 6) != 0b0001 |
| + if ((instr->Bits(20, 16) == 0x1f) && |
| + (instr->Bits(11, 4) == 0xf3)) { |
| + // Rbit. |
| + uint32_t rm_val = get_register(instr->RmValue()); |
| + set_register(rd, ReverseBits(rm_val)); |
| + } else { |
| + UNIMPLEMENTED(); |
| + } |
| } |
| break; |
| } |