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); } }