| Line |  | 
|---|
| 1 | ; $Id: rgbcvt.asm,v 1.3 2000-02-03 18:59:04 sandervl Exp $ | 
|---|
| 2 | ; Copyright 2000 Daniela Engert (dani@ngrt.de) | 
|---|
| 3 |  | 
|---|
| 4 | .586p | 
|---|
| 5 | .MMX | 
|---|
| 6 | .MODEL FLAT | 
|---|
| 7 |  | 
|---|
| 8 | .DATA | 
|---|
| 9 |  | 
|---|
| 10 | align   4 | 
|---|
| 11 | and1mask dd    001F001Fh | 
|---|
| 12 | dd    001F001Fh | 
|---|
| 13 | and2mask dd   0FFC0FFC0h | 
|---|
| 14 | dd   0FFC0FFC0h | 
|---|
| 15 |  | 
|---|
| 16 | .CODE | 
|---|
| 17 |  | 
|---|
| 18 | ; void _Optlink RGB555to565 (WORD *dest, WORD *src, ULONG num); | 
|---|
| 19 |  | 
|---|
| 20 | PUBLIC RGB555to565 | 
|---|
| 21 |  | 
|---|
| 22 | RGB555to565 PROC NEAR | 
|---|
| 23 |  | 
|---|
| 24 | push    esi | 
|---|
| 25 | push    edi | 
|---|
| 26 | cld | 
|---|
| 27 |  | 
|---|
| 28 | mov     edi, eax                ; _Optlink arg1 = EAX | 
|---|
| 29 | mov     esi, edx                ; _Optlink arg2 = EDX | 
|---|
| 30 | shr     ecx, 1                  ; _Optlink arg3 = ECX | 
|---|
| 31 | pushf | 
|---|
| 32 | cvt: | 
|---|
| 33 | mov     eax, [esi] | 
|---|
| 34 | mov     edx, eax | 
|---|
| 35 |  | 
|---|
| 36 | add     esi, 4 | 
|---|
| 37 | shl     eax, 1 | 
|---|
| 38 |  | 
|---|
| 39 | and     edx, 001F001Fh | 
|---|
| 40 | and     eax, 0FFC0FFC0h | 
|---|
| 41 |  | 
|---|
| 42 | add     edi, 4 | 
|---|
| 43 | or      eax, edx | 
|---|
| 44 |  | 
|---|
| 45 | mov     [edi-4], eax | 
|---|
| 46 | loop    cvt | 
|---|
| 47 |  | 
|---|
| 48 | popf | 
|---|
| 49 | jnc     SHORT done | 
|---|
| 50 |  | 
|---|
| 51 | mov     ax, [esi] | 
|---|
| 52 | mov     dx, ax | 
|---|
| 53 | and     dx, 001Fh | 
|---|
| 54 | shl     ax, 1 | 
|---|
| 55 | and     ax, 0FFC0h | 
|---|
| 56 | or      ax, dx | 
|---|
| 57 | mov     [edi], ax | 
|---|
| 58 |  | 
|---|
| 59 | done: | 
|---|
| 60 | pop     edi | 
|---|
| 61 | pop     esi | 
|---|
| 62 | ret | 
|---|
| 63 |  | 
|---|
| 64 | RGB555to565 ENDP | 
|---|
| 65 |  | 
|---|
| 66 | ; void _Optlink RGB555to565MMX(WORD *dest, WORD *src, ULONG num); | 
|---|
| 67 |  | 
|---|
| 68 | PUBLIC RGB555to565MMX | 
|---|
| 69 |  | 
|---|
| 70 | RGB555to565MMX PROC NEAR | 
|---|
| 71 | push    esi | 
|---|
| 72 | push    edi | 
|---|
| 73 | cld | 
|---|
| 74 |  | 
|---|
| 75 | cmp     ecx, 0 | 
|---|
| 76 | jz      done | 
|---|
| 77 |  | 
|---|
| 78 | push    ecx | 
|---|
| 79 |  | 
|---|
| 80 | mov     edi, eax                ; _Optlink arg1 = EAX | 
|---|
| 81 | mov     esi, edx                ; _Optlink arg2 = EDX | 
|---|
| 82 | shr     ecx, 3                  ; _Optlink arg3 = ECX | 
|---|
| 83 | jz      lastpixels | 
|---|
| 84 |  | 
|---|
| 85 | sub     esp, 108 | 
|---|
| 86 | fsaved  dword ptr [esp] | 
|---|
| 87 |  | 
|---|
| 88 | movq    mm2, qword ptr and1mask         ;  0001F001F001F001Fh | 
|---|
| 89 | movq    mm3, qword ptr and2mask         ;  FFC0FFC00FFC0FFC0h | 
|---|
| 90 |  | 
|---|
| 91 | cvt: | 
|---|
| 92 | movq    mm0, qword ptr [esi] | 
|---|
| 93 | add     edi, 16 | 
|---|
| 94 |  | 
|---|
| 95 | movq    mm4, qword ptr [esi+8] | 
|---|
| 96 | movq    mm1, mm0 | 
|---|
| 97 |  | 
|---|
| 98 | movq    mm5, mm4 | 
|---|
| 99 | psllq   mm0, 1 | 
|---|
| 100 |  | 
|---|
| 101 | psllq   mm4, 1 | 
|---|
| 102 | pand    mm1, mm2 | 
|---|
| 103 |  | 
|---|
| 104 | pand    mm0, mm3 | 
|---|
| 105 | pand    mm5, mm2 | 
|---|
| 106 |  | 
|---|
| 107 | pand    mm4, mm3 | 
|---|
| 108 | por     mm0, mm1 | 
|---|
| 109 |  | 
|---|
| 110 | por     mm4, mm5 | 
|---|
| 111 | add     esi, 16 | 
|---|
| 112 |  | 
|---|
| 113 | movq    qword ptr [edi-16], mm0 | 
|---|
| 114 | dec     ecx | 
|---|
| 115 |  | 
|---|
| 116 | movq    qword ptr [edi-8], mm4 | 
|---|
| 117 | jnz     cvt | 
|---|
| 118 |  | 
|---|
| 119 | nop | 
|---|
| 120 | nop | 
|---|
| 121 |  | 
|---|
| 122 | frstord dword ptr [esp] | 
|---|
| 123 | add     esp, 108 | 
|---|
| 124 |  | 
|---|
| 125 | lastpixels: | 
|---|
| 126 | pop     ecx | 
|---|
| 127 | and     ecx, 3 | 
|---|
| 128 | jz      short done | 
|---|
| 129 |  | 
|---|
| 130 | cvt2loop: | 
|---|
| 131 | mov     ax, [esi] | 
|---|
| 132 | mov     dx, ax | 
|---|
| 133 |  | 
|---|
| 134 | add     esi, 2 | 
|---|
| 135 | and     dx, 001Fh | 
|---|
| 136 |  | 
|---|
| 137 | shl     ax, 1 | 
|---|
| 138 | add     edi, 2 | 
|---|
| 139 |  | 
|---|
| 140 | and     ax, 0FFC0h | 
|---|
| 141 | or      ax, dx | 
|---|
| 142 |  | 
|---|
| 143 | mov     [edi-2], ax | 
|---|
| 144 | loop    cvt2loop | 
|---|
| 145 |  | 
|---|
| 146 | done: | 
|---|
| 147 | pop     edi | 
|---|
| 148 | pop     esi | 
|---|
| 149 | ret | 
|---|
| 150 |  | 
|---|
| 151 | RGB555to565MMX ENDP | 
|---|
| 152 |  | 
|---|
| 153 | END | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.