newton-1.c

来自「用于进行gcc测试」· C语言 代码 · 共 68 行

C
68
字号
/* { dg-do compile } */#include <altivec.h>                 #define SPLAT76 ((vector unsigned char)\                 {0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3})#define SPLAT54 ((vector unsigned char)\                 {4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7})#define SPLAT32 ((vector unsigned char)\                 {8,9,10,11,8,9,10,11,8,9,10,11,8,9,10,11})#define SPLAT10 ((vector unsigned char)\                 {12,13,14,15,12,13,14,15,12,13,14,15,12,13,14,15})#define INTERLEAVE ((vector unsigned char)\                    {0,1,16,17,4,5,20,21,8,9,24,25,12,13,28,29})long real_32_manytaps (long ntaps, vector signed short *c, long ndat,                       vector signed short *x, vector signed short *y){  long i, j, op, ndatavec, ncoefvec;  vector signed short x0, x1;  vector signed short coef;  vector signed short cr10, cr32, cr54, cr76;  vector signed int y_even, y_odd;  vector signed short *x1p;  op = 0;  ndatavec = ndat >> 3;  ncoefvec = ntaps >> 3;  for (i = 0; i < ndatavec; i += 1) {    x0 = x[i];            y_even = ((vector signed int){0x8000,0x8000,0x8000,0x8000});    y_odd = ((vector signed int){0x8000,0x8000,0x8000,0x8000});            j = 0;    x1p = x + 1 + i;          do {       coef = c[j];      x1 = x1p[j];          cr10 = vec_perm(coef, coef, SPLAT10);      y_odd = vec_msums(cr10, x1, y_odd);      y_even = vec_msums(cr10, vec_sld(x0, x1, 14), y_even);      cr32 = vec_perm(coef, coef, SPLAT32);      y_odd = vec_msums(cr32, vec_sld(x0, x1, 12), y_odd);             y_even = vec_msums(cr32, vec_sld(x0, x1, 10), y_even);      cr54 = vec_perm(coef, coef, SPLAT54);      y_odd = vec_msums(cr54, vec_sld(x0, x1, 8), y_odd);              y_even = vec_msums(cr54, vec_sld(x0, x1, 6), y_even);      cr76 = vec_perm(coef, coef, SPLAT76);      y_odd = vec_msums(cr76, vec_sld(x0, x1, 4), y_odd);             y_even = vec_msums(cr76, vec_sld(x0, x1, 2), y_even);      x0 = x1;    } while (++j < ncoefvec);    y[op++] = (vector signed short) vec_perm(y_even, y_odd, INTERLEAVE);  }  return op*8;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?