/* { dg-do run } */ /* { dg-options "-O3 --save-temps -fno-inline" } */ #pragma GCC target "+nosve" extern void abort (void); #define N 16 static void movi_msl8 (int *__restrict a) { int i; /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.\[42\]s, 0xab, msl 8" } } */ for (i = 0; i < N; i++) a[i] = 0xabff; } static void movi_msl16 (int *__restrict a) { int i; /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.\[42\]s, 0xab, msl 16" } } */ for (i = 0; i < N; i++) a[i] = 0xabffff; } static void mvni_msl8 (int *__restrict a) { int i; /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.\[42\]s, 0xab, msl 8" } } */ for (i = 0; i < N; i++) a[i] = 0xffff5400; } static void mvni_msl16 (int *__restrict a) { int i; /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.\[42\]s, 0xab, msl 16" } } */ for (i = 0; i < N; i++) a[i] = 0xff540000; } static void movi_float_lsl24 (float * a) { int i; /* { dg-final { scan-assembler {\tmovi\tv[0-9]+\.[42]s, 0x43, lsl 24\n} } } */ for (i = 0; i < N; i++) a[i] = 128.0; } int main (void) { int a[N] = { 0 }; float b[N] = { 0 }; int i; #define CHECK_ARRAY(a, val) \ for (i = 0; i < N; i++) \ if (a[i] != val) \ abort (); movi_msl8 (a); CHECK_ARRAY (a, 0xabff); movi_msl16 (a); CHECK_ARRAY (a, 0xabffff); mvni_msl8 (a); CHECK_ARRAY (a, 0xffff5400); mvni_msl16 (a); CHECK_ARRAY (a, 0xff540000); movi_float_lsl24 (b); CHECK_ARRAY (b, 128.0); return 0; }