* Reorganize the whole ReactOS codebase into a new layout. Discussing it will only...
[reactos.git] / reactos / win32ss / gdi / dib / i386 / dib32bpp_colorfill.s
1 /*
2 * PROJECT: Win32 subsystem
3 * LICENSE: See COPYING in the top level directory
4 * FILE: subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.c
5 * PURPOSE: ASM optimised 32bpp ColorFill
6 * PROGRAMMERS: Magnus Olsen
7 * Timo Kreuzer (timo.kreuzer@reactos.org)
8 */
9
10 #include <asm.inc>
11
12 .code
13 /*
14 * BOOLEAN
15 * _cdecl
16 * DIB_32BPP_ColorFill(SURFOBJ* pso, RECTL* prcl, ULONG iColor);
17 */
18
19 PUBLIC _DIB_32BPP_ColorFill
20 _DIB_32BPP_ColorFill:
21 push ebp
22 mov ebp, esp
23 push ebx
24 push esi
25 push edi
26 sub esp, 4 /* Space for lDelta */
27
28 mov edx, [ebp+12] /* edx = prcl */
29 mov ecx, [ebp+8] /* ecx = pso */
30
31 mov ebx, [ecx+36] /* ebx = pso->lDelta; */
32 mov [esp], ebx /* lDelta = pso->lDelta; */
33 mov edi, [edx+4] /* edi = prcl->top; */
34 mov eax, edi /* eax = prcl->top; */
35 imul eax, ebx /* eax = prcl->top * pso->lDelta; */
36 add eax, [ecx+32] /* eax += pso->pvScan0; */
37 mov ebx, [edx] /* ebx = prcl->left; */
38 lea esi, [eax+ebx*4] /* esi = pvLine0 = eax + 4 * prcl->left; */
39
40 mov ebx, [edx+8] /* ebx = prcl->right; */
41 sub ebx, [edx] /* ebx = prcl->right - prcl->left; */
42 jle .end /* if (ebx <= 0) goto end; */
43
44 mov edx, [edx+12] /* edx = prcl->bottom; */
45 sub edx, edi /* edx -= prcl->top; */
46 jle .end /* if (eax <= 0) goto end; */
47
48 mov eax, [ebp+16] /* eax = iColor; */
49 cld
50
51 for_loop: /* do { */
52 mov edi, esi /* edi = pvLine0; */
53 mov ecx, ebx /* ecx = cx; */
54 rep stosd /* memset(pvLine0, iColor, cx); */
55 add esi, [esp] /* pvLine0 += lDelta; */
56 dec edx /* cy--; */
57 jnz for_loop /* } while (cy > 0); */
58
59 .end:
60 mov eax, 1
61 add esp, 4
62 pop edi
63 pop esi
64 pop ebx
65 pop ebp
66 ret
67
68 END