https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122216
Bug ID: 122216
Summary: MVE: lsll and asrl intrinsics do not match actual
instructions
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: clyon at gcc dot gnu.org
Reporter: clyon at gcc dot gnu.org
Target Milestone: ---
Target: arm
As reported in
https://gcc.gnu.org/pipermail/gcc-patches/2025-August/692431.html
the MVE asrl and lsll intrinsics current implementation does not support
negative shift amounts, unlike the underlying expected instructions.
This is because the current implementation uses C shift operators, instead of
calling directly the builtins.
I posted a fix which re-implements these intrinsics using the new framework:
https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693454.html
but this fix is only partial, because we have to handle cases where RTL faces
out-of-range shift amounts. A patch for this is being discussed in
https://forge.sourceware.org/gcc/gcc-TEST/pulls/68