Posted to tcl by auriocus at Thu Nov 27 07:41:42 GMT 2014view raw

  1. for (int i=0; i<length; i++) {
  2. /*const double x=(*temp1ptr);
  3.  
  4. const double y=(*temp2ptr);
  5. (*temp7ptr) = (*temp1ptr)*(*temp1ptr)+(*temp2ptr)*(*temp2ptr)+(*temp1ptr)*(*temp2ptr); */
  6. /* double temp3; double temp4; double temp5; double temp6;
  7. temp6 = (*temp1ptr)*(*temp2ptr);
  8. temp4 = (*temp2ptr)*(*temp2ptr);
  9. temp3 = (*temp1ptr)*(*temp1ptr);
  10. temp5 = temp3+temp4;
  11. (*temp7ptr) = temp5+temp6; */
  12. double x=(*temp1ptr);
  13. double y=(*temp2ptr);
  14. double result;
  15.  
  16. /* (*temp7ptr) = x*x+y*y+x*y; */
  17.  
  18. asm ( "movsd %0, %%xmm0\n"
  19. "movsd %1, %%xmm1\n"
  20. "movsd %%xmm0, %%xmm3\n"
  21. "mulsd %%xmm0, %%xmm3\n"
  22. "movsd %%xmm1, %%xmm2\n"
  23. "mulsd %%xmm1, %%xmm2\n"
  24. "addsd %%xmm3, %%xmm2\n"
  25. "movsd %%xmm2, %2\n" : "=m"(x), "=m"(y)
  26. : "m"(result)
  27. : "xmm0", "xmm1", "xmm2", "xmm3"
  28. );
  29. *temp7ptr++=result;
  30. temp1ptr += temp1pitch;
  31. temp2ptr += temp2pitch;
  32. };
  33.