Index: src/arm64/decoder-arm64-inl.h |
diff --git a/src/arm64/decoder-arm64-inl.h b/src/arm64/decoder-arm64-inl.h |
index e00105e7bc1b49165c3a5853520e86bd943255fd..2405f8783000751dbc5f030772d36ff7486bfe6f 100644 |
--- a/src/arm64/decoder-arm64-inl.h |
+++ b/src/arm64/decoder-arm64-inl.h |
@@ -217,8 +217,15 @@ void Decoder<V>::DecodeLoadStore(Instruction* instr) { |
if (instr->Bit(28) == 0) { |
if (instr->Bit(29) == 0) { |
if (instr->Bit(26) == 0) { |
- // TODO(all): VisitLoadStoreExclusive. |
- V::VisitUnimplemented(instr); |
+ if (instr->Mask(0xA08000) == 0x800000 || |
+ instr->Mask(0xA00000) == 0xA00000) { |
+ V::VisitUnallocated(instr); |
+ } else if (instr->Mask(0x808000) == 0) { |
+ // Load/Store exclusive without acquire/release are unimplemented. |
+ V::VisitUnimplemented(instr); |
+ } else { |
+ V::VisitLoadStoreAcquireRelease(instr); |
+ } |
} else { |
DecodeAdvSIMDLoadStore(instr); |
} |