Finished moving video code to ASM

This commit is contained in:
pagefault
2003-02-23 16:02:05 +00:00
parent b2c28fedb0
commit a8a21b3943
2 changed files with 101 additions and 142 deletions

View File

@@ -24,6 +24,9 @@ ALIGN 32
EXTSYM SurfaceX,SurfaceY
EXTSYM ScreenPtr,SurfBufD
EXTSYM pitch,MMXSupport,resolutn
%ifdef __WIN32__
EXTSYM BitConv32Ptr
%endif
SECTION .text
@@ -46,7 +49,7 @@ NEWSYM ClearWin16
ret
NEWSYM ClearWin32
push es
pushad
mov ax,ds
mov es,ax
xor eax,eax
@@ -64,13 +67,13 @@ NEWSYM ClearWin32
add ebx,1
cmp ebx, [SurfaceY]
jne .Blank3
pop es
popad
ret
NEWSYM DrawWin256x224x16
pushad
cmp byte[MMXSupport],0
je .nommx
cmp byte [MMXSupport],0
je .noMMX
mov esi, [ScreenPtr]
mov edi, [SurfBufD]
xor eax,eax
@@ -101,7 +104,7 @@ NEWSYM DrawWin256x224x16
emms
popad
ret
.nommx
.noMMX:
mov ax,ds
mov es,ax
xor eax,eax
@@ -122,15 +125,52 @@ NEWSYM DrawWin256x224x16
%else
cmp eax,223
%endif
jne .Copying
jne .Copying
xor eax,edx
mov ecx,128
rep stosd
popad
ret
NEWSYM DrawWin256x224x32
pushad
mov ax,ds
mov es,ax
xor eax,eax
mov ebx, [BitConv32Ptr]
mov esi, [ScreenPtr]
mov edi, [SurfBufD]
.Copying32b:
mov ecx,256
push eax
xor eax,eax
.CopyLoop32b:
mov ax,[esi]
add esi,2
mov edx,[ebx+eax*4]
mov [edi],edx
add edi,4
dec ecx
jnz .CopyLoop32b
pop eax
inc eax
add edi, [pitch]
sub edi,1024
sub esi,512
add esi,576
%ifdef __WIN32__
cmp eax,239
%else
cmp eax,223
%endif
jne .Copying32b
popad
ret
NEWSYM DrawWin320x240x16
pushad
cmp byte [MMXSupport],0
je near .noMMX
xor eax,eax
xor ebx,ebx
mov esi, [ScreenPtr]
@@ -174,10 +214,54 @@ NEWSYM DrawWin320x240x16
add edi, [pitch]
sub edi,640
add esi,64
cmp ebx,223
%ifdef __WIN32__
cmp eax,239
%else
cmp eax,223
%endif
jne .Copying2MMX
mov ecx,128
rep stosd
emms
popad
ret
.noMMX:
mov ax,ds
mov es,ax
xor eax,eax
xor ebx,ebx
mov esi, [ScreenPtr]
mov edi, [SurfBufD]
movsx edx, word[resolutn]
sub edx,2
.Blank1:
xor eax,eax
mov ecx,160
rep stosd
sub edi,640
add edi, [pitch]
add ebx,1
cmp ebx,8
jne .Blank1
xor ebx,ebx
.Copying2:
xor eax,eax
mov ecx,16
rep stosd
mov ecx,128
rep movsd
xor eax,eax
mov ecx,16
rep stosd
inc ebx
add edi, [pitch]
sub edi,640
sub esi,512
add esi,576
cmp ebx,edx
jne .Copying2
xor eax,eax
mov ecx,128
rep stosd
popad
ret

View File

@@ -2044,6 +2044,7 @@ void clearwin()
extern void DrawWin256x224x16();
extern void DrawWin256x224x32();
extern void DrawWin320x240x16();
void drawscreenwin(void)
{
@@ -2098,40 +2099,14 @@ void drawscreenwin(void)
{
case 16:
{
DrawWin256x224x16();
}
DrawWin256x224x16();
break;
}
case 32:
_asm {
push es
mov ax,ds
mov es,ax
xor eax,eax
mov ebx,BitConv32Ptr
mov esi,ScreenPtr
mov edi,SurfBufD
Copying32b:
mov ecx,256
push eax
xor eax,eax
CopyLoop32b:
mov ax,[esi]
add esi,2
mov edx,[ebx+eax*4]
mov [edi],edx
add edi,4
dec ecx
jnz CopyLoop32b
pop eax
inc eax
add edi,pitch
sub edi,1024
sub esi,512
add esi,576
cmp eax,239
jne Copying32b
pop es
}
{
DrawWin256x224x32();
break;
}
SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch];
color32=0x7F000000;
@@ -2172,110 +2147,10 @@ void drawscreenwin(void)
switch (BitDepth)
{
case 16:
if (MMXSupport == 1) {
_asm {
push es
mov ax,ds
mov es,ax
xor eax,eax
xor ebx,ebx
mov esi,ScreenPtr
mov edi,SurfBufD
movsx edx,resolutn
sub edx,2
Blank1MMX:
xor eax,eax
mov ecx,160
rep stosd
sub edi,640
add edi,pitch
add ebx,1
cmp ebx,8
jne Blank1MMX
xor ebx,ebx
pxor mm0,mm0
Copying2MMX:
mov ecx,4
MMXLoopA:
movq [edi],mm0
movq [edi+8],mm0
add edi,16
dec ecx
jnz MMXLoopA
mov ecx,32
MMXLoopB:
movq mm1,[esi]
movq mm2,[esi+8]
movq [edi],mm1
movq [edi+8],mm2
add esi,16
add edi,16
dec ecx
jnz MMXLoopB
mov ecx,4
MMXLoopC:
movq [edi],mm0
movq [edi+8],mm0
add edi,16
dec ecx
jnz MMXLoopC
inc ebx
add edi,pitch
sub edi,640
sub esi,512
add esi,576
cmp ebx,edx
jne Copying2MMX
xor eax,eax
mov ecx,128
rep stosd
pop es
emms
}
} else {
_asm {
push es
mov ax,ds
mov es,ax
xor eax,eax
xor ebx,ebx
mov esi,ScreenPtr
mov edi,SurfBufD
movsx edx,resolutn
sub edx,2
Blank1:
xor eax,eax
mov ecx,160
rep stosd
sub edi,640
add edi,pitch
add ebx,1
cmp ebx,8
jne Blank1
xor ebx,ebx
Copying2:
xor eax,eax
mov ecx,16
rep stosd
mov ecx,128
rep movsd
xor eax,eax
mov ecx,16
rep stosd
inc ebx
add edi,pitch
sub edi,640
sub esi,512
add esi,576
cmp ebx,edx
jne Copying2
xor eax,eax
mov ecx,128
rep stosd
pop es
}
}
{
DrawWin320x240x16();
break;
}
case 32:
for(j=0;j<8;j++)
{