| Index: runtime/vm/simulator_arm64.cc
 | 
| diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
 | 
| index 99912dfa29c7793730771114aadda99ba69cde83..6125bae52ac4fba69e5680780976a6192c5cf3f1 100644
 | 
| --- a/runtime/vm/simulator_arm64.cc
 | 
| +++ b/runtime/vm/simulator_arm64.cc
 | 
| @@ -1225,13 +1225,6 @@ intptr_t Simulator::ReadExclusiveX(uword addr, Instr* instr) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -intptr_t Simulator::ReadExclusiveW(uword addr, Instr* instr) {
 | 
| -  MutexLocker ml(exclusive_access_lock_);
 | 
| -  SetExclusiveAccess(addr);
 | 
| -  return ReadWU(addr, instr);
 | 
| -}
 | 
| -
 | 
| -
 | 
|  intptr_t Simulator::WriteExclusiveX(uword addr, intptr_t value, Instr* instr) {
 | 
|    MutexLocker ml(exclusive_access_lock_);
 | 
|    bool write_allowed = HasExclusiveAccessAndOpen(addr);
 | 
| @@ -1243,17 +1236,6 @@ intptr_t Simulator::WriteExclusiveX(uword addr, intptr_t value, Instr* instr) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -intptr_t Simulator::WriteExclusiveW(uword addr, intptr_t value, Instr* instr) {
 | 
| -  MutexLocker ml(exclusive_access_lock_);
 | 
| -  bool write_allowed = HasExclusiveAccessAndOpen(addr);
 | 
| -  if (write_allowed) {
 | 
| -    WriteW(addr, value, instr);
 | 
| -    return 0;  // Success.
 | 
| -  }
 | 
| -  return 1;  // Failure.
 | 
| -}
 | 
| -
 | 
| -
 | 
|  uword Simulator::CompareExchange(uword* address,
 | 
|                                   uword compare_value,
 | 
|                                   uword new_value) {
 | 
| @@ -2217,37 +2199,25 @@ void Simulator::DecodeLoadStoreExclusive(Instr* instr) {
 | 
|      UNIMPLEMENTED();
 | 
|    }
 | 
|    const int32_t size = instr->Bits(30, 2);
 | 
| -  if (size != 3 && size != 2) {
 | 
| +  if (size != 3) {
 | 
|      UNIMPLEMENTED();
 | 
|    }
 | 
| +
 | 
|    const Register rs = instr->RsField();
 | 
|    const Register rn = instr->RnField();
 | 
|    const Register rt = instr->RtField();
 | 
|    const bool is_load = instr->Bit(22) == 1;
 | 
|    if (is_load) {
 | 
|      // Format(instr, "ldxr 'rt, 'rn");
 | 
| -    if (size == 3) {
 | 
| -      const int64_t addr = get_register(rn, R31IsSP);
 | 
| -      intptr_t value = ReadExclusiveX(addr, instr);
 | 
| -      set_register(instr, rt, value, R31IsSP);
 | 
| -    } else {
 | 
| -      const int64_t addr = get_register(rn, R31IsSP);
 | 
| -      intptr_t value = ReadExclusiveW(addr, instr);
 | 
| -      set_register(instr, rt, value, R31IsSP);
 | 
| -    }
 | 
| +    const int64_t addr = get_register(rn, R31IsSP);
 | 
| +    intptr_t value = ReadExclusiveX(addr, instr);
 | 
| +    set_register(instr, rt, value, R31IsSP);
 | 
|    } else {
 | 
|      // Format(instr, "stxr 'rs, 'rt, 'rn");
 | 
| -    if (size == 3) {
 | 
| -      uword value = get_register(rt, R31IsSP);
 | 
| -      uword addr = get_register(rn, R31IsSP);
 | 
| -      intptr_t status = WriteExclusiveX(addr, value, instr);
 | 
| -      set_register(instr, rs, status, R31IsSP);
 | 
| -    } else {
 | 
| -      uint32_t value = get_register(rt, R31IsSP);
 | 
| -      uword addr = get_register(rn, R31IsSP);
 | 
| -      intptr_t status = WriteExclusiveW(addr, value, instr);
 | 
| -      set_register(instr, rs, status, R31IsSP);
 | 
| -    }
 | 
| +    uword value = get_register(rt, R31IsSP);
 | 
| +    uword addr = get_register(rn, R31IsSP);
 | 
| +    intptr_t status = WriteExclusiveX(addr, value, instr);
 | 
| +    set_register(instr, rs, status, R31IsSP);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |