https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93819
--- Comment #2 from Carl Love ---
With the attached patch, the test program now runs as follows:
ABI says:
VEC_RLNM (ARG1, ARG2, ARG3)
ARG2 contains the shift count for each element in the low-order
byte, with other bytes zero.
ARG3 contains the mask begin and mask end for each element, with
the mask end in the low-order byte, the mask begin in the next
higher byte, and other bytes zero.
Vector int test case: mask begin = 0, mask end = 4, shift = 16
vec_arg1_int[0] = 0x12345678
vec_arg2_int[0] = 16 (0x10)
vec_arg3_int[0] = 4 (0x4)
vec_result_int[0] = 0x5000
Int result matches expected result 0x5000
vec_arg1_int[1] = 0x23456789
vec_arg2_int[1] = 16 (0x10)
vec_arg3_int[1] = 4 (0x4)
vec_result_int[1] = 0x6000
Int result matches expected result 0x6000
vec_arg1_int[2] = 0x3456789a
vec_arg2_int[2] = 16 (0x10)
vec_arg3_int[2] = 4 (0x4)
vec_result_int[2] = 0x7800
Int result matches expected result 0x7800
vec_arg1_int[3] = 0x456789ab
vec_arg2_int[3] = 16 (0x10)
vec_arg3_int[3] = 4 (0x4)
vec_result_int[3] = 0x8800
Int result matches expected result 0x8800
Vector long long int test case: mask begin = 0, mask end = 4, shift = 20
vec_arg1_di[0] = 0x123456789abcde00
vec_arg2_di[0] = 20 (0x14)
vec_arg3_di[0] = 4 (0x4)
vec_result_di[0] = 0x6000
Long long int result matches expected result 0x6000
vec_arg1_di[1] = 0x23456789abcdef11
vec_arg2_di[1] = 20 (0x14)
vec_arg3_di[1] = 4 (0x4)
vec_result_di[1] = 0x7800
Long long int result matches expected result 0x7800