Index: src/arm64/decoder-arm64-inl.h |
diff --git a/src/arm64/decoder-arm64-inl.h b/src/arm64/decoder-arm64-inl.h |
index 2405f8783000751dbc5f030772d36ff7486bfe6f..5873626379fa78615075f1f8aa22404a62929919 100644 |
--- a/src/arm64/decoder-arm64-inl.h |
+++ b/src/arm64/decoder-arm64-inl.h |
@@ -213,6 +213,11 @@ void Decoder<V>::DecodeLoadStore(Instruction* instr) { |
(instr->Bits(27, 24) == 0xC) || |
(instr->Bits(27, 24) == 0xD) ); |
+ if ((instr->Bit(28) == 0) && (instr->Bit(29) == 0) && (instr->Bit(26) == 1)) { |
binji
2017/03/15 22:17:35
Not necessary to check for instr->Bit(24) here?
|
+ DecodeAdvSIMDLoadStore(instr); |
+ return; |
+ } |
+ |
if (instr->Bit(24) == 0) { |
if (instr->Bit(28) == 0) { |
if (instr->Bit(29) == 0) { |
@@ -221,13 +226,10 @@ void Decoder<V>::DecodeLoadStore(Instruction* instr) { |
instr->Mask(0xA00000) == 0xA00000) { |
V::VisitUnallocated(instr); |
} else if (instr->Mask(0x808000) == 0) { |
- // Load/Store exclusive without acquire/release are unimplemented. |
- V::VisitUnimplemented(instr); |
+ V::VisitLoadStoreExclusive(instr); |
} else { |
V::VisitLoadStoreAcquireRelease(instr); |
} |
- } else { |
- DecodeAdvSIMDLoadStore(instr); |
} |
} else { |
if ((instr->Bits(31, 30) == 0x3) || |