| Index: src/mips/simulator-mips.cc
 | 
| diff --git a/src/mips/simulator-mips.cc b/src/mips/simulator-mips.cc
 | 
| index a7d9fcdcc4d08ee8627fb0ef8900d837c811ca30..f8dc51598927465338ac37ad730f0bd901baefc0 100644
 | 
| --- a/src/mips/simulator-mips.cc
 | 
| +++ b/src/mips/simulator-mips.cc
 | 
| @@ -1791,7 +1791,7 @@ int Simulator::ReadW(int32_t addr, Instruction* instr) {
 | 
|      MipsDebugger dbg(this);
 | 
|      dbg.Debug();
 | 
|    }
 | 
| -  if ((addr & kPointerAlignmentMask) == 0) {
 | 
| +  if ((addr & kPointerAlignmentMask) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      intptr_t* ptr = reinterpret_cast<intptr_t*>(addr);
 | 
|      TraceMemRd(addr, static_cast<int32_t>(*ptr));
 | 
|      return *ptr;
 | 
| @@ -1813,7 +1813,7 @@ void Simulator::WriteW(int32_t addr, int value, Instruction* instr) {
 | 
|      MipsDebugger dbg(this);
 | 
|      dbg.Debug();
 | 
|    }
 | 
| -  if ((addr & kPointerAlignmentMask) == 0) {
 | 
| +  if ((addr & kPointerAlignmentMask) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      intptr_t* ptr = reinterpret_cast<intptr_t*>(addr);
 | 
|      TraceMemWr(addr, value, WORD);
 | 
|      *ptr = value;
 | 
| @@ -1828,7 +1828,7 @@ void Simulator::WriteW(int32_t addr, int value, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  double Simulator::ReadD(int32_t addr, Instruction* instr) {
 | 
| -  if ((addr & kDoubleAlignmentMask) == 0) {
 | 
| +  if ((addr & kDoubleAlignmentMask) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      double* ptr = reinterpret_cast<double*>(addr);
 | 
|      return *ptr;
 | 
|    }
 | 
| @@ -1841,7 +1841,7 @@ double Simulator::ReadD(int32_t addr, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  void Simulator::WriteD(int32_t addr, double value, Instruction* instr) {
 | 
| -  if ((addr & kDoubleAlignmentMask) == 0) {
 | 
| +  if ((addr & kDoubleAlignmentMask) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      double* ptr = reinterpret_cast<double*>(addr);
 | 
|      *ptr = value;
 | 
|      return;
 | 
| @@ -1854,7 +1854,7 @@ void Simulator::WriteD(int32_t addr, double value, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  uint16_t Simulator::ReadHU(int32_t addr, Instruction* instr) {
 | 
| -  if ((addr & 1) == 0) {
 | 
| +  if ((addr & 1) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      uint16_t* ptr = reinterpret_cast<uint16_t*>(addr);
 | 
|      TraceMemRd(addr, static_cast<int32_t>(*ptr));
 | 
|      return *ptr;
 | 
| @@ -1868,7 +1868,7 @@ uint16_t Simulator::ReadHU(int32_t addr, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  int16_t Simulator::ReadH(int32_t addr, Instruction* instr) {
 | 
| -  if ((addr & 1) == 0) {
 | 
| +  if ((addr & 1) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      int16_t* ptr = reinterpret_cast<int16_t*>(addr);
 | 
|      TraceMemRd(addr, static_cast<int32_t>(*ptr));
 | 
|      return *ptr;
 | 
| @@ -1882,7 +1882,7 @@ int16_t Simulator::ReadH(int32_t addr, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  void Simulator::WriteH(int32_t addr, uint16_t value, Instruction* instr) {
 | 
| -  if ((addr & 1) == 0) {
 | 
| +  if ((addr & 1) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      uint16_t* ptr = reinterpret_cast<uint16_t*>(addr);
 | 
|      TraceMemWr(addr, value, HALF);
 | 
|      *ptr = value;
 | 
| @@ -1896,7 +1896,7 @@ void Simulator::WriteH(int32_t addr, uint16_t value, Instruction* instr) {
 | 
|  
 | 
|  
 | 
|  void Simulator::WriteH(int32_t addr, int16_t value, Instruction* instr) {
 | 
| -  if ((addr & 1) == 0) {
 | 
| +  if ((addr & 1) == 0 || IsMipsArchVariant(kMips32r6)) {
 | 
|      int16_t* ptr = reinterpret_cast<int16_t*>(addr);
 | 
|      TraceMemWr(addr, value, HALF);
 | 
|      *ptr = value;
 | 
| 
 |