This change implements ACLE CDE intrinsics that translate to
instructions working with general-purpose registers.
The specification is available at
https://static.docs.arm.com/101028/0010/ACLE_2019Q4_release-0010.pdf
Each ACLE intrinsic gets a corresponding LLVM IR intrinsic (because
they have distinct function prototypes). Dual-register operands are
represented as pairs of i32 values. Because of this the instruction
selection for these intrinsics cannot be represented as TableGen
patterns and requires custom C++ code.
clang-format: please reformat the code
- __arm_cx1a(0, a, a); // expected-error {{argument to '__arm_cx1a' must be a constant integer}} - __arm_cx1a(0, a, 8192); // expected-error {{argument value 8192 is outside the valid range [0, 8191]}} - __arm_cx1d(0, a); // expected-error {{argument to '__arm_cx1d' must be a constant integer}} - __arm_cx1d(0, 8192); // expected-error {{argument value 8192 is outside the valid range [0, 8191]}} - __arm_cx1da(0, da, a); // expected-error {{argument to '__arm_cx1da' must be a constant integer}} - __arm_cx1da(0, da, 8192); // expected-error {{argument value 8192 is outside the valid range [0, 8191]}} + __arm_cx1a(0, a, a); // expected-error {{argument to '__arm_cx1a' must be a constant integer}} + __arm_cx1a(0, a, 8192); // expected-error {{argument value 8192 is outside the valid range [0, 8191]}} + __arm_cx1d(0, a); // expected-error {{argument to '__arm_cx1d' must be a constant integer}} + __arm_cx1d(0, 8192); // expected-error {{argument value 8192 is outside the valid range [0, 8191]}}2 diff lines are omitted. See full diff.