Index: src/arm/simulator-arm.cc |
diff --git a/src/arm/simulator-arm.cc b/src/arm/simulator-arm.cc |
index c4cc8d46cb9cbada94e58c4577513e140bbb8811..c7fc13f8132ab44c1ba14abeac5d9e2887a9f4a4 100644 |
--- a/src/arm/simulator-arm.cc |
+++ b/src/arm/simulator-arm.cc |
@@ -727,6 +727,10 @@ void Simulator::set_register(int reg, int32_t value) { |
// the special case of accessing the PC register. |
int32_t Simulator::get_register(int reg) const { |
ASSERT((reg >= 0) && (reg < num_registers)); |
+ // Stupid code added to avoid bug in GCC. |
+ // See: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43949 |
+ if (reg >= num_registers) return 0; |
+ // End stupid code. |
return registers_[reg] + ((reg == pc) ? Instr::kPCReadOffset : 0); |
} |
@@ -1378,7 +1382,9 @@ void Simulator::HandleRList(Instr* instr, bool load) { |
} |
case 3: { |
// Print("ib"); |
- UNIMPLEMENTED(); |
+ start_address = rn_val + 4; |
+ end_address = rn_val + (num_regs * 4); |
+ rn_val = end_address; |
break; |
} |
default: { |