示例#1
0
main () {

short input[256] __attribute__((aligned(16)));
short input2[256] __attribute__((aligned(16)));
short output[256] __attribute__((aligned(16)));

 int i;

 Zero_Buffer(output,256*2);
 
 for (i=0;i<16;i+=2)
   printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);

 input[0] = 100;
 input[1] = 200;
 input[2] = 100;
 input[3] = 200;
 input[4] = 1234;
 input[5] = -1234;
 input[6] = 1234;
 input[7] = -1234;
 input[8] = 100;
 input[9] = 200;
 input[10] = 100;
 input[11] = 200;
 input[12] = 1000;
 input[13] = 2000;
 input[14] = 1000;
 input[15] = 2000;

 input2[0] = 1;
 input2[1] = 2;
 input2[2] = 1;
 input2[3] = 2;
 input2[4] = 10;
 input2[5] = 20;
 input2[6] = 10;
 input2[7] = 20;
 input2[8] = 1;
 input2[9] = 2;
 input2[10] = 1;
 input2[11] = 2;
 input2[12] = 1000;
 input2[13] = 2000;
 input2[14] = 1000;
 input2[15] = 2000;

 
  mult_cpx_vector_h(input2,input2,output,8,0,1);

  for (i=0;i<16;i+=2)
    printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);

  Zero_Buffer(output,256*2);
  mult_cpx_vector_h(input2,input2,output,8,0,-1);

  for (i=0;i<16;i+=2)
    printf("output[%d] = %d + %d i\n",i,output[i],output[i+1]);

}
int mult_cpx_matrix_h(short *x1[2][2],
                      short *x2[2][2],
                      short *y[2][2],
                      unsigned int N,
                      unsigned short output_shift,
                      short hermitian)
{

  if (hermitian) {
    // this computes x1^H*x2 and stores it in y
    mult_cpx_vector_h(x2[0][0],x1[0][0],y[0][0],N,output_shift,1);
    mult_cpx_vector_h(x2[0][1],x1[0][1],y[0][0],N,output_shift,1);
    mult_cpx_vector_h(x2[0][0],x1[1][0],y[1][0],N,output_shift,1);
    mult_cpx_vector_h(x2[0][1],x1[1][1],y[1][0],N,output_shift,1);
    mult_cpx_vector_h(x2[1][0],x1[0][0],y[0][1],N,output_shift,1);
    mult_cpx_vector_h(x2[1][1],x1[0][1],y[0][1],N,output_shift,1);
    mult_cpx_vector_h(x2[1][0],x1[1][0],y[1][1],N,output_shift,1);
    mult_cpx_vector_h(x2[1][1],x1[1][1],y[1][1],N,output_shift,1);
  } else {
    // this computes x1*x2^H and stores it in y
    mult_cpx_vector_h(x1[0][0],x2[0][0],y[0][0],N,output_shift,1);
    mult_cpx_vector_h(x1[0][1],x2[0][1],y[0][0],N,output_shift,1);
    mult_cpx_vector_h(x1[0][0],x2[1][0],y[0][1],N,output_shift,1);
    mult_cpx_vector_h(x1[0][1],x2[1][1],y[0][1],N,output_shift,1);
    mult_cpx_vector_h(x1[1][0],x2[0][0],y[1][0],N,output_shift,1);
    mult_cpx_vector_h(x1[1][1],x2[0][1],y[1][0],N,output_shift,1);
    mult_cpx_vector_h(x1[1][0],x2[1][0],y[1][1],N,output_shift,1);
    mult_cpx_vector_h(x1[1][1],x2[1][1],y[1][1],N,output_shift,1);
  }
}