// arm neon uint64x1_t right, left rotate test
//
// usage
// $ arm-linux-gnueabi-gcc -O3 -mfpu=neon -mfloat-abi=softfp -std=c99 ./neon_shift.c -o neon_shift
// $ qemu-arm -L /usr/arm-linux-gnueabi/ ./neon_shift
#include <stdio.h>
#include <stdint.h>
#include "arm_neon.h"
int main() {
// right rotate
{
uint64_t a = 0xff;
uint64x1_t va = vld1_u64(&a);
va = vsri_n_u64(vshl_n_u64(va, (64-8)), va, 8);
vst1_u64(&a, va);
printf("0x%llx\n", a); // 0xff00000000000000
}
// left rotate
{
uint64_t a = 0xff00000000000000;
uint64x1_t va = vld1_u64(&a);
va = vsri_n_u64(vshl_n_u64(va, (8)), va, 64-8);
vst1_u64(&a, va);
printf("0x%llx\n", a); // 0xff
}
return 0;
}