home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Kasumi / source / a_stretchrgb_point.asm < prev    next >
Encoding:
Assembly Source File  |  2009-09-14  |  1.5 KB  |  97 lines

  1.         segment    .text
  2.  
  3.         struc    scaleinfo
  4. .dst        resd    1
  5. .src        resd    1
  6. .xaccum        resd    1
  7. .xfracinc    resd    1
  8. .xintinc    resd    1
  9. .count        resd    1
  10.         endstruc
  11.  
  12.         global    _vdasm_resize_point32
  13. _vdasm_resize_point32:
  14.         push    ebp
  15.         push    edi
  16.         push    esi
  17.         push    ebx
  18.  
  19.         mov        eax, [esp+4+16]
  20.  
  21.         mov        ebx, [eax+scaleinfo.xaccum]
  22.         mov        ecx, [eax+scaleinfo.xfracinc]
  23.         mov        edx, [eax+scaleinfo.src]
  24.         mov        esi, [eax+scaleinfo.xintinc]
  25.         mov        edi, [eax+scaleinfo.dst]
  26.         mov        ebp, [eax+scaleinfo.count]
  27. .xloop:
  28.         mov        eax,[edx*4]
  29.         add        ebx,ecx
  30.         adc        edx,esi
  31.         mov        [edi+ebp],eax
  32.         add        ebp,4
  33.         jne        .xloop
  34.  
  35.         pop        ebx
  36.         pop        esi
  37.         pop        edi
  38.         pop        ebp
  39.         ret
  40.  
  41.         global    _vdasm_resize_point32_MMX
  42. _vdasm_resize_point32_MMX:
  43.         push    ebp
  44.         push    edi
  45.         push    esi
  46.         push    ebx
  47.  
  48.         mov        eax, [esp+4+16]
  49.  
  50.         push    0
  51.         push    dword [fs:0]
  52.         mov        dword [fs:0], esp
  53.  
  54.         mov        ebx, [eax+scaleinfo.xaccum]
  55.         mov        esp, [eax+scaleinfo.xfracinc]
  56.         mov        edx, [eax+scaleinfo.src]
  57.         mov        esi, [eax+scaleinfo.xintinc]
  58.         mov        edi, [eax+scaleinfo.dst]
  59.         mov        ebp, [eax+scaleinfo.count]
  60.  
  61.         mov        eax, ebx
  62.         mov        ecx, edx
  63.         add        ebx, esp
  64.         adc        edx, esi
  65.         add        esp, esp
  66.         adc        esi, esi
  67.  
  68.         add        ebp, 4
  69.         jz        .odd
  70. .dualloop:
  71.         movd        mm0, dword [ecx*4]
  72.         punpckldq    mm0,[edx*4]
  73.         add        eax,esp
  74.         adc        ecx,esi
  75.         add        ebx,esp
  76.         adc        edx,esi
  77.         movq    [edi+ebp-4],mm0
  78.  
  79.         add        ebp,8
  80.         jnc        .dualloop
  81.         jnz        .noodd
  82. .odd:
  83.         mov        eax, [ecx*4]
  84.         mov        [edi-4], eax
  85. .noodd:
  86.         mov        esp, dword [fs:0]
  87.         pop        eax
  88.         pop        eax
  89.  
  90.         pop        ebx
  91.         pop        esi
  92.         pop        edi
  93.         pop        ebp
  94.         ret
  95.  
  96.         end
  97.