From 4149db91aa072e1e93dc475b0c5d4930d00c11c1 Mon Sep 17 00:00:00 2001 From: liuyujun Date: Wed, 11 May 2022 14:10:36 +0800 Subject: [PATCH] Fix bitfield unallocated --- src/aarch64/simulator-aarch64.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/aarch64/simulator-aarch64.cc b/src/aarch64/simulator-aarch64.cc index 10e4f8f8..915f3985 100644 --- a/src/aarch64/simulator-aarch64.cc +++ b/src/aarch64/simulator-aarch64.cc @@ -5474,17 +5474,18 @@ void Simulator::VisitBitfield(const Instruction* instr) { if (instr->GetSixtyFourBits() != instr->GetBitN()) { VisitUnallocated(instr); + return; } if ((instr->GetSixtyFourBits() == 0) && ((S > 31) || (R > 31))) { VisitUnallocated(instr); + return; } int diff = S - R; uint64_t mask; if (diff >= 0) { mask = ~UINT64_C(0) >> (64 - (diff + 1)); - mask = (static_cast(diff) < (reg_size - 1)) ? mask : reg_mask; } else { mask = ~UINT64_C(0) >> (64 - (S + 1)); mask = RotateRight(mask, R, reg_size);