| 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.