source: trunk/src/gdi32/rgbcvt.asm@ 3669

Last change on this file since 3669 was 2614, checked in by sandervl, 26 years ago

Added MMX rgb conversion function

File size: 1.9 KB
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
22RGB555to565 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
32cvt:
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
59done:
60 pop edi
61 pop esi
62 ret
63
64RGB555to565 ENDP
65
66; void _Optlink RGB555to565MMX(WORD *dest, WORD *src, ULONG num);
67
68 PUBLIC RGB555to565MMX
69
70RGB555to565MMX 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
91cvt:
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
125lastpixels:
126 pop ecx
127 and ecx, 3
128 jz short done
129
130cvt2loop:
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
146done:
147 pop edi
148 pop esi
149 ret
150
151RGB555to565MMX ENDP
152
153 END
Note: See TracBrowser for help on using the repository browser.