arm: Fix how a bitfield is extracted in some SVE instructions.
These instructions were extracting a bitfield by masking it, but then
didn't shift the bit into the correct position. They were then
comparing it with 1, which clang 11 correctly complained would always
be false. That warning became an error which broke the build.
This fixes that problem by switching that line and the few surrounding
lines to use the bits() function which removes the need to manually
mask or shift values. That makes it less likely for there to be a
mistake, and also makes it more obvious which bits are being accessed.
Reviewed-by: Giacomo Travaglini <email@example.com>
Maintainer: Giacomo Travaglini <firstname.lastname@example.org>
Tested-by: kokoro <email@example.com>
diff --git a/src/arch/arm/isa/insts/sve.isa b/src/arch/arm/isa/insts/sve.isa
index c46a34d..612e3c7 100644
@@ -2986,10 +2986,10 @@
unsigned eCount = ArmStaticInst::getCurSveVecLen<Element>(
code += '''
- uint32_t sel_a = rot & 0x1;
+ uint32_t sel_a = bits(rot, 0);
uint32_t sel_b = sel_a ? 0 : 1;
- bool neg_i = (rot & 0x2) == 1;
- bool neg_r = (rot & 0x1) != (rot & 0x2);'''
+ bool neg_i = bits(rot, 1);
+ bool neg_r = bits(rot, 0) != bits(rot, 1);'''
if predType == PredType.NONE:
code += '''
uint32_t eltspersegment = 16 / (2 * sizeof(Element));'''