On Mon, 18 Oct 2021 14:40:52 +0100 Konstantin Ananyev <konstantin.anan...@intel.com> wrote:
> test_shift1_check() function fails with clang build. > The reason for that is that clang uses 64-bit shift instruction for > what expected to be 32-bit operation. > To be more specific, this C code: > r2 = (uint32_t)r2 >> r4; > With clang produces: > 41a4eb: 48 d3 ef shr %cl,%rdi > In that particular case it is an allowed choice, as from one side > left-operand value is known to fit into 32 bits, from other side > according to 'C' standard: > "...if the value of the right operand is negative or is greater than > or equal to the width of the promoted left operand, the behavior is > undefined." > The problem is that on x86 behavior for 64-bit and 32-bit shift > operation might differ. > The fix avoids undefined behavior by making sure > that right operand will not exceed width of the promoted left operand. > > Bugzilla ID: 811 > Fixes: 9f8f9d91a701 ("test/bpf: introduce functional test") > Cc: sta...@dpdk.org > > Reported-by: Stephen Hemminger <step...@networkplumber.org> > Signed-off-by: Konstantin Ananyev <konstantin.anan...@intel.com> Thanks Acked-by: Stephen Hemminger <step...@networkplumber.org>