This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to optimize C code for C674x

Other Parts Discussed in Thread: OMAP-L137

Hi,

We have to perform intensive floating point calculations on C674x core ( OMAP-L137 ). An example code is in the attachment. There is a fuction reg_test_3_order which calculates params for regulator we have to do calculations as fast as possible. What kind of optimization can be done to fit  C674x hardware ?
We are running this code from L2 DSP RAM, code is compiled with -O2  ( with -O3 compiler hangs ) and for C674x core.

What can be done to improve dsp utilization with this code? Is -O2, L2 RAM the only way to improve performace.

8512.test_app.c

void reg_test_3_order (float data[])
{
   // INPUT: [a1, a2, a3, a4, b1, b2, b3, b4, d0, d1, d2, d3, d4, d5, d6, d7, d8] 
   // OUTPUT: [q0, q1, q2, q3, q4, p1, p2, p3] 


    float a1 = data[0]; 
    float a2 = data[1]; 
    float a3 = data[2]; 
    float a4 = data[3]; 
    float b1 = data[4]; 
    float b2 = data[5]; 
    float b3 = data[6]; 
    float b4 = data[7]; 
    float d0 = data[8]; 
    float d1 = data[9]; 
    float d2 = data[10]; 
    float d3 = data[11]; 
    float d4 = data[12]; 
    float d5 = data[13]; 
    float d6 = data[14]; 
    float d7 = data[15]; 
    float d8 = data[16]; 


    float x1 = d1-a1; 
    float x2 = d2-a2; 
    float x3 = d3-a3; 
    float x4 = d4-a4; 
    float x5 = d5; 
    float x6 = d6; 
    float x7 = d7; 
    float x8 = d8; 

    float a1_2 =  a1 * a1; 
    float a1_3 =  a1 * a1 * a1; 
    float a2_2 =  a2 * a2; 
    float a2_3 =  a2 * a2 * a2; 
    float a3_2 =  a3 * a3; 
    float a3_3 =  a3 * a3 * a3; 
    float a4_2 =  a4 * a4; 
    float a4_3 =  a4 * a4 * a4; 
    float b1_2 =  b1 * b1; 
    float b1_3 =  b1 * b1 * b1; 
    float b1_4 =  b1 * b1 * b1 * b1; 
    float b1_5 =  b1 * b1 * b1 * b1 * b1; 
    float b2_2 =  b2 * b2; 
    float b2_3 =  b2 * b2 * b2; 
    float b2_4 =  b2 * b2 * b2 * b2; 
    float b2_5 =  b2 * b2 * b2 * b2 * b2; 
    float b3_2 =  b3 * b3; 
    float b3_3 =  b3 * b3 * b3; 
    float b3_4 =  b3 * b3 * b3 * b3; 
    float b3_5 =  b3 * b3 * b3 * b3 * b3; 
    float b4_2 =  b4 * b4; 
    float b4_3 =  b4 * b4 * b4; 
    float b4_4 =  b4 * b4 * b4 * b4; 
    float b4_5 =  b4 * b4 * b4 * b4 * b4; 

    float a1_a2 = a1*a2;
    float a1_a3 = a1*a3;
    float a1_a4 = a1*a4;
    float a1_b1 = a1*b1;
    float a1_b2 = a1*b2;
    float a1_b3 = a1*b3;
    float a1_b4 = a1*b4;
    float a2_a3 = a2*a3;
    float a2_a4 = a2*a4;
    float a2_b1 = a2*b1;
    float a2_b2 = a2*b2;
    float a2_b3 = a2*b3;
    float a2_b4 = a2*b4;
    float a3_a4 = a3*a4;
    float a3_b1 = a3*b1;
    float a3_b2 = a3*b2;
    float a3_b3 = a3*b3;
    float a3_b4 = a3*b4;
    float a4_b1 = a4*b1;
    float a4_b2 = a4*b2;
    float a4_b3 = a4*b3;
    float a4_b4 = b4*a4;
    float b1_b2 = b1*b2;
    float b1_b3 = b1*b3;
    float b1_b4 = b1*b4;
    float b2_b3 = b2*b3;
    float b2_b4 = b2*b4;
    float b3_b4 = b3*b4;


    float num1 = (a1_3*b4_4+a2_2*b4_3*b3-2*b2_2*b4_2*a4*a1_a2-b4_3*a4_b3-b3_2*b4_2*a1_a4+2*b4_3*b2*a1_a4-2*b4_4*a1_a2+a1_2*b3_2*b4_2*a3+b4_3*b3*a1_a3+3*b4_2*a1_2*b3*a4_b2-3*b4_2*b1_2*a4*a2_a3+2*b4_2*a2_2*b2*a4_b1-a2_2*b3_2*b4*a4_b1+b4*a2_a3*a4_b1*b2_b3-3*a4_2*b4*a1_b1*b2_b3+b4_2*b2*a1_a3*a4_b1+2*b3_2*b4*a1_a3*a4_b1-b4_2*b3*a1_a2*a4_b1-b2_2*b4*a1_a3*a4_b3+3*b4_2*a4_2*b1_2*a1+b4_2*a3_2*b2_2*a1+b3_2*b4*a1_a2*a4_b2-a3_2*b1_2*b4*a4_b3-2*b4_2*a3_2*b3*a1_b1-a4_2*b2_2*b4*a2_b1-a3_2*b4_2*b2*a2_b1+2*a4_2*b1_2*b4*a2_b3+b4_2*a2_2*b3*a3_b1+a4_2*b1_2*b4*a3_b2-b4_2*b3*a1_a2*a3_b2+b4_4*a3+a3_2*b4_2*b2_b3+2*b4_3*b1*a2_a4-3*b4_3*a1_2*a4_b1-a4_3*b1_3*b4-2*a4_2*b4_2*b1_b2+b4_2*a3_3*b1_2-b4_3*a2_3*b1-2*a3_2*b4_3*b1+3*b4_2*a3_a4*b1_b3-a4_2*b3_2*b1_b4-a1_2*b3_3*a4_b4+b4_3*a2_2*a1_b2-b3_2*a3_a4*b2_b4+a4_2*b2_2*b3_b4+a4_2*b2_3*a1_b4-2*b4_2*a2_a4*b2_b3-b4_3*a1_2*a2_b3+3*b4_3*a1_a2*a3_b1-2*b4_3*a1_2*a3_b2-b3_2*b4_2*a2_a3+b3_3*b4*a2_a4)*x1+(b2_2*a3_a4*b3_b4+b3_2*b4_2*a4-b4_2*a3_a4*b1_b2-3*b4_2*a1_a4*b2_b3-a2_2*b4_3*b2+a3_2*b4_2*b1_b3+b4_3*b3*a1_a2-b4_3*a4_b2+2*b4_3*b2*a1_a3-b3_2*a2_a4*b2_b4+2*b4_3*b1*a1_a4-a1_2*b4_4-b4_3*b1*a2_a3-b3_2*a3_a4*b1_b4+2*b2_2*b4_2*a2_a4+b4_2*a2_a3*b2_b3-b3_2*b4_2*a1_a3-a4_2*b1_2*b4_2-b4_3*a3_b3+b4_4*a2-a4_2*b2_3*b4+b3_3*b4*a1_a4-a3_2*b2_2*b4_2+2*a4_2*b1_b2*b3_b4)*x2+(-2*b4_2*a2_a4*b1_b2+b3_2*a2_a4*b1_b4-a4_2*b1_2*b3_b4+2*b4_2*b3*a4_b2-b4_3*a2_b3+a3_2*b4_2*b1_b2-b3_3*a4_b4+a4_2*b2_2*b1_b4+a2_2*b4_3*b1+b1_2*b4_2*a3_a4-b4_3*a4_b1-b4_3*a3_b2-a3_a4*b1_b2*b3_b4+b4_2*a1_a4*b1_b3+b4_4*a1+b3_2*b4_2*a3-b4_2*a2_a3*b1_b3-b4_3*b1*a1_a3)*x3+(b1_2*a3_a4*b3_b4-b3_2*a1_a4*b1_b4+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+b4_2*a1_a4*b1_b2+b4_2*a1_a3*b1_b3-a3_2*b1_2*b4_2-b2_2*b4_2*a4+2*b4_3*a3_b1-a4_2*b1_2*b2_b4+b1_2*b4_2*a2_a4+b4_3*a2_b2-b4_2*b3*a3_b2-b4_4-b4_3*b1*a1_a2)*x4+(b4_3*b3+a1_a4*b1_b2*b3_b4-b2_2*b4*a4_b3+a4_2*b1_3*b4+b2_2*b4_2*a3+a1_2*b4_3*b1-b4_3*a2_b1-b4_3*a1_b2-b4_2*b3*a3_b1-2*b1_2*b4_2*a1_a4-b4_2*a1_a3*b1_b2+2*b4_2*b2*a4_b1+b1_2*b4_2*a2_a3-b1_2*a2_a4*b3_b4+b3_2*b4*a4_b1)*x5+(-a2_2*b1_2*b4_2-b4_3*a1_b1-2*b4*a4_b1*b2_b3+b4_2*a1_a2*b1_b2+b2_3*a4_b4+b1_2*a2_a4*b2_b4-b3_2*b4_2-a1_2*b4_2*b1_b3+b1_2*b4_2*a1_a3+b4_2*b3*a1_b2-b1_3*b4*a3_a4-b2_2*a1_a4*b1_b4-b4_2*b2*a3_b1+2*b4_2*b3*a2_b1-b2_2*b4_2*a2+b1_2*b4_2*a4+b4_3*b2+b1_2*a1_a4*b3_b4)*x6+(b1_2*b4*a4_b3-2*b1_2*b4_2*a3+a3_2*b1_3*b4+b4_2*b3*a1_b1+a1_2*b3_2*b1_b4+b2_2*a1_a3*b1_b4+b2_2*b4_2*a1-2*b4_2*b2_b3-b1_3*b4*a2_a4-b1_2*a2_a3*b2_b4+3*b4*a3_b1*b2_b3+b4_3*b1-2*b1_2*a1_a3*b3_b4-a1_a2*b1_b2*b3_b4-2*b3_2*b4*a2_b1+b2_2*b4*a2_b3-b3_2*b4*a1_b2-a1_2*b4_2*b1_b2+b1_2*a1_a4*b2_b4+b3_3*b4+b1_2*b4_2*a1_a2-b2_3*a3_b4+a2_2*b1_2*b3_b4-b2_2*b4*a4_b1)*x7+(-b3_4-a2_2*b1_2*b3_2-2*b4_2*b1_b3-a4_2*b1_4-b2_4*a4+b3_3*a1_b2+3*b3_2*b2_b4+2*b3_3*a2_b1+b2_3*a2_b4+b2_3*a3_b3-b2_2*a1_a2*b1_b4+b1_2*a2_a3*b2_b3-3*b1_2*b4*a4_b2-3*b1_2*a1_a4*b2_b3-2*b4*a2_b1*b2_b3+2*b1_3*b3*a2_a4-b1_2*b2_2*a2_a4-a3_2*b1_3*b3+b3_2*a1_a2*b1_b2-b2_2*b3_2*a2-a1_2*b3_3*b1-a1_2*b1_2*b4_2+b1_2*b4_2*a2+a2_2*b1_2*b2_b4+2*b1_3*b4*a1_a4+b2_3*b1*a1_a4+2*b4_2*b2*a1_b1-b3_2*b4*a1_b1-2*b2_2*b4*a1_b3+2*a1_2*b1_b2*b3_b4-b1_3*b4*a2_a3-b2_2*a1_a3*b1_b3-b1_2*a1_a2*b3_b4+b1_3*b2*a3_a4-3*b3_2*b2*a3_b1+3*b1_2*b4*a3_b3+4*b2_2*b3*a4_b1-2*b1_2*b3_2*a4+2*b1_2*b3_2*a1_a3-b2_2*b4_2)*x8;

    float num2 = (-a2_2*b4_4+b4_4*a4-b4_4*a1_a3+2*b4_3*b3*a2_a3+a4_3*b1_2*b2_b4-a4_2*b3_2*b2_b4-b3_2*b4_2*a2_a4-a3_3*b4_2*b1_b2-b4_3*a1_a2*a4_b1+a3_2*b4_3*a1_b1+b2_2*a4_2*b4_2-a3_2*b3_2*b4_2+a2_3*b4_3*b2+a3_2*b4_3*b2+a1_2*b4_4*a2-a2_2*b4_3*a1_b3+b2_3*a4_2*a2_b4+b3_3*b4*a3_a4-b4_3*b1*a3_a4-b4_2*a3_a4*b2_b3+2*a4_2*b4_2*b1_b3-b3_3*a1_a2*a4_b4-2*b4_3*a1_a2*a3_b2+3*b4_2*b2*a2_a3*a4_b1+a2_2*b3_2*b4*a4_b2-a4_2*b4_2*b2*a1_b1+a4_2*b3_2*b4*a1_b1+b3_2*b4_2*a3*a1_a2+3*b4_2*b3*a1_a2*a4_b2-2*b4_2*b3*a1_a3*a4_b1-2*b2_2*a2_2*b4_2*a4+b2_2*a3_2*b4_2*a2-2*a4_2*b4*a2_b1*b2_b3+a3_2*b4*a4_b1*b2_b3-b2_2*b4*a2_a3*a4_b3-a4_2*b2_2*b4*a3_b1-a2_2*b4_2*b3*a3_b2)*x1+(a2_2*b4_3*b3-b4_3*a4_b3+b4_3*b2*a1_a4-b4_4*a1_a2-3*b4_2*b1_2*a4*a2_a3+2*b4_2*a2_2*b2*a4_b1-a2_2*b3_2*b4*a4_b1+b4*a2_a3*a4_b1*b2_b3-a4_2*b4*a1_b1*b2_b3+b3_2*b4*a1_a3*a4_b1-b4_2*b3*a1_a2*a4_b1+2*b4_2*a4_2*b1_2*a1-a3_2*b1_2*b4*a4_b3-b4_2*a3_2*b3*a1_b1-a4_2*b2_2*b4*a2_b1-a3_2*b4_2*b2*a2_b1+2*a4_2*b1_2*b4*a2_b3+b4_2*a2_2*b3*a3_b1+a4_2*b1_2*b4*a3_b2+b4_4*a3+a3_2*b4_2*b2_b3+2*b4_3*b1*a2_a4-b4_3*a1_2*a4_b1-a4_3*b1_3*b4-2*a4_2*b4_2*b1_b2+b4_2*a3_3*b1_2-b4_3*a2_3*b1-2*a3_2*b4_3*b1+3*b4_2*a3_a4*b1_b3-a4_2*b3_2*b1_b4-b3_2*a3_a4*b2_b4+a4_2*b2_2*b3_b4-2*b4_2*a2_a4*b2_b3+2*b4_3*a1_a2*a3_b1-b3_2*b4_2*a2_a3+b3_3*b4*a2_a4)*x2+(a3_2*b4_2*b2*a1_b1+a4_2*b2_2*b4*a1_b1-2*b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3-b4*a1_a3*a4_b1*b2_b3+b4_3*b1*a1_a4-a4_2*b1_2*b4_2+b3_2*b4_2*a4-b4_3*a4_b2-b4_3*a3_b3+b3_2*b4*a1_a2*a4_b1+b1_2*b4_2*a4*a1_a3-a2_2*b4_3*b2-a1_2*b4_3*a3_b1-b4_2*b3*a1_a2*a3_b1-a4_2*b2_3*b4-a3_2*b2_2*b4_2+a2_2*b4_3*a1_b1+b4_4*a2-b4_3*b1*a2_a3+a1_2*b4_2*b3*a4_b1-b3_2*a3_a4*b1_b4+b4_2*a2_a3*b2_b3-b4_2*a1_a4*b2_b3+2*b2_2*b4_2*a2_a4+b2_2*a3_a4*b3_b4-b3_2*a2_a4*b2_b4-b4_2*a3_a4*b1_b2+b4_3*b2*a1_a3+2*a4_2*b1_b2*b3_b4+a3_2*b4_2*b1_b3)*x3+(b1_2*b4_2*a3_a4-b4_2*a1_a3*b2_b3+b3_2*a1_a4*b2_b4-b2_2*b4_2*a1_a4+a2_2*b4_3*b1-b4_3*a3_b2-b3_3*a4_b4-b4_3*a2_b3-a1_2*b3_2*b4*a4_b1-b4_3*a4_b1+b1_2*b4*a1_a3*a4_b3-b1_2*a3_2*b4_2*a1+a1_2*b4_2*b3*a3_b1+2*b4_2*b3*a4_b2+b3_2*b4_2*a3+b3_2*a2_a4*b1_b4+a4_2*b2_2*b1_b4-a4_2*b1_2*b3_b4-a3_a4*b1_b2*b3_b4-b4_2*a1_a4*b1_b3-b4_2*a2_a3*b1_b3-2*b4_2*a2_a4*b1_b2+a3_2*b4_2*b1_b2-a1_2*b4_3*a2_b1+b4_3*b1*a1_a3+a1_2*b4_2*b2*a4_b1+b4_3*b2*a1_a2+b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b4*a1_b2)*x4+(b4_3*a1_b3-2*b4_3*b1*a1_a2+b1_2*a3_a4*b3_b4-b4_4-a3_2*b1_2*b4_2-2*a1_2*b1_2*b4_2*a4+a1_3*b4_3*b1-b2_2*b4_2*a4-b2_2*a1_a4*b3_b4-2*b4_2*b3*a4_b1-a1_2*b4_3*b2-b1_2*b4*a1_a2*a4_b3-a1_2*b4_2*b2*a3_b1+a4_2*b1_3*a1_b4+b4_3*a2_b2+b3_2*b4*a4_b2+b1_2*b4_2*a3*a1_a2-a4_2*b1_2*b2_b4+2*b4_3*a3_b1+b2_2*b4_2*a1_a3+3*b4_2*a1_a4*b1_b2+b1_2*b4_2*a2_a4-b4_2*b3*a3_b2+a1_2*b4*a4_b1*b2_b3)*x5+(-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+2*b4_2*a1_a2*b1_b3-b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4-b4_3*a2_b1+2*b4_2*b2*a4_b1+b1_2*b4_2*a2_a3-b2_2*b4*a4_b3-2*b4_2*a1_a3*b1_b2+b2_2*b4_2*a3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-b1_2*a2_a4*b3_b4-b4_2*b3*a3_b1+b3_2*b4*a4_b1+a1_2*b1_2*b4*a4_b3+b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+a1_2*b1_2*b4_2*a3-b1_2*a2_2*b4_2*a1+a1_2*b4_2*b2*a2_b1+b4_3*b3+a4_2*b1_3*b4-b2_2*b4_2*a1_a2)*x6+(-b1_2*b4_2*a1_a3+a3_2*b1_3*a1_b4+3*a1_a3*b1_b2*b3_b4+b2_2*a1_a2*b3_b4-2*b3_2*a1_a2*b1_b4+a1_2*b2_2*b4_2-b1_3*a1_a2*a4_b4-a1_2*b3_2*b2_b4-a1_3*b4_2*b1_b2-b2_3*b4*a1_a3+a1_3*b3_2*b1_b4+b2_3*a4_b4+b3_3*a1_b4-2*b2_2*a1_a4*b1_b4-2*b4*a4_b1*b2_b3+b4_2*a1_a2*b1_b2-b2_2*b4_2*a2+b1_2*a2_a4*b2_b4-b4_2*b3*a1_b2+2*b4_2*b3*a2_b1+2*b1_2*a1_a4*b3_b4-b1_3*b4*a3_a4-b4_2*b2*a3_b1-b3_2*b4_2-2*a1_2*b1_2*b4*a3_b3+a1_2*b1_2*b4*a4_b2+a1_2*b1_2*b4_2*a2-a1_2*b4*a2_b1*b2_b3+a2_2*b1_2*b4*a1_b3+a1_2*b2_2*b4*a3_b1-b1_2*b4*a1_a2*a3_b2+b4_3*b2+b1_2*b4_2*a4-a2_2*b1_2*b4_2)*x7+(a3_2*b1_3*b4+2*b1_2*b4_2*a1_a2+b3_3*b4-2*b4_2*b2_b3-b2_3*a3_b4-b2_4*a1_a4-b3_4*a1-b1_2*b2_2*a4*a1_a2-3*a1_2*b1_2*b3*a4_b2+2*a1_2*b1_2*b3_2*a3-b1_2*a2_2*b3_2*a1-a1_2*b2_2*b4*a2_b1+a1_2*b3_2*b2*a2_b1-a1_2*b1_2*b4*a2_b3+a2_2*b1_2*b4*a1_b2-a1_2*b2_2*b3*a3_b1+b1_2*b3*a1_a2*a3_b2+b2_2*a1_a3*b1_b4+3*b4*a3_b1*b2_b3-b1_3*b4*a2_a4+b1_2*b4*a4_b3+a1_2*b4_2*b1_b2-2*b1_2*b4_2*a3-b1_2*a2_a3*b2_b4-b4_2*b3*a1_b1+2*b3_2*b4*a1_b2+a2_2*b1_2*b3_b4-2*b3_2*b4*a2_b1+b1_2*a1_a3*b3_b4-3*a1_a2*b1_b2*b3_b4-2*b1_2*a1_a4*b2_b4+b2_2*b4*a2_b3-b2_2*b4*a4_b1+b4_3*b1+2*b1_3*a1_a2*a4_b3-3*b3_2*a1_a3*b1_b2+a1_2*b2_3*a4_b1+b2_3*b3*a1_a3+b1_3*a1_a3*a4_b2-b1_4*a4_2*a1+a1_2*b3_3*b2-a1_3*b3_3*b1-b1_3*a1_a2*a3_b4-a1_3*b1_2*b4_2-a3_2*b1_3*a1_b3+2*a1_3*b1_b2*b3_b4+2*b3_3*b1*a1_a2+b2_3*b4*a1_a2-b2_2*b3_2*a1_a2-2*b1_2*b3_2*a1_a4+4*b2_2*a1_a4*b1_b3+2*a1_2*b1_3*a4_b4-2*a1_2*b2_2*b3_b4)*x8;

    float num3 = (-b4_4*a2_a3-b4_4*a1_a4+b4_2*b3*a2_a3*a4_b1-a4_2*b4_2*b3*a1_b1+b3_2*a3_2*b4_2*a1-2*b2_2*b4_2*a4*a2_a3+a3_2*b3_2*b4*a4_b1+b3_2*b4*a2_a3*a4_b2+3*b4_2*b3*a1_a3*a4_b2-a4_2*b3_2*b4*a2_b1+2*a4_2*b4_2*b2*a2_b1-a4_2*b4*a3_b1*b2_b3-a3_2*b4_2*b3*a2_b2-a3_2*b2_2*b4*a4_b3+a4_3*b1_2*b3_b4-2*a4_2*b4_2*b2_b3+a2_2*b4_3*a3_b2-b4_3*a1_a2*a3_b3-a2_2*b4_3*a4_b1-b4_3*a1_a3*a4_b1+2*b4_3*b2*a3_a4-2*b3_2*b4_2*a3_a4+a4_2*b3_3*b4-2*a3_2*b4_3*a1_b2+b2_2*a3_3*b4_2+a3_2*b4_3*b3+a4_2*b4_3*b1+a1_2*b4_4*a3+a4_2*b2_3*a3_b4-a3_3*b4_2*b1_b3-b3_3*a1_a3*a4_b4+b4_3*b3*a2_a4-a4_3*b2_2*b1_b4+a3_2*b4_3*a2_b1)*x1+(b4_4*a4-b4_4*a1_a3+b4_3*b3*a2_a3+a4_3*b1_2*b2_b4-a4_2*b3_2*b2_b4-a3_3*b4_2*b1_b2+b4_3*a1_a2*a4_b1+a3_2*b4_3*a1_b1+b2_2*a4_2*b4_2-a3_2*b3_2*b4_2+a3_2*b4_3*b2+b3_3*b4*a3_a4-b4_3*b1*a3_a4-b4_2*a3_a4*b2_b3+2*a4_2*b4_2*b1_b3+2*b4_2*b2*a2_a3*a4_b1-a4_2*b4_2*b2*a1_b1+a4_2*b3_2*b4*a1_b1-2*b4_2*b3*a1_a3*a4_b1+a3_2*b4*a4_b1*b2_b3-a4_2*b2_2*b4*a3_b1-b4_3*b2*a2_a4-a2_2*b4_3*a3_b1-b3_2*b4*a2_a3*a4_b1-b1_2*a4_2*b4_2*a2+a3_2*b4_2*b3*a2_b1)*x2+(b4_3*b1*a2_a4-a4_3*b1_3*b4+a4_2*b1_2*b4*a3_b2-b4_3*a1_2*a4_b1-b3_2*a3_a4*b2_b4+b4_4*a3+a3_2*b4_2*b2_b3-2*a3_2*b4_3*b1+b4_3*a1_a2*a3_b1+3*b4_2*a3_a4*b1_b3+b4_2*a3_3*b1_2-b4_3*b2*a2_a3-2*a4_2*b4_2*b1_b2+2*b4_2*a4_2*b1_2*a1-a4_2*b4*a1_b1*b2_b3-2*b4_2*b1_2*a4*a2_a3+a4_2*b2_2*b3_b4+a4_2*b1_2*b4*a2_b3-b4_3*a4_b3-b4_2*a3_2*b3*a1_b1+b4_3*b2*a1_a4+b3_2*b4*a1_a3*a4_b1-a4_2*b3_2*b1_b4-a3_2*b1_2*b4*a4_b3)*x3+(a3_2*b4_2*b2*a1_b1+a4_2*b2_2*b4*a1_b1-b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3-b4*a1_a3*a4_b1*b2_b3+b4_3*b1*a1_a4-a4_2*b1_2*b4_2+b3_2*b4_2*a4-b4_3*a4_b2-b4_3*a3_b3+b1_2*b4_2*a4*a1_a3-2*b4_2*a2_a4*b1_b3-a1_2*b4_3*a3_b1-a4_2*b2_3*b4-a3_2*b2_2*b4_2+a2_2*b1_2*b4_2*a4-a3_2*b1_2*b4_2*a2+b4_3*b1*a2_a3+a1_2*b4_2*b3*a4_b1+b1_2*b4*a2_a3*a4_b3-a4_2*b1_2*b4*a2_b2-b3_2*a3_a4*b1_b4-b4_2*a1_a4*b2_b3+b2_2*b4_2*a2_a4+b2_2*a3_a4*b3_b4-b4_2*a3_a4*b1_b2+b4_3*b2*a1_a3+2*a4_2*b1_b2*b3_b4+a3_2*b4_2*b1_b3)*x4+(a2_2*b1_2*b4_2*a3+b1_2*b4_2*a3_a4-b4_2*a1_a3*b2_b3+b3_2*a1_a4*b2_b4-b2_2*b4_2*a1_a4-b4_3*a3_b2+b2_2*b4_2*a2_a3-b3_3*a4_b4-a1_2*b3_2*b4*a4_b1-b4_3*a4_b1+b1_2*b4*a1_a3*a4_b3-b1_2*a3_2*b4_2*a1+a1_2*b4_2*b3*a3_b1-b4_2*b2*a1_a2*a3_b1+2*b4_2*b3*a4_b2+b3_2*b4_2*a3+2*b3_2*a2_a4*b1_b4+a4_2*b2_2*b1_b4-a4_2*b1_2*b3_b4-a3_a4*b1_b2*b3_b4-b4_2*a1_a4*b1_b3-2*b4_2*a2_a3*b1_b3+a3_2*b4_2*b1_b2-b2_2*a2_a4*b3_b4+b1_3*a4_2*a2_b4+b4_3*b1*a1_a3+a1_2*b4_2*b2*a4_b1-b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b4*a1_b2+b4*a1_a2*a4_b1*b2_b3-a2_2*b1_2*b4*a4_b3)*x5+(b2_2*b4_2*a1_a3+a1_3*b4_3*b1-b2_2*a1_a4*b3_b4+a4_2*b1_3*a1_b4-a3_2*b1_2*b4_2-b4_4+a2_2*b4_2*b2*a1_b1+a2_2*b1_2*b4*a4_b2-a1_2*b4_2*b3*a2_b1-b2_2*b4*a1_a2*a4_b1+2*b4_3*a2_b2+2*b4_3*a3_b1+b4_3*a1_b3+2*b1_2*b4_2*a2_a4+3*b4_2*a1_a4*b1_b2+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+b1_2*a3_a4*b3_b4-3*b4_3*b1*a1_a2-a4_2*b1_2*b2_b4-b4_2*b3*a3_b2+2*b1_2*b4_2*a3*a1_a2-2*a1_2*b1_2*b4_2*a4-a1_2*b4_2*b2*a3_b1+a1_2*b4*a4_b1*b2_b3-a1_2*b4_3*b2-b2_2*b4_2*a4-2*a2_a4*b1_b2*b3_b4-b4_2*a2_a3*b1_b2-a2_3*b1_2*b4_2-a2_2*b2_2*b4_2-b3_2*b4_2*a2+2*a2_2*b4_2*b1_b3+b4_2*a1_a2*b2_b3-b1_3*a2_a3*a4_b4+b2_3*b4*a2_a4)*x6+(-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+3*b4_2*a1_a2*b1_b3-b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4+b2_2*b4*a1_a2*a3_b1-a2_2*b1_2*b4*a3_b2+a1_2*b3_2*b4*a2_b1-2*b1_2*b4*a1_a2*a3_b3-a2_2*b4*a1_b1*b2_b3+2*b4_2*b2*a4_b1-b1_2*b4_2*a2_a3-b2_2*b4*a4_b3-2*b4_2*a1_a3*b1_b2+b2_2*b4_2*a3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-b4_2*b3*a3_b1+b3_2*b4*a4_b1+b3_3*a2_b4+a1_2*b1_2*b4*a4_b3+2*b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+a1_2*b1_2*b4_2*a3+b4_3*b3+3*a2_a3*b1_b2*b3_b4+a2_3*b1_2*b3_b4+a2_2*b2_2*b3_b4-b2_2*a2_a4*b1_b4-b2_3*b4*a2_a3-a2_2*b1_3*a4_b4-2*a2_2*b3_2*b1_b4-2*b4_2*b3*a2_b2-b3_2*a1_a2*b2_b4+b1_3*a3_2*a2_b4+a4_2*b1_3*b4)*x7+(-b1_2*b4_2*a1_a3+a3_2*b1_3*a1_b4+3*a1_a3*b1_b2*b3_b4-b2_2*a1_a2*b3_b4-3*b3_2*a1_a2*b1_b4+a1_2*b2_2*b4_2+b1_3*a1_a2*a4_b4-a1_2*b3_2*b2_b4-a1_3*b4_2*b1_b2-b2_3*b4*a1_a3+a1_3*b3_2*b1_b4-a2_2*b2_2*b4*a1_b1+a2_2*b3_2*b2*a1_b1-a2_2*b1_2*b2_2*a4+2*b1_2*b3_2*a3*a1_a2+a2_2*b1_2*b3*a3_b2-3*b1_2*b3*a1_a2*a4_b2-b2_2*b3*a1_a2*a3_b1+b2_3*a4_b4+b3_3*a1_b4-2*b2_2*a1_a4*b1_b4-2*b4*a4_b1*b2_b3+3*b4_2*a1_a2*b1_b2-2*b2_2*b4_2*a2-2*b1_2*a2_a4*b2_b4-b4_2*b3*a1_b2+2*b1_2*a1_a4*b3_b4-b1_3*b4*a3_a4-b4_2*b2*a3_b1-b3_4*a2-b2_4*a2_a4-b3_2*b4_2-2*a1_2*b1_2*b4*a3_b3+a1_2*b1_2*b4*a4_b2+a1_2*b4*a2_b1*b2_b3+a1_2*b2_2*b4*a3_b1-b1_2*b4*a1_a2*a3_b2+b4_3*b2+b1_2*b4_2*a4+3*b1_2*a2_a3*b3_b4+b1_3*a2_a3*a4_b2+2*a2_2*b1_3*a4_b3-3*b3_2*a2_a3*b1_b2+a2_3*b1_2*b2_b4-a2_2*b1_3*a3_b4+b2_3*a1_a2*a4_b1-a4_2*b1_4*a2+a2_2*b2_3*b4-a2_3*b1_2*b3_2-a2_2*b2_2*b3_2+2*a2_2*b3_3*b1+b2_3*b3*a2_a3+b3_3*b2*a1_a2-2*b1_2*b3_2*a2_a4+4*b2_2*a2_a4*b1_b3-2*a2_2*b1_b2*b3_b4-a1_2*b3_3*a2_b1+3*b3_2*b4*a2_b2-a3_2*b1_3*a2_b3)*x8;

    float num4 = (b4_4*a1_2*a4+a3_2*b2_2*b4_2*a4-2*b4_2*a4_2*b2_2*a2-b4_2*a4_2*b3_2-b4_4*a2_a4-b4_2*b3*a2_a3*a4_b2+3*a4_2*b4_2*b3*a1_b2+b3_2*b4_2*a4*a1_a3+b4_3*b3*a3_a4-b2_2*a4_2*b4*a3_b3+b4_3*a4_2*b2-b4_2*a3_2*b3*a4_b1-2*a4_2*b4_3*a1_b1-2*b4_3*a1_a3*a4_b2-b4_3*a1_a2*a4_b3+b4_3*a2_a3*a4_b1+b4_2*a4_2*b2*a3_b1+b3_2*a4_2*b4*a3_b1+b2_3*a4_3*b4+b3_2*a4_2*b4*a2_b2+b4_2*b1_2*a4_3-2*a4_3*b1_b2*b3_b4+b4_3*a2_2*a4_b2-a4_2*b3_3*a1_b4)*x1+(2*a4_2*b4_2*b2*a2_b1-a4_2*b3_2*b4*a2_b1-b4_4*a1_a4+a4_2*b3_3*b4+a4_2*b4*a3_b1*b2_b3+b4_3*b2*a3_a4-a3_2*b4_2*b2*a4_b1-a4_3*b2_2*b1_b4-a2_2*b4_3*a4_b1-a4_2*b4_2*b3*a1_b1+a4_2*b4_3*b1+a4_3*b1_2*b3_b4+b4_2*b3*a2_a3*a4_b1+b4_3*b3*a2_a4-2*a4_2*b4_2*b2_b3-b1_2*a4_2*b4_2*a3-b3_2*b4_2*a3_a4+b4_3*a1_a3*a4_b1)*x2+(a4_3*b1_2*b2_b4+b4_3*a1_a2*a4_b1-a4_2*b4_2*b2*a1_b1+b4_4*a4+b4_2*a3_a4*b2_b3+a4_2*b3_2*b4*a1_b1-b4_2*b3*a1_a3*a4_b1+a3_2*b1_2*b4_2*a4+2*a4_2*b4_2*b1_b3-a4_2*b3_2*b2_b4-b1_2*a4_2*b4_2*a2-b4_3*b2*a2_a4-b1_2*a4_2*b4*a3_b3+b2_2*a4_2*b4_2-2*b4_3*b1*a3_a4)*x3+(-b4_3*a1_2*a4_b1-a4_2*b4*a1_b1*b2_b3-2*a4_2*b4_2*b1_b2-b4_2*b1_2*a4*a2_a3+2*b4_2*a4_2*b1_2*a1+b4_3*b2*a1_a4-b4_3*a4_b3-a4_2*b3_2*b1_b4-a4_3*b1_3*b4+b4_2*b2*a1_a3*a4_b1+b4_2*a3_a4*b1_b3+b4_3*b1*a2_a4-b2_2*b4_2*a3_a4+a4_2*b1_2*b4*a2_b3+a4_2*b2_2*b3_b4)*x4+(-a4_2*b1_2*b4_2+a4_2*b2_2*b4*a1_b1+a2_2*b1_2*b4_2*a4+2*a4_2*b1_b2*b3_b4+b4_3*b1*a1_a4-a4_2*b2_3*b4+b4_2*a3_a4*b1_b2-b4_3*a4_b2-b1_2*b4_2*a4*a1_a3+b1_3*a4_2*a3_b4-a4_2*b1_2*b4*a2_b2-2*b4_2*a2_a4*b1_b3+b3_2*b4_2*a4+a1_2*b4_2*b3*a4_b1+b2_2*b4_2*a2_a4-b4_2*a1_a4*b2_b3-b4_2*b2*a1_a2*a4_b1-a4_2*b1_2*b4*a1_b3)*x5+(-3*a3_a4*b1_b2*b3_b4-b4_3*a4_b1-b1_2*b4_2*a4*a1_a2-a4_2*b1_2*b3_b4+b4*a1_a2*a4_b1*b2_b3-b4_2*a1_a4*b1_b3-b3_3*a4_b4+2*b1_2*b4_2*a3_a4+2*b1_2*b4*a1_a3*a4_b3+b1_3*a4_2*a2_b4-b2_2*a2_a4*b3_b4+b3_2*a1_a4*b2_b4-a4_2*b1_2*b4*a1_b2+b1_2*b4*a2_a3*a4_b2-a1_2*b3_2*b4*a4_b1-a2_2*b1_2*b4*a4_b3-b2_2*b4*a1_a3*a4_b1+2*b4_2*b3*a4_b2+b2_3*b4*a3_a4-b2_2*b4_2*a1_a4+2*b3_2*a2_a4*b1_b4+a1_2*b4_2*b2*a4_b1-a3_2*b1_3*a4_b4+a4_2*b2_2*b1_b4)*x6+(3*a3_2*b1_b2*b3_b4+b2_2*a2_a3*b3_b4+a3_3*b1_3*b4-2*b3_2*a2_a3*b1_b4-a3_2*b2_3*b4-b3_2*a1_a3*b2_b4-b2_2*a3_a4*b1_b4+2*b2_2*b4_2*a1_a3+a1_3*b4_3*b1-b2_2*a1_a4*b3_b4+a4_2*b1_3*a1_b4-3*a3_2*b1_2*b4_2-b4_4+a2_2*b4_2*b2*a1_b1+a2_2*b1_2*b4*a4_b2-a1_2*b4_2*b3*a2_b1-b2_2*b4*a1_a2*a4_b1+2*b4_3*a2_b2+3*b4_3*a3_b1+b4_3*a1_b3+2*b1_2*b4_2*a2_a4+3*b4_2*a1_a4*b1_b2+b3_2*b4*a4_b2-2*b4_2*b3*a4_b1+2*b1_2*a3_a4*b3_b4-3*b4_3*b1*a1_a2-a4_2*b1_2*b2_b4+b4_2*a1_a3*b1_b3-3*b4_2*b3*a3_b2+b3_3*a3_b4+a3_2*b2_2*b4*a1_b1+b1_2*b4*a1_a3*a4_b2+a1_2*b3_2*b4*a3_b1-a3_2*b1_2*b4*a2_b2-b4*a1_a2*a3_b1*b2_b3-2*a3_2*b1_2*b4*a1_b3+b1_2*a2_2*b4*a3_b3+3*b1_2*b4_2*a3*a1_a2-2*a1_2*b1_2*b4_2*a4-2*a1_2*b4_2*b2*a3_b1+a1_2*b4*a4_b1*b2_b3-a1_2*b4_3*b2-b2_2*b4_2*a4-2*a2_a4*b1_b2*b3_b4-b4_2*a2_a3*b1_b2-a2_3*b1_2*b4_2-a2_2*b2_2*b4_2-b3_2*b4_2*a2+2*a2_2*b4_2*b1_b3+b4_2*a1_a2*b2_b3-2*b1_3*a2_a3*a4_b4+b2_3*b4*a2_a4)*x7+(-a1_2*b3_3*a3_b1+3*a3_2*b1_2*b3_b4-2*b2_2*a1_a3*b3_b4+2*b1_3*a2_a3*a4_b3-a3_3*b1_3*b3-b1_4*a4_2*a3+a3_2*b2_3*b3-2*b1_2*b3_2*a3_a4+b3_3*b2*a1_a3+a3_2*b1_3*a4_b2-3*a3_2*b3_2*b1_b2-b3_2*a1_a3*b1_b4+4*b2_2*a3_a4*b1_b3-b2_2*b3_2*a2_a3+2*b3_3*b1*a2_a3-3*b1_2*a3_a4*b2_b4+b2_3*a1_a3*a4_b1+3*b3_2*b4*a3_b2-b3_2*b4_2*a1+a1_2*b4_2*b2_b3-a1_3*b4_2*b1_b3+3*b4_2*a1_a2*b1_b3+b1_3*a1_a3*a4_b4+b2_3*b4*a1_a4+a1_2*b3_2*b4*a2_b1-3*b1_2*b4*a1_a2*a3_b3-a2_2*b4*a1_b1*b2_b3+2*b4_2*b2*a4_b1-b2_2*b4*a4_b3-b1_2*b4_2*a1_a4-a1_a4*b1_b2*b3_b4-3*b4_2*b3*a3_b1+b3_2*b4*a4_b1+b3_3*a2_b4-b2_4*a3_a4-b3_4*a3-a3_2*b2_2*b3*a1_b1+b3_2*b2*a1_a2*a3_b1-b1_2*a2_2*b3_2*a3+2*a3_2*b1_2*b3_2*a1-3*b1_2*b3*a1_a3*a4_b2+a3_2*b1_2*b3*a2_b2-b1_2*b2_2*a4*a2_a3+2*a1_2*b4*a3_b1*b2_b3+a1_2*b1_2*b4*a4_b3+2*b1_2*b4*a1_a2*a4_b2-a1_2*b2_2*b4*a4_b1+b4_3*b3+a2_a3*b1_b2*b3_b4+a2_3*b1_2*b3_b4+a2_2*b2_2*b3_b4-b2_2*a2_a4*b1_b4-a2_2*b1_3*a4_b4-2*a2_2*b3_2*b1_b4-2*b4_2*b3*a2_b2-b3_2*a1_a2*b2_b4+a4_2*b1_3*b4)*x8;

    float num5 = x8;

    float num6 = (2*b4_4*a3_b1+b2_2*b4_2*b3*a2_a3-b3_2*b4_2*b1*a2_a3-b2_2*b3_2*b4*a2_a4-b4_5-3*b2_2*b4_2*b3*a1_a4-3*b4_3*b3*a4_b1+4*b3_2*b4_2*a4_b2-a4_2*b2_4*b4-a3_2*b2_3*b4_2+b3_3*b4_2*a3-2*b2_2*b4_3*a4-a2_2*b2_2*b4_3-a3_2*b1_2*b4_3-b3_2*b4_3*a2-a1_2*b4_4*b2+2*b2_2*b4_3*a1_a3+b4_4*a1_b3+2*b4_4*a2_b2-a4_2*b1_2*b3_2*b4-2*a4_2*b1_2*b4_2*b2-3*b4_3*b3*a3_b2+2*b1_2*b4_2*b3*a3_a4-b2_2*b4_2*b1*a3_a4-b4_3*a2_a3*b1_b2+3*b4_3*a1_a4*b1_b2+a2_2*b4_3*b1_b3+b3_3*a2_a4*b1_b4-b3_2*b4_2*b2*a1_a3-2*b3_2*b4*a3_a4*b1_b2-2*b4_2*b3*a2_a4*b1_b2+2*a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+3*a4_2*b2_2*b4*b1_b3-b4_4*b1*a1_a2+b4_3*a1_a2*b2_b3+b3_3*a1_a4*b2_b4+b2_3*a3_a4*b3_b4+2*b2_3*b4_2*a2_a4+b1_2*b4_3*a2_a4)*x1+(a3_2*b2_2*b4_2*b1-2*b1_2*b4_3*a1_a4-b4_3*a1_a2*b1_b3-2*b4_3*a1_a3*b1_b2+a4_2*b2_3*b1_b4+a2_2*b4_3*b1_b2+b3_2*b4_2*b1*a1_a3-a3_2*b1_2*b4_2*b3+a4_2*b1_3*b4_2-b4_4*a2_b1-2*a4_2*b1_2*b4*b2_b3-b4_2*b3*a2_a3*b1_b2+3*b4_2*b3*a1_a4*b1_b2+a1_2*b4_4*b1-b2_2*b4*a3_a4*b1_b3+b1_2*b4_3*a2_a3+b3_2*b4*a2_a4*b1_b2-2*b2_2*b4_2*b1*a2_a4+b4_3*b3*a3_b1-b3_2*b4_2*a4_b1+b4_3*b2*a4_b1-b3_3*a1_a4*b1_b4+b1_2*b3_2*b4*a3_a4+b1_2*b4_2*b2*a3_a4)*x2+(-a4_2*b1_2*b2_2*b4+b1_2*b4_2*b3*a2_a3-2*b4_2*a4_b1*b2_b3-a3_2*b1_2*b4_2*b2-a2_2*b1_2*b4_3+a4_2*b1_3*b3_b4+b3_3*b4*a4_b1-b1_2*b3_2*b4*a2_a4-b1_2*b4_2*b3*a1_a4+b1_2*b4_3*a4+b1_2*b4_3*a1_a3+2*b1_2*b4_2*b2*a2_a4+b4_3*b2*a3_b1+b1_2*b4*a3_a4*b2_b3-b4_4*a1_b1-b3_2*b4_2*a3_b1+b4_3*b3*a2_b1-b1_3*b4_2*a3_a4)*x3+(-b4_3*b2*a2_b1+b4_4*b1-b1_2*b4_2*b3*a1_a3+2*b1_2*b4_2*a4_b3+b4_2*a3_b1*b2_b3+a4_2*b1_3*b2_b4+b1_2*b3_2*b4*a1_a4+b1_2*b4_3*a1_a2-2*b1_2*b4_3*a3-b1_3*b4_2*a2_a4-b3_2*a4_b1*b2_b4-b1_3*a3_a4*b3_b4+a3_2*b1_3*b4_2+b2_2*b4_2*a4_b1-b1_2*b4_2*b2*a1_a4)*x4+(-a4_2*b1_4*b4-b1_2*b3_2*a4_b4-2*b1_2*b4_2*a4_b2-b2_2*b4_2*a3_b1+b1_2*b4_2*b2*a1_a3-b1_3*b4_2*a2_a3-b4_3*b1_b3+b1_2*b4_2*a3_b3-b1_2*b4*a1_a4*b2_b3-a1_2*b1_2*b4_3+b1_2*b4_3*a2+b1_3*a2_a4*b3_b4+b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+b4_3*b2*a1_b1)*x5+(b1_2*b4_3*a1-b1_2*b4_2*b2*a1_a2+b1_2*b2_2*b4*a1_a4+b1_2*b4_2*a3_b2-b1_3*a1_a4*b3_b4-2*b1_2*b4_2*a2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3+a1_2*b1_2*b4_2*b3+2*b1_2*a4_b2*b3_b4-b2_3*b4*a4_b1-b4_2*a1_b1*b2_b3-b1_3*b4_2*a4-b1_3*a2_a4*b2_b4+a2_2*b1_3*b4_2-b4_3*b1_b2+b3_2*b4_2*b1+b1_4*b4*a3_a4)*x6+(-a2_2*b1_3*b3_b4-b1_2*b4_2*a1_b3-a1_2*b1_2*b3_2*b4+a1_2*b1_2*b4_2*b2-a3_2*b1_4*b4+2*b1_3*b4_2*a3-b1_3*b4*a4_b3+b2_3*b4*a3_b1+b1_2*b4*a1_a2*b2_b3+b1_2*b2_2*a4_b4-b3_3*b1_b4+b1_4*b4*a2_a4+2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a1_a3+2*b1_2*b3_2*a2_b4-b4_2*b2_2*a1_b1-b1_3*b4_2*a1_a2-b2_2*a2_b1*b3_b4+b3_2*a1_b1*b2_b4+b1_3*a2_a3*b2_b4-b1_3*a1_a4*b2_b4-3*b1_2*a3_b2*b3_b4+2*b1_3*a1_a3*b3_b4-b1_2*b4_3)*x7+(a4_2*b1_5+b3_4*b1+b2_4*a4_b1+b1_4*b4*a2_a3-2*b1_2*b4_2*a1_b2-b2_3*b3*a3_b1-2*b1_4*b3*a2_a4-b1_3*a2_a3*b2_b3+b1_3*a1_a2*b3_b4-b3_3*b2*a1_b1+b1_3*b2_2*a2_a4-3*b1_3*b4*a3_b3-2*b1_4*b4*a1_a4-b1_2*b2_3*a1_a4+3*b1_3*b4*a4_b2+a3_2*b1_4*b3-4*b1_2*b2_2*a4_b3+2*b1_3*b3_2*a4+a2_2*b1_3*b3_2-2*b1_2*b3_3*a2+a1_2*b1_2*b3_3+3*b1_2*b3_2*a3_b2-b1_3*b4_2*a2+a1_2*b1_3*b4_2+3*b1_3*a1_a4*b2_b3-b2_3*b4*a2_b1+b2_2*b3_2*a2_b1+2*b2_2*a1_b1*b3_b4+2*b1_2*a2_b2*b3_b4-3*b3_2*b4*b1_b2+b1_2*b3_2*a1_b4-a2_2*b1_3*b2_b4-2*b1_3*b3_2*a1_a3-b1_4*b2*a3_a4+2*b1_2*b4_2*b3+b2_2*b4_2*b1-2*a1_2*b1_2*b4*b2_b3+b1_2*b2_2*b3*a1_a3+b1_2*b2_2*b4*a1_a2-b1_2*b3_2*b2*a1_a2)*x8;

    float num7 = (-b4_4*a4_b1+b4_5*a1-b4_4*a3_b2+b4_3*b3*a4_b2+b1_2*b4_3*a3_a4+b3_2*b4_3*a1_a2-2*b4_3*a2_a3*b1_b3+3*b4_3*a1_a4*b1_b3-b4_4*b1*a1_a3-b3_3*b4_2*a1_a3-2*b4_3*a2_a4*b1_b2+a3_2*b4_3*b1_b2-a1_2*b4_4*b3+a2_2*b4_4*b1+b3_4*b4*a1_a4-b3_3*a3_a4*b1_b4-a4_2*b2_3*b3_b4-b3_3*a2_a4*b2_b4-a2_2*b4_3*b2_b3+2*b4_3*a1_a3*b2_b3+2*b2_2*b4_2*b3*a2_a4+b3_2*b4_2*b1*a2_a4-2*a4_2*b1_2*b4_2*b3-a3_2*b2_2*b4_2*b3+a4_2*b2_2*b4_2*b1+a3_2*b3_2*b4_2*b1+2*a4_2*b3_2*b4*b1_b2+b3_2*b4_2*b2*a2_a3+b2_2*b3_2*b4*a3_a4-3*b3_2*b4_2*b2*a1_a4-2*b4_2*b3*a3_a4*b1_b2)*x1+(2*b4_4*a3_b1-b3_2*b4_2*b1*a2_a3-b4_5-3*b4_3*b3*a4_b1+3*b3_2*b4_2*a4_b2+b3_3*b4_2*a3-b2_2*b4_3*a4-a3_2*b1_2*b4_3-b3_2*b4_3*a2+b4_4*a1_b3+b4_4*a2_b2-a4_2*b1_2*b3_2*b4-a4_2*b1_2*b4_2*b2-2*b4_3*b3*a3_b2+2*b1_2*b4_2*b3*a3_a4+b4_3*a1_a4*b1_b2+a2_2*b4_3*b1_b3+b3_3*a2_a4*b1_b4-b3_2*b4*a3_a4*b1_b2-2*b4_2*b3*a2_a4*b1_b2+a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+a4_2*b2_2*b4*b1_b3-b4_4*b1*a1_a2+b1_2*b4_3*a2_a4)*x2+(b4_3*b3*a3_b1-2*b1_2*b4_3*a1_a4+b2_2*b4_3*a3-b4_3*a1_a2*b1_b3+b3_2*b4_2*b1*a1_a3+2*b4_2*b3*a1_a4*b1_b2-b3_2*b4_2*a3_b2-b4_3*a1_a3*b1_b2-b3_3*a1_a4*b1_b4+a4_2*b1_3*b4_2-b3_2*b4_2*a4_b1+b3_3*b4*a4_b2-2*b2_2*b4_2*a4_b3+a1_2*b4_4*b1+b4_3*b3*a2_b2-a4_2*b1_2*b4*b2_b3+b1_2*b3_2*b4*a3_a4-a3_2*b1_2*b4_2*b3-b4_4*a2_b1+b1_2*b4_3*a2_a3-b4_4*a1_b2+2*b4_3*b2*a4_b1)*x3+(b4_3*b3*a2_b1+b4_4*b2-a2_2*b1_2*b4_3-b3_2*b4_2*a3_b1+a4_2*b1_3*b3_b4+b4_3*a1_a2*b1_b2+b2_2*b4_2*a3_b3+b1_2*b4_3*a1_a3-b2_2*b3_2*a4_b4-b4_3*b2*a3_b1-b2_2*b4_3*a2+b3_2*b4*a1_a4*b1_b2+b1_2*b4_2*b3*a2_a3-b1_2*b4_2*b3*a1_a4-b2_2*b4_2*b1*a1_a4+b2_3*b4_2*a4-b1_3*b4_2*a3_a4-b4_4*a1_b1+b1_2*b4_2*b2*a2_a4+b3_3*b4*a4_b1-b4_2*b3*a1_a3*b1_b2+b1_2*b4_3*a4-b1_2*b3_2*b4*a2_a4)*x4+(b1_2*b4*a2_a4*b2_b3-a1_2*b4_3*b1_b2+a3_2*b1_3*b4_2-b2_2*b4*a1_a4*b1_b3-b1_3*b4_2*a2_a4+b2_3*b4*a4_b3-b4_3*b2_b3-2*b1_2*b4_3*a3+b1_2*b4_2*b2*a1_a4+2*b1_2*b4_2*a4_b3-2*b3_2*a4_b1*b2_b4+2*b4_2*a3_b1*b2_b3-b1_3*a3_a4*b3_b4-b2_2*b4_2*a4_b1-b2_3*b4_2*a3+b1_2*b3_2*b4*a1_a4+b4_4*b1+b2_2*b4_3*a1-b1_2*b4_2*b3*a1_a3+b2_2*b4_2*b1*a1_a3-b1_2*b4_2*b2*a2_a3+b1_2*b4_3*a1_a2)*x5+(-2*b1_2*b4*a1_a4*b2_b3+a2_2*b1_2*b4_2*b2+b2_3*b4_2*a2-a1_2*b1_2*b4_3+b1_2*b4_3*a2-b4_3*b1_b3-b2_4*a4_b4+2*b4_3*b2*a1_b1+3*b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+b1_2*b4_2*a3_b3-a4_2*b1_4*b4-3*b1_2*b4_2*a4_b2-b1_2*b3_2*a4_b4+b1_3*a2_a4*b3_b4+a1_2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a2_a4+b3_2*b4_2*b2-b2_2*b4_2*a1_b3+b1_3*a3_a4*b2_b4-2*b4_2*a2_b1*b2_b3+b2_3*a1_a4*b1_b4-b2_2*b4_2*b1*a1_a2-b2_2*b4_3-b1_3*b4_2*a2_a3)*x6+(a1_2*b1_2*b4_2*b3-2*b1_2*b4_2*b2*a1_a2+2*b2_2*b4_2*b3+b3_2*b4_2*b1-2*b4_3*b1_b2-b3_3*b2_b4+b2_4*a3_b4-b1_3*a1_a4*b3_b4+3*b1_2*b4_2*a3_b2+a2_2*b1_3*b4_2+b1_2*b4_3*a1+b1_2*a4_b2*b3_b4-2*b4_2*a1_b1*b2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3-2*b1_2*b4_2*a2_b3+b1_4*b4*a3_a4+b1_2*b2_2*b4*a2_a3+b2_2*b4*a1_a2*b1_b3+a1_2*b2_2*b4_2*b1-a1_2*b3_2*b4*b1_b2+2*b1_2*b4*a1_a3*b2_b3-a2_2*b1_2*b4*b2_b3-a3_2*b1_3*b2_b4-b2_3*b4_2*a1+b2_2*b3_2*a1_b4-3*b2_2*a3_b1*b3_b4+2*b3_2*a2_b1*b2_b4-b2_3*b4*a2_b3-b2_3*a1_a3*b1_b4-b1_3*b4_2*a4)*x7+(-a2_2*b1_2*b2_2*b4+a2_2*b1_2*b3_2*b2-2*a1_2*b2_2*b4*b1_b3-b3_3*b1_b4+b2_5*a4+b3_4*b2-b2_4*a3_b3-b2_4*a2_b4-3*b4_2*b2_2*a1_b1+b2_3*b4*a3_b1+b1_4*b4*a2_a4-a3_2*b1_4*b4-b1_3*b4*a4_b3+2*b1_3*b4_2*a3-a2_2*b1_3*b3_b4-b1_2*b4_2*a1_b3+b2_2*a2_b1*b3_b4+4*b4_2*b3*b1_b2+4*b1_2*b2_2*a4_b4+2*b1_2*b3_2*a2_b4-b1_3*b4_2*a1_a2+2*b3_2*a1_b1*b2_b4+2*b1_3*a2_a3*b2_b4-3*b1_3*a1_a4*b2_b4-6*b1_2*a3_b2*b3_b4+2*b1_3*a1_a3*b3_b4-a1_2*b1_2*b3_2*b4+2*a1_2*b1_2*b4_2*b2+2*b1_2*b4*a1_a2*b2_b3-b1_2*b2_2*b4*a1_a3-2*b1_2*b3_2*b2*a1_a3-b1_2*b2_2*b3*a2_a3+3*b1_2*b2_2*b3*a1_a4-b2_2*b3_2*b1*a1_a2+b2_3*b4_2+b2_3*a1_a2*b1_b4+2*b1_2*b3_2*a4_b2+a1_2*b3_3*b1_b2+a4_2*b1_4*b2-b1_3*b2_2*a3_a4+b2_3*b3_2*a2-b2_2*b3_3*a1-b2_4*b1*a1_a4-2*b3_3*b2*a2_b1+b1_2*b2_3*a2_a4+2*b2_3*b4*a1_b3-2*b1_3*a2_a4*b2_b3+a3_2*b1_3*b2_b3-b1_2*b4_2*a2_b2-4*b2_3*b3*a4_b1+3*b2_2*b3_2*a3_b1+b2_3*a1_a3*b1_b3-b1_2*b4_3-3*b2_2*b3_2*b4)*x8;

    float num8 = (-a4_2*b2_3*b4_2+b3_2*b4_3*a4+2*b4_4*b2*a1_a3-b4_4*a4_b2+b2_2*b4_2*b3*a3_a4-b3_2*b4_2*b2*a2_a4-a1_2*b4_5+2*a4_2*b4_2*b3*b1_b2+b4_5*a2-b4_4*a3_b3+a3_2*b4_3*b1_b3-b4_3*a3_a4*b1_b2-b3_2*b4_3*a1_a3+2*b2_2*b4_3*a2_a4-b3_2*b4_2*b1*a3_a4-a4_2*b1_2*b4_3-a3_2*b2_2*b4_3+b4_3*a2_a3*b2_b3+b3_3*b4_2*a1_a4-b4_4*b1*a2_a3+2*b4_4*b1*a1_a4-a2_2*b4_4*b2-3*b4_3*a1_a4*b2_b3+b4_4*b3*a1_a2)*x1+(-b4_4*b1*a1_a3+b3_2*b4_2*b1*a2_a4+2*b4_3*b3*a4_b2-a4_2*b1_2*b4_2*b3-b4_2*b3*a3_a4*b1_b2-b4_4*a2_b3+a3_2*b4_3*b1_b2-b4_4*a3_b2+b4_3*a1_a4*b1_b3-b4_3*a2_a3*b1_b3+a4_2*b2_2*b4_2*b1+b3_2*b4_3*a3-b3_3*b4_2*a4+a2_2*b4_4*b1-b4_4*a4_b1-2*b4_3*a2_a4*b1_b2+b4_5*a1+b1_2*b4_3*a3_a4)*x2+(-b2_2*b4_3*a4+b4_3*a1_a4*b1_b2-b4_4*b1*a1_a2-b3_2*b4_2*b1*a1_a4+b3_2*b4_2*a4_b2+b4_3*a1_a3*b1_b3+b1_2*b4_3*a2_a4+2*b4_4*a3_b1-a4_2*b1_2*b4_2*b2-2*b4_3*b3*a4_b1+b4_4*a2_b2-b4_3*b3*a3_b2-a3_2*b1_2*b4_3+b1_2*b4_2*b3*a3_a4-b4_5)*x3+(-b2_2*b4_2*a4_b3-b4_3*b3*a3_b1+a1_2*b4_4*b1-b1_2*b4_2*b3*a2_a4+2*b4_3*b2*a4_b1-b4_4*a1_b2+b3_2*b4_2*a4_b1-2*b1_2*b4_3*a1_a4+b4_2*b3*a1_a4*b1_b2+b4_4*b3-b4_4*a2_b1+a4_2*b1_3*b4_2+b1_2*b4_3*a2_a3+b2_2*b4_3*a3-b4_3*a1_a3*b1_b2)*x4+(-b2_2*b4_2*b1*a1_a4-b4_4*a1_b1-a1_2*b4_3*b1_b3+b1_2*b4_2*b3*a1_a4+b4_3*b3*a1_b2-a2_2*b1_2*b4_3+b2_3*b4_2*a4+b1_2*b4_2*b2*a2_a4-b3_2*b4_3+b1_2*b4_3*a1_a3-b4_3*b2*a3_b1+b1_2*b4_3*a4-b2_2*b4_3*a2-2*b4_2*a4_b1*b2_b3+b4_4*b2+b4_3*a1_a2*b1_b2+2*b4_3*b3*a2_b1-b1_3*b4_2*a3_a4)*x5+(b3_3*b4_2+3*b4_2*a3_b1*b2_b3-2*b3_2*b4_2*a2_b1-b4_2*b3*a1_a2*b1_b2-2*b1_2*b4_2*b3*a1_a3-a1_2*b4_3*b1_b2+b2_2*b4_3*a1-b2_3*b4_2*a3+b1_2*b4_2*a4_b3+b2_2*b4_2*b1*a1_a3+b4_4*b1+b4_3*b3*a1_b1-2*b1_2*b4_3*a3-2*b4_3*b2_b3+b2_2*b4_2*a2_b3-b3_2*b4_2*a1_b2+a3_2*b1_3*b4_2+a2_2*b1_2*b4_2*b3+b1_2*b4_2*b2*a1_a4+a1_2*b3_2*b4_2*b1-b1_3*b4_2*a2_a4+b1_2*b4_3*a1_a2-b1_2*b4_2*b2*a2_a3-b2_2*b4_2*a4_b1)*x6+(-3*b1_2*b4*a1_a4*b2_b3-b3_4*b4+2*b1_2*b3_2*b4*a1_a3-b2_2*b3_2*a2_b4+b3_3*b4*a1_b2-a1_2*b3_3*b1_b4-a3_2*b1_3*b3_b4-3*b3_2*a3_b1*b2_b4-a2_2*b1_2*b3_2*b4+a2_2*b1_2*b4_2*b2-b2_2*b4*a1_a3*b1_b3+b3_2*b4*a1_a2*b1_b2+b1_2*b4*a2_a3*b2_b3+b2_3*b4_2*a2-a1_2*b1_2*b4_3+b1_2*b4_3*a2-2*b4_3*b1_b3-b2_4*a4_b4+2*b4_3*b2*a1_b1+4*b2_2*a4_b1*b3_b4+2*b1_3*b4_2*a1_a4+3*b1_2*b4_2*a3_b3-a4_2*b1_4*b4-3*b1_2*b4_2*a4_b2-2*b1_2*b3_2*a4_b4+2*b1_3*a2_a4*b3_b4+2*a1_2*b4_2*b3*b1_b2-b1_2*b2_2*b4*a2_a4+3*b3_2*b4_2*b2-2*b2_2*b4_2*a1_b3+b1_3*a3_a4*b2_b4-2*b4_2*a2_b1*b2_b3+b2_3*a1_a4*b1_b4-b2_2*b4_2*b1*a1_a2-b1_2*b4_2*b3*a1_a2+b2_3*b4*a3_b3-b3_2*b4_2*a1_b1+2*b3_3*b4*a2_b1-b2_2*b4_3-b1_3*b4_2*a2_a3)*x7+(2*a1_2*b1_2*b4_2*b3-2*b1_2*b4_2*b2*a1_a2+b3_5+b2_2*b3_2*b1*a1_a3+b1_2*b3_2*b4*a1_a2-b1_2*b3_2*b2*a2_a3+b1_2*b2_2*b3*a2_a4+3*b1_2*b3_2*b2*a1_a4+3*b2_2*b4_2*b3+3*b3_2*b4_2*b1-2*b4_3*b1_b2-4*b3_3*b2_b4+b2_4*a3_b4-2*b3_4*a2_b1+b2_4*a4_b3-b3_4*a1_b2-3*b1_3*a1_a4*b3_b4+3*b1_2*b4_2*a3_b2+a2_2*b1_3*b4_2+b1_2*b4_3*a1+4*b1_2*a4_b2*b3_b4-4*b4_2*a1_b1*b2_b3+b2_2*b4_2*a2_b1-b1_3*b4_2*a1_a3-3*b1_2*b4_2*a2_b3+b1_4*b4*a3_a4+b1_2*b2_2*b4*a2_a3+2*b2_2*b4*a1_a2*b1_b3+a1_2*b2_2*b4_2*b1-3*a1_2*b3_2*b4*b1_b2+2*b1_2*b4*a1_a3*b2_b3-2*a2_2*b1_2*b4*b2_b3-a3_2*b1_3*b2_b4-b2_3*b4_2*a1+3*b2_2*b3_2*a1_b4-3*b2_2*a3_b1*b3_b4+4*b3_2*a2_b1*b2_b4-2*b2_3*b4*a2_b3-b2_3*a1_a3*b1_b4-3*b1_2*b3_2*a3_b4-4*b2_2*b3_2*a4_b1-b2_3*a1_a4*b1_b3+b1_3*a2_a3*b3_b4+a4_2*b1_4*b3-2*b1_3*b3_2*a2_a4+a3_2*b1_3*b3_2-b2_3*b3_2*a3+2*b1_2*b3_3*a4+a2_2*b1_2*b3_3+b2_2*b3_3*a2+a1_2*b3_4*b1+3*b3_3*b2*a3_b1+b3_3*b4*a1_b1-2*b1_2*b3_3*a1_a3-b1_3*a3_a4*b2_b3-b3_3*a1_a2*b1_b2-b1_3*b4_2*a4)*x8;

    float den1 = 3*b4_4*a3_b1-3*b1_3*b4_2*a4*a2_a3+b2_2*b4_2*b3*a2_a3-2*b3_2*b4_2*b1*a2_a3-b2_2*b3_2*b4*a2_a4-a1_2*b4_3*b3*a2_b1-a3_2*b1_2*b4_2*a2_b2+2*a4_2*b1_3*b4*a2_b3-2*b2_2*b4_2*a1_a2*a4_b1-a1_2*b3_3*b4*a4_b1-b4_5-b3_2*b4_2*b1*a1_a4+a4_2*b2_3*b4*a1_b1-b2_2*a1_a3*a4_b1*b3_b4-3*a4_2*b1_2*a1_b2*b3_b4+b1_2*a2_a3*a4_b2*b3_b4-3*b2_2*b4_2*b3*a1_a4-4*b4_3*b3*a4_b1+4*b3_2*b4_2*a4_b2-b4_2*a1_a2*a3_b1*b2_b3+a2_2*b1_2*b4_2*a3_b3+3*b1_2*b4_3*a3*a1_a2-a4_3*b1_4*b4-a4_2*b2_4*b4-a3_2*b2_3*b4_2+a3_3*b1_3*b4_2+b3_3*b4_2*a3-2*b2_2*b4_3*a4-a2_2*b2_2*b4_3-3*a3_2*b1_2*b4_3-a2_3*b1_2*b4_3-b3_2*b4_3*a2-a1_2*b4_4*b2+a1_3*b4_4*b1+2*b2_2*b4_3*a1_a3+b4_4*a1_b3+2*b4_4*a2_b2-2*a4_2*b1_2*b3_2*b4-4*a4_2*b1_2*b4_2*b2+3*a4_2*b1_3*b4_2*a1-3*a1_2*b1_2*b4_3*a4+3*a1_2*b4_2*a4_b1*b2_b3+b3_2*a1_a2*a4_b1*b2_b4-3*b4_3*b3*a3_b2+a1_2*b3_2*b4_2*a3_b1-2*a1_2*b4_3*b2*a3_b1+a4_2*b1_3*b4*a3_b2-a4_2*b1_2*b2_2*a2_b4+5*b1_2*b4_2*b3*a3_a4-b2_2*b4_2*b1*a3_a4-b4_3*a2_a3*b1_b2+5*b4_3*a1_a4*b1_b2+2*a2_2*b4_3*b1_b3+b4_3*a1_a3*b1_b3+2*b3_3*a2_a4*b1_b4-b3_2*b4_2*b2*a1_a3-a2_2*b1_2*b3_2*a4_b4+2*b1_2*b3_2*a1_a3*a4_b4-3*b3_2*b4*a3_a4*b1_b2-4*b4_2*b3*a2_a4*b1_b2+3*a3_2*b4_2*b3*b1_b2-b3_4*a4_b4+4*a4_2*b2_2*b4*b1_b3+a3_2*b2_2*b4_2*a1_b1+a2_2*b4_3*b2*a1_b1-3*b4_4*b1*a1_a2+b4_3*a1_a2*b2_b3+b3_3*a1_a4*b2_b4+b2_3*a3_a4*b3_b4+2*a2_2*b1_2*b4_2*a4_b2+b1_2*b4_2*a1_a3*a4_b2-a3_2*b1_3*b4*a4_b3-b1_2*b4_2*a1_a2*a4_b3-2*a3_2*b1_2*b4_2*a1_b3+2*b2_3*b4_2*a2_a4+3*b1_2*b4_3*a2_a4;

    float den2 = b4;


    float q0 = num1/den1;
    float q1 = num2/den1;
    float q2 = num3/den1;
    float q3 = num4/den1;
    float q4 = num5/den2;
    float p1 = num6/den1;
    float p2 = num7/den1;
    float p3 = num8/den1;

}

Thanks for any sugestions.

Grzegorz

  • Your code example is unusual in several respects.  Thus, I suspect it will not optimize very well.

    This function does not return any output.  Thus the compiler will eliminate most (maybe all) of the code in this function.  I realize that, in the context of your full system, such is not the case.  But, if you compile this example as is, that is what you should see.

    The C6000 processor family is designed with loop based code in mind.  Most of the time, you want the compiler to optimize your loops with a technique called software pipelining. Your code example has no loops.

    Overall, your code example is so unusual, I'm not sure what to suggest.

    Thanks and regards,

    -George

  • Your test case is a single, moderately long function with no loops and many, many multiplications.  It seems to be computing some sort of polynomial operation I can't easily discern due to the many, many variables.  Depending on the operation, it might be possible to algebraically simplify some expressions, but it's too much for me to figure out.

    The C6000 architecture does best with code that has loops.  Is this function called in a loop? 

    Be sure to use an the appropriate CPU version option, perhaps -mv6740, to enable floating-point hardware instructions.

    Does the compiler really hang with -O3 or does it take a long, finite time?  If the latter, how long?

    Optimization level -O2 is probably about as well as the compiler is going to do with this function.

    The end of the function performs a bunch of divisions by den1.  C6000 does not have hardware division, so this will be done with a slower library function.  You could speed this up a bit, if you are willing to possibly lose a few bits of precision, by pre-calculating the inverse of den1 and multiplying by that instead.  The compiler is not entitled to do this itself.

    Finally, I note that the entire function is dead code.  It returns no value, writes to no global variable, and prints nothing.  What is it supposed to accomplish?

  • Yes, the code is dead, it is only to show what kind of calculations we want to perform. Regarding the -O3, after about 30min I decidet to stop compilation I'm not sure if compilation hangs  - I'll chceck that.

    I use -mv6740 ,optimization for speed level 5 and -O2. 

    I was wandefing if it is possible to write eg. python script for generating assember code form :

    float num1 = 
    a1 * b4 * b2 * a1
    + a1 * b3 * a2 * b4
    - a3 * a2 * b4 * a1
    + b2 * b1 * b3 *a3
    .....

    To make executiond parallel as possible. ? I'm not familiar with C6000 architecture, please advice if it is right way.

    Regards Grzegorz

     

     

     

  • Any sort of program or script which generates assembly code from C code is a compiler, or fraction of a compiler.  If you have never written a compiler before, I advise against attempting it for an architecture like C6000, which requires a lot of bookkeeping to program in assembly code, and you're not likely to beat the existing compiler for this code.

  • HI,sir.What does you mean here?

    In most cases,the DSP complier will do a "good" optimization automatically?

  • Whew... I hope that you copied that from some code generator (maple?). If so, try if that program supports some "Simplify" command. But all in all I don't think you're going to have much success with starting from what you have. Go back one step, look at the actual problem you're trying to solve and its analytical solution and try to see what you can do there.
    Very often code that explicitly computes intermediate results (and maybe follows a mathematical derivation) will perform a lot better than these complex expressions that compute some final result. It will also most of the time be numerically more stable.
    The only thing I see that may be optimized is the computation of your monomials, where you could write a1_3 = a1_2 * a1; a1_4 = a1_2 * a1_2; and so on. But that won't affect the overall performance of your code to any measurable degree.
  • I meant that the original poster would be better off improving the input C code than trying to develop a compiler for C6000, which is very difficult. Yes, when optimization is turned on, the compiler does a good job at optimization.
  • Thanks for your reply.
    if we optimize the C code good enough, for example, to better pipeline the C code in loop, or rewrite the critical computing intensive code in assembly.

    Will it be possible to give a MUCH better result than compiler can do?

  • If the C code is well-tuned, you are very unlikely to do significantly better with hand-coded assembly. In some uncommon cases, you can do better than the compiler, but it is very tedious and requires great expertise. I strongly recommend tuning the C code, especially if you can make it software pipelinable.