arm: Fixed undefined behaviours identified by gcc
authorAndreas Hansson <andreas.hansson@arm.com>
Sat, 27 Sep 2014 13:08:37 +0000 (09:08 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Sat, 27 Sep 2014 13:08:37 +0000 (09:08 -0400)
commitec41000dadd5256fd90f0bfdc97264946e50a3aa
treeb045e00e601839d4f49cb85321b544b71341abce
parent341dbf266258dcbdb1e5e9f09c244b8ac271faaf
arm: Fixed undefined behaviours identified by gcc

This patch fixes the runtime errors highlighted by the undefined
behaviour sanitizer. In the end there were two issues. First, when
rotating an immediate, we ended up shifting an uint32_t by 32 in some
cases. This case is fixed by checking for a rotation by 0
positions. Second, the Mrc15 and Mcr15 are operating on an IntReg and
a MiscReg, but we used the type RegRegImmOp and passed a MiscRegIndex
as an IntRegIndex. This issue is resolved by introducing a
MiscRegRegImmOp and RegMiscRegImmOp with the appropriate types.

With these fixes there are no runtime errors identified for the full
ARM regressions.
src/arch/arm/insts/misc.cc
src/arch/arm/insts/misc.hh
src/arch/arm/insts/pred_inst.hh
src/arch/arm/isa/formats/misc.isa
src/arch/arm/isa/insts/misc.isa
src/arch/arm/isa/templates/misc.isa
src/arch/arm/tlb.cc