- Timestamp:
- Jul 2, 2002, 12:38:41 PM (23 years ago)
- Location:
- trunk/src/ddraw
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ddraw/asmutil.asm
r8819 r8825 1 ; $Id: asmutil.asm,v 1.1 0 2002-07-01 19:16:20 sandervl Exp $1 ; $Id: asmutil.asm,v 1.11 2002-07-02 10:38:40 sandervl Exp $ 2 2 3 3 ; … … 31 31 CONST32 SEGMENT 32 32 CONST32 ENDS 33 34 DATA32 SEGMENT35 36 align 437 and1mask dd 0001F001Fh38 dd 0001F001Fh39 and2mask dd 0FFC0FFC0h40 dd 0FFC0FFC0h41 and2mask565 dd 0FFE07FE0h42 dd 07FE07FE0h43 44 DATA32 ENDS45 33 46 34 CODE32 SEGMENT … … 2109 2097 _MemFlip ENDP 2110 2098 2111 ; void _Optlink DDrawRGB555to565 (WORD *dest, WORD *src, ULONG num);2112 2113 PUBLIC DDrawRGB555to5652114 2115 DDrawRGB555to565 PROC NEAR2116 2117 push esi2118 push edi2119 cld2120 2121 mov edi, eax ; _Optlink arg1 = EAX2122 mov esi, edx ; _Optlink arg2 = EDX2123 shr ecx, 1 ; _Optlink arg3 = ECX2124 pushf2125 cvt:2126 mov eax, [esi]2127 mov edx, eax2128 2129 add esi, 42130 shl eax, 12131 2132 and edx, 0001F001Fh2133 and eax, 0FFC0FFC0h2134 2135 add edi, 42136 or eax, edx2137 2138 mov [edi-4], eax2139 loop cvt2140 2141 popf2142 jnc SHORT done2143 2144 mov ax, [esi]2145 mov dx, ax2146 and dx, 0001Fh2147 shl ax, 12148 and ax, 0FFC0h2149 or ax, dx2150 mov [edi], ax2151 2152 done:2153 pop edi2154 pop esi2155 ret2156 2157 DDrawRGB555to565 ENDP2158 2159 PUBLIC DDrawRGB565to5552160 2161 DDrawRGB565to555 PROC NEAR2162 2163 push esi2164 push edi2165 cld2166 2167 cmp ecx, 02168 jz done2169 2170 mov edi, eax ; _Optlink arg1 = EAX2171 mov esi, edx ; _Optlink arg2 = EDX2172 shr ecx, 1 ; _Optlink arg3 = ECX2173 pushf2174 cvt:2175 mov eax, [esi]2176 mov edx, eax2177 2178 add esi, 42179 shr eax, 12180 2181 and edx, 0001F001Fh2182 and eax, 0FFE07FE0h2183 2184 add edi, 42185 or eax, edx2186 2187 mov [edi-4], eax2188 loop cvt2189 2190 popf2191 jnc SHORT done2192 2193 mov ax, [esi]2194 mov dx, ax2195 and dx, 0001Fh2196 shr ax, 12197 and ax, 0FFE0h2198 or ax, dx2199 mov [edi], ax2200 2201 done:2202 pop edi2203 pop esi2204 ret2205 2206 DDrawRGB565to555 ENDP2207 2208 ; void _Optlink DDrawRGB555to565MMX(WORD *dest, WORD *src, ULONG num);2209 2210 PUBLIC DDrawRGB555to565MMX2211 2212 DDrawRGB555to565MMX PROC NEAR2213 push esi2214 push edi2215 cld2216 2217 cmp ecx, 02218 jz done2219 2220 push ecx2221 2222 mov edi, eax ; _Optlink arg1 = EAX2223 mov esi, edx ; _Optlink arg2 = EDX2224 shr ecx, 3 ; _Optlink arg3 = ECX2225 jz lastpixels2226 2227 sub esp, 1082228 fsaved dword ptr [esp]2229 2230 movq mm2, qword ptr and1mask ; 0001F001F001F001Fh2231 movq mm3, qword ptr and2mask ; FFC0FFC00FFC0FFC0h2232 2233 cvt:2234 movq mm0, qword ptr [esi]2235 add edi, 162236 2237 movq mm4, qword ptr [esi+8]2238 movq mm1, mm02239 2240 movq mm5, mm42241 psllq mm0, 12242 2243 psllq mm4, 12244 pand mm1, mm22245 2246 pand mm0, mm32247 pand mm5, mm22248 2249 pand mm4, mm32250 por mm0, mm12251 2252 por mm4, mm52253 add esi, 162254 2255 movq qword ptr [edi-16], mm02256 dec ecx2257 2258 movq qword ptr [edi-8], mm42259 jnz cvt2260 2261 nop2262 nop2263 2264 frstord dword ptr [esp]2265 add esp, 1082266 2267 lastpixels:2268 pop ecx2269 and ecx, 32270 jz short done2271 2272 cvt2loop:2273 mov ax, [esi]2274 mov dx, ax2275 2276 add esi, 22277 and dx, 001Fh2278 2279 shl ax, 12280 add edi, 22281 2282 and ax, 0FFC0h2283 or ax, dx2284 2285 mov [edi-2], ax2286 loop cvt2loop2287 2288 done:2289 pop edi2290 pop esi2291 ret2292 2293 DDrawRGB555to565MMX ENDP2294 2295 2296 ; void _Optlink DDrawRGB565to555MMX(WORD *dest, WORD *src, ULONG num);2297 2298 PUBLIC DDrawRGB565to555MMX2299 2300 DDrawRGB565to555MMX PROC NEAR2301 push esi2302 push edi2303 cld2304 2305 cmp ecx, 02306 jz done2307 2308 push ecx2309 2310 mov edi, eax ; _Optlink arg1 = EAX2311 mov esi, edx ; _Optlink arg2 = EDX2312 shr ecx, 3 ; _Optlink arg3 = ECX2313 jz lastpixels2314 2315 sub esp, 1082316 fsaved dword ptr [esp]2317 2318 movq mm2, qword ptr and1mask ; 0001F001F001F001Fh2319 movq mm3, qword ptr and2mask565 ; FFE07FE007FE07FE0h2320 2321 cvt:2322 movq mm0, qword ptr [esi]2323 add edi, 162324 2325 movq mm4, qword ptr [esi+8]2326 movq mm1, mm02327 2328 movq mm5, mm42329 psrlq mm0, 12330 2331 psrlq mm4, 12332 pand mm1, mm22333 2334 pand mm0, mm32335 pand mm5, mm22336 2337 pand mm4, mm32338 por mm0, mm12339 2340 por mm4, mm52341 add esi, 162342 2343 movq qword ptr [edi-16], mm02344 dec ecx2345 2346 movq qword ptr [edi-8], mm42347 jnz cvt2348 2349 nop2350 nop2351 2352 frstord dword ptr [esp]2353 add esp, 1082354 2355 lastpixels:2356 pop ecx2357 and ecx, 32358 jz short done2359 2360 cvt2loop:2361 mov ax, [esi]2362 mov dx, ax2363 2364 add esi, 22365 and dx, 001Fh2366 2367 shr ax, 12368 add edi, 22369 2370 and ax, 0FFE0h2371 or ax, dx2372 2373 mov [edi-2], ax2374 loop cvt2loop2375 2376 done:2377 pop edi2378 pop esi2379 ret2380 2381 DDrawRGB565to555MMX ENDP2382 2383 2099 CODE32 ENDS 2384 2100 -
trunk/src/ddraw/asmutil.h
r8818 r8825 1 /* $Id: asmutil.h,v 1. 7 2002-07-01 19:15:26sandervl Exp $ */1 /* $Id: asmutil.h,v 1.8 2002-07-02 10:38:41 sandervl Exp $ */ 2 2 3 3 /* … … 28 28 extern int __cdecl CPUHasMMX(); 29 29 30 void _Optlink DDrawRGB555to565(char *dest, char *src, ULONG num);31 void _Optlink DDrawRGB555to565MMX(char *dest, char *src, ULONG num);32 33 void _Optlink DDrawRGB565to555(char *dest, char *src, ULONG num);34 void _Optlink DDrawRGB565to555MMX(char *dest, char *src, ULONG num);35 36 30 #ifdef __cplusplus 37 31 }
Note:
See TracChangeset
for help on using the changeset viewer.