altivec-consts.c
来自「用于进行gcc测试」· C语言 代码 · 共 322 行
C
322 行
/* { dg-do run { target powerpc*-*-* } } *//* { dg-require-effective-target powerpc_altivec_ok } *//* { dg-options "-maltivec -mabi=altivec -O2" } *//* Check that "easy" AltiVec constants are correctly synthesized. */#include "altivec_check.h"extern void abort (void);typedef __attribute__ ((vector_size (16))) unsigned char v16qi;typedef __attribute__ ((vector_size (16))) unsigned short v8hi;typedef __attribute__ ((vector_size (16))) unsigned int v4si;char w[16] __attribute__((aligned(16))); /* Emulate the vspltis? instructions on a 16-byte array of chars. */void vspltisb (char *v, int val){ int i; for (i = 0; i < 16; i++) v[i] = val;}void vspltish (char *v, int val){ int i; for (i = 0; i < 16; i += 2) v[i] = val >> 7, v[i + 1] = val;}void vspltisw (char *v, int val){ int i; for (i = 0; i < 16; i += 4) v[i] = v[i + 1] = v[i + 2] = val >> 7, v[i + 3] = val;}/* Use three different check functions for each mode-instruction pair. The callers have no typecasting and no addressable vectors, to make the test more robust. */void __attribute__ ((noinline)) check_v16qi (v16qi v1, char *v2){ if (memcmp (&v1, v2, 16)) abort ();}void __attribute__ ((noinline)) check_v8hi (v8hi v1, char *v2){ if (memcmp (&v1, v2, 16)) abort ();}void __attribute__ ((noinline)) check_v4si (v4si v1, char *v2){ if (memcmp (&v1, v2, 16)) abort ();}/* V16QI tests. */void v16qi_vspltisb (){ v16qi v = { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }; vspltisb (w, 15); check_v16qi (v, w);}void v16qi_vspltisb_neg (){ v16qi v = { -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5 }; vspltisb (w, -5); check_v16qi (v, w);}void v16qi_vspltisb_addself (){ v16qi v = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 }; vspltisb (w, 30); check_v16qi (v, w);}void v16qi_vspltisb_neg_addself (){ v16qi v = { -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24 }; vspltisb (w, -24); check_v16qi (v, w);}void v16qi_vspltish (){ v16qi v = { 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15, 0, 15 }; vspltish (w, 15); check_v16qi (v, w);}void v16qi_vspltish_addself (){ v16qi v = { 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30 }; vspltish (w, 30); check_v16qi (v, w);}void v16qi_vspltish_neg (){ v16qi v = { -1, -5, -1, -5, -1, -5, -1, -5, -1, -5, -1, -5, -1, -5, -1, -5 }; vspltish (w, -5); check_v16qi (v, w);}void v16qi_vspltisw (){ v16qi v = { 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 15 }; vspltisw (w, 15); check_v16qi (v, w);}void v16qi_vspltisw_addself (){ v16qi v = { 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, 30, 0, 0, 0, 30 }; vspltisw (w, 30); check_v16qi (v, w);}void v16qi_vspltisw_neg (){ v16qi v = { -1, -1, -1, -5, -1, -1, -1, -5, -1, -1, -1, -5, -1, -1, -1, -5 }; vspltisw (w, -5); check_v16qi (v, w);}/* V8HI tests. */void v8hi_vspltisb (){ v8hi v = { 0x0F0F, 0x0F0F, 0x0F0F, 0x0F0F, 0x0F0F, 0x0F0F, 0x0F0F, 0x0F0F }; vspltisb (w, 15); check_v8hi (v, w);}void v8hi_vspltisb_addself (){ v8hi v = { 0x1E1E, 0x1E1E, 0x1E1E, 0x1E1E, 0x1E1E, 0x1E1E, 0x1E1E, 0x1E1E }; vspltisb (w, 30); check_v8hi (v, w);}void v8hi_vspltisb_neg (){ v8hi v = { 0xFBFB, 0xFBFB, 0xFBFB, 0xFBFB, 0xFBFB, 0xFBFB, 0xFBFB, 0xFBFB }; vspltisb (w, -5); check_v8hi (v, w);}void v8hi_vspltish (){ v8hi v = { 15, 15, 15, 15, 15, 15, 15, 15 }; vspltish (w, 15); check_v8hi (v, w);}void v8hi_vspltish_neg (){ v8hi v = { -5, -5, -5, -5, -5, -5, -5, -5 }; vspltish (w, -5); check_v8hi (v, w);}void v8hi_vspltish_addself (){ v8hi v = { 30, 30, 30, 30, 30, 30, 30, 30 }; vspltish (w, 30); check_v8hi (v, w);}void v8hi_vspltish_neg_addself (){ v8hi v = { -24, -24, -24, -24, -24, -24, -24, -24 }; vspltish (w, -24); check_v8hi (v, w);}void v8hi_vspltisw (){ v8hi v = { 0, 15, 0, 15, 0, 15, 0, 15 }; vspltisw (w, 15); check_v8hi (v, w);}void v8hi_vspltisw_addself (){ v8hi v = { 0, 30, 0, 30, 0, 30, 0, 30 }; vspltisw (w, 30); check_v8hi (v, w);}void v8hi_vspltisw_neg (){ v8hi v = { -1, -5, -1, -5, -1, -5, -1, -5 }; vspltisw (w, -5); check_v8hi (v, w);}/* V4SI tests. */void v4si_vspltisb (){ v4si v = { 0x0F0F0F0F, 0x0F0F0F0F, 0x0F0F0F0F, 0x0F0F0F0F }; vspltisb (w, 15); check_v4si (v, w);}void v4si_vspltisb_addself (){ v4si v = { 0x1E1E1E1E, 0x1E1E1E1E, 0x1E1E1E1E, 0x1E1E1E1E }; vspltisb (w, 30); check_v4si (v, w);}void v4si_vspltisb_neg (){ v4si v = { 0xFBFBFBFB, 0xFBFBFBFB, 0xFBFBFBFB, 0xFBFBFBFB }; vspltisb (w, -5); check_v4si (v, w);}void v4si_vspltish (){ v4si v = { 0x000F000F, 0x000F000F, 0x000F000F, 0x000F000F }; vspltish (w, 15); check_v4si (v, w);}void v4si_vspltish_addself (){ v4si v = { 0x001E001E, 0x001E001E, 0x001E001E, 0x001E001E }; vspltish (w, 30); check_v4si (v, w);}void v4si_vspltish_neg (){ v4si v = { 0xFFFBFFFB, 0xFFFBFFFB, 0xFFFBFFFB, 0xFFFBFFFB }; vspltish (w, -5); check_v4si (v, w);}void v4si_vspltisw (){ v4si v = { 15, 15, 15, 15 }; vspltisw (w, 15); check_v4si (v, w);}void v4si_vspltisw_neg (){ v4si v = { -5, -5, -5, -5 }; vspltisw (w, -5); check_v4si (v, w);}void v4si_vspltisw_addself (){ v4si v = { 30, 30, 30, 30 }; vspltisw (w, 30); check_v4si (v, w);}void v4si_vspltisw_neg_addself (){ v4si v = { -24, -24, -24, -24 }; vspltisw (w, -24); check_v4si (v, w);}int main (){ altivec_check (); /* Exit if hardware doesn't support AltiVec. */ v16qi_vspltisb (); v16qi_vspltisb_neg (); v16qi_vspltisb_addself (); v16qi_vspltisb_neg_addself (); v16qi_vspltish (); v16qi_vspltish_addself (); v16qi_vspltish_neg (); v16qi_vspltisw (); v16qi_vspltisw_addself (); v16qi_vspltisw_neg (); v8hi_vspltisb (); v8hi_vspltisb_addself (); v8hi_vspltisb_neg (); v8hi_vspltish (); v8hi_vspltish_neg (); v8hi_vspltish_addself (); v8hi_vspltish_neg_addself (); v8hi_vspltisw (); v8hi_vspltisw_addself (); v8hi_vspltisw_neg (); v4si_vspltisb (); v4si_vspltisb_addself (); v4si_vspltisb_neg (); v4si_vspltish (); v4si_vspltish_addself (); v4si_vspltish_neg (); v4si_vspltisw (); v4si_vspltisw_neg (); v4si_vspltisw_addself (); v4si_vspltisw_neg_addself (); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?