Advertisement
Guest User

Convolution interpolation code disassembly

a guest
Mar 31st, 2013
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void Image::getConvolve(const WarpParams &params)
  2. {
  3. 00409E60  push        ebx  
  4. 00409E61  mov         ebx,esp  
  5. 00409E63  sub         esp,8  
  6. 00409E66  and         esp,0FFFFFFF0h  
  7. 00409E69  add         esp,4  
  8. 00409E6C  push        ebp  
  9. 00409E6D  mov         ebp,dword ptr [ebx+4]  
  10. 00409E70  mov         dword ptr [esp+4],ebp  
  11. 00409E74  mov         ebp,esp  
  12. 00409E76  sub         esp,98h  
  13. 00409E7C  push        esi  
  14. 00409E7D  mov         esi,dword ptr [ebx+8]  
  15. 00409E80  push        edi  
  16.     __declspec(align(16)) static float kernelX[4], kernelY[4];
  17.     updateCoordMaps(params);
  18. 00409E81  mov         edx,esi  
  19. 00409E83  call        cci::Image::updateCoordMaps (40AC30h)  
  20.     const Size2DI subSize = size();
  21. 00409E88  mov         eax,dword ptr [esi+2Ch]  
  22. 00409E8B  mov         ecx,dword ptr [eax+4]  
  23. 00409E8E  mov         eax,dword ptr [eax]  
  24.     const size_t pxCount = subSize.count();
  25.     const float
  26.         *const mapX = mapX_.ptr<float>(),
  27.         *const mapY = mapY_.ptr<float>(),
  28.         *const img  = image_->data().ptr<float>();
  29. 00409E90  mov         edx,dword ptr [esi]  
  30. 00409E92  imul        eax,ecx  
  31. 00409E95  mov         edi,dword ptr [edx+14h]  
  32. 00409E98  mov         ecx,dword ptr [esi+4Ch]  
  33.     float *const subset = pixels_.ptr<float>(),
  34.         x, y, xint, yint;
  35.     const ptrdiff_t imgw = image_->width();
  36. 00409E9B  mov         edx,dword ptr [edx+2Ch]  
  37. 00409E9E  mov         dword ptr [img],edi  
  38. 00409EA1  mov         edi,dword ptr [esi+14h]  
  39. 00409EA4  mov         dword ptr [subset],edi  
  40. 00409EA7  mov         edi,dword ptr [edx+4]  
  41. 00409EAA  mov         dword ptr [mapX],ecx  
  42. 00409EAD  mov         ecx,dword ptr [esi+84h]  
  43. 00409EB3  mov         dword ptr [imgw],edi  
  44.     ptrdiff_t imgoffs;
  45.     __m128 v_px, v_kernX, v_kernY, v_val;
  46.     for (size_t idx = 0; idx < pxCount; ++idx)
  47. 00409EB6  test        eax,eax  
  48. 00409EB8  je          cci::Image::getConvolve+275h (40A0D5h)  
  49.         tap4Kernel(y, kernelY);
  50. 00409EBE  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+10h (411980h)]  
  51. 00409EC5  mov         edx,dword ptr [mapX]  
  52. 00409EC8  movaps      xmmword ptr [ebp-80h],xmm0  
  53. 00409ECC  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+30h (4119A0h)]  
  54. 00409ED3  movaps      xmmword ptr [ebp-50h],xmm0  
  55. 00409ED7  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+50h (4119C0h)]  
  56. 00409EDE  sub         edx,ecx  
  57. 00409EE0  movaps      xmmword ptr [ebp-60h],xmm0  
  58. 00409EE4  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+20h (411990h)]  
  59. 00409EEB  mov         dword ptr [ebp-20h],edx  
  60. 00409EEE  mov         edx,dword ptr [subset]  
  61. 00409EF1  movaps      xmmword ptr [ebp-70h],xmm0  
  62. 00409EF5  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+40h (4119B0h)]  
  63. 00409EFC  movaps      xmmword ptr [ebp-90h],xmm0  
  64. 00409F03  movaps      xmm0,xmmword ptr [cci::Image::CV_PIXEL_MAT+60h (4119D0h)]  
  65. 00409F0A  sub         edx,ecx  
  66. 00409F0C  movaps      xmmword ptr [ebp-40h],xmm0  
  67. 00409F10  mov         esi,ecx  
  68. 00409F12  mov         dword ptr [ebp-0Ch],edx  
  69. 00409F15  mov         dword ptr [mapX],eax  
  70.     {
  71.         x = modf(mapX[idx], &xint);
  72. 00409F18  mov         eax,dword ptr [ebp-20h]  
  73. 00409F1B  fld         dword ptr [eax+esi]  
  74. 00409F1E  lea         ecx,[ebp-28h]  
  75. 00409F21  fstp        dword ptr [subset]  
  76. 00409F24  push        ecx  
  77. 00409F25  fld         dword ptr [subset]  
  78. 00409F28  sub         esp,8  
  79. 00409F2B  fstp        qword ptr [esp]  
  80. 00409F2E  call        dword ptr [__imp__modf (4111E8h)]  
  81. 00409F34  fstp        dword ptr [subset]  
  82. 00409F37  add         esp,0Ch  
  83. 00409F3A  fld         dword ptr [subset]  
  84.         y = modf(mapY[idx], &yint);
  85. 00409F3D  lea         edx,[ebp-30h]  
  86. 00409F40  fstp        dword ptr [x]  
  87. 00409F43  push        edx  
  88. 00409F44  fld         dword ptr [esi]  
  89. 00409F46  sub         esp,8  
  90. 00409F49  fstp        dword ptr [subset]  
  91. 00409F4C  fld         dword ptr [subset]  
  92. 00409F4F  fstp        qword ptr [esp]  
  93. 00409F52  call        dword ptr [__imp__modf (4111E8h)]  
  94. 00409F58  fstp        dword ptr [subset]  
  95. 00409F5B  add         esp,0Ch  
  96. 00409F5E  fld         dword ptr [subset]  
  97. 00409F61  fstp        dword ptr [y]  
  98.         imgoffs = (((ptrdiff_t)yint - 1) * imgw) + (ptrdiff_t)xint - 1;
  99. 00409F64  fld         qword ptr [ebp-30h]  
  100. 00409F67  fstp        dword ptr [subset]  
  101. 00409F6A  fld         dword ptr [subset]  
  102. 00409F6D  call        _ftol2_sse (40ECB0h)  
  103. 00409F72  fld         qword ptr [ebp-28h]  
  104. 00409F75  dec         eax  
  105. 00409F76  fstp        dword ptr [subset]  
  106. 00409F79  fld         dword ptr [subset]  
  107. 00409F7C  imul        eax,edi  
  108. 00409F7F  mov         dword ptr [subset],eax  
  109. 00409F82  call        _ftol2_sse (40ECB0h)  
  110.         tap4Kernel(x, kernelX);
  111. 00409F87  movaps      xmm3,xmmword ptr [ebp-80h]  
  112. 00409F8B  movss       xmm1,dword ptr [x]  
  113. 00409F90  movaps      xmm6,xmmword ptr [ebp-70h]  
  114. 00409F94  mov         ecx,dword ptr [subset]  
  115. 00409F97  shufps      xmm1,xmm1,0  
  116. 00409F9B  subps       xmm1,xmmword ptr [ebp-50h]  
  117. 00409F9F  movaps      xmm0,xmm3  
  118. 00409FA2  andnps      xmm0,xmm1  
  119. 00409FA5  movaps      xmm2,xmm0  
  120. 00409FA8  mulps       xmm2,xmm0  
  121. 00409FAB  movaps      xmm1,xmm2  
  122. 00409FAE  mulps       xmm1,xmm0  
  123. 00409FB1  mulps       xmm1,xmmword ptr [ebp-60h]  
  124. 00409FB5  movaps      xmm7,xmm6  
  125. 00409FB8  mulps       xmm7,xmm2  
  126. 00409FBB  addps       xmm1,xmm7  
  127. 00409FBE  movaps      xmm7,xmmword ptr [ebp-90h]  
  128. 00409FC5  movaps      xmm2,xmm7  
  129. 00409FC8  mulps       xmm2,xmm0  
  130. 00409FCB  addps       xmm2,xmm1  
  131. 00409FCE  addps       xmm2,xmmword ptr [ebp-40h]  
  132.         tap4Kernel(y, kernelY);
  133. 00409FD2  movss       xmm1,dword ptr [y]  
  134. 00409FD7  shufps      xmm1,xmm1,0  
  135. 00409FDB  subps       xmm1,xmmword ptr [ebp-50h]  
  136. 00409FDF  lea         eax,[ecx+eax-1]  
  137. 00409FE3  mov         ecx,offset kernelX (416940h)  
  138. 00409FE8  movaps      xmmword ptr [ecx],xmm2  
  139.         v_kernX = _mm_load_ps(kernelX);
  140.         v_kernY = _mm_set_ps1(kernelY[0]);
  141.         v_px    = _mm_loadu_ps(img + imgoffs);
  142. 00409FEB  mov         ecx,dword ptr [img]  
  143. 00409FEE  movaps      xmm0,xmm3  
  144. 00409FF1  andnps      xmm0,xmm1  
  145. 00409FF4  movaps      xmm2,xmm0  
  146. 00409FF7  mulps       xmm2,xmm0  
  147. 00409FFA  movaps      xmm1,xmm2  
  148. 00409FFD  mulps       xmm1,xmm0  
  149. 0040A000  mulps       xmm1,xmmword ptr [ebp-60h]  
  150. 0040A004  mulps       xmm6,xmm2  
  151. 0040A007  addps       xmm1,xmm6  
  152. 0040A00A  mulps       xmm7,xmm0  
  153. 0040A00D  addps       xmm7,xmm1  
  154. 0040A010  addps       xmm7,xmmword ptr [ebp-40h]  
  155. 0040A014  mov         edx,offset kernelY (416930h)  
  156. 0040A019  movaps      xmmword ptr [edx],xmm7  
  157. 0040A01C  movaps      xmm1,xmmword ptr [kernelX (416940h)]  
  158. 0040A023  movups      xmm2,xmmword ptr [ecx+eax*4]  
  159.         v_px    = _mm_mul_ps(v_px, v_kernX);
  160. 0040A027  mulps       xmm2,xmm1  
  161.         v_px    = _mm_mul_ps(v_px, v_kernY);
  162.         v_val   = v_px;
  163.         imgoffs += imgw;
  164. 0040A02A  mov         edi,dword ptr [imgw]  
  165. 0040A02D  movss       xmm0,dword ptr [kernelY (416930h)]  
  166.         v_kernY = _mm_set_ps1(kernelY[1]);
  167. 0040A035  movss       xmm3,dword ptr [kernelY+4 (416934h)]  
  168. 0040A03D  shufps      xmm0,xmm0,0  
  169. 0040A041  mulps       xmm2,xmm0  
  170. 0040A044  add         eax,edi  
  171.         v_px    = _mm_loadu_ps(img + imgoffs);
  172. 0040A046  movups      xmm0,xmmword ptr [ecx+eax*4]  
  173. 0040A04A  shufps      xmm3,xmm3,0  
  174.         v_px    = _mm_mul_ps(v_px, v_kernX);
  175. 0040A04E  mulps       xmm0,xmm1  
  176.         v_px    = _mm_mul_ps(v_px, v_kernY);
  177. 0040A051  mulps       xmm0,xmm3  
  178.         v_val   = _mm_add_ps(v_val, v_px);
  179. 0040A054  addps       xmm0,xmm2  
  180.         imgoffs += imgw;
  181.         v_kernY = _mm_set_ps1(kernelY[2]);
  182. 0040A057  movss       xmm2,dword ptr [kernelY+8 (416938h)]  
  183. 0040A05F  add         eax,edi  
  184.         v_px    = _mm_loadu_ps(img + imgoffs);
  185. 0040A061  movups      xmm3,xmmword ptr [ecx+eax*4]  
  186. 0040A065  shufps      xmm2,xmm2,0  
  187.         v_px    = _mm_mul_ps(v_px, v_kernX);
  188. 0040A069  mulps       xmm3,xmm1  
  189.         v_px    = _mm_mul_ps(v_px, v_kernY);
  190. 0040A06C  mulps       xmm3,xmm2  
  191.         v_val   = _mm_add_ps(v_val, v_px);
  192.         imgoffs += imgw;
  193.         v_kernY = _mm_set_ps1(kernelY[3]);
  194.         v_px    = _mm_loadu_ps(img + imgoffs);
  195.         v_px    = _mm_mul_ps(v_px, v_kernX);
  196.         v_px    = _mm_mul_ps(v_px, v_kernY);
  197.         v_val   = _mm_add_ps(v_val, v_px);
  198.         imgoffs += imgw;
  199.         subset[idx] = horizSum(v_val);
  200. 0040A06F  add         eax,edi  
  201. 0040A071  movups      xmm2,xmmword ptr [ecx+eax*4]  
  202. 0040A075  mov         eax,dword ptr [ebp-0Ch]  
  203. 0040A078  addps       xmm3,xmm0  
  204. 0040A07B  movss       xmm0,dword ptr [kernelY+0Ch (41693Ch)]  
  205. 0040A083  mulps       xmm2,xmm1  
  206. 0040A086  shufps      xmm0,xmm0,0  
  207. 0040A08A  mov         edx,offset `cci::Image::horizSum'::`2'::buf (416910h)  
  208. 0040A08F  mulps       xmm2,xmm0  
  209. 0040A092  addps       xmm3,xmm2  
  210. 0040A095  movaps      xmmword ptr [edx],xmm3  
  211. 0040A098  fld         dword ptr [`cci::Image::horizSum'::`2'::buf+4 (416914h)]  
  212. 0040A09E  fadd        dword ptr [`cci::Image::horizSum'::`2'::buf (416910h)]  
  213. 0040A0A4  add         esi,4  
  214. 0040A0A7  dec         dword ptr [mapX]  
  215. 0040A0AA  fadd        dword ptr [`cci::Image::horizSum'::`2'::buf+8 (416918h)]  
  216. 0040A0B0  fadd        dword ptr [`cci::Image::horizSum'::`2'::buf+0Ch (41691Ch)]  
  217. 0040A0B6  fstp        dword ptr [eax+esi-4]  
  218. 0040A0BA  jne         cci::Image::getConvolve+0B8h (409F18h)  
  219.     }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement