Finished moving video code to ASM
This commit is contained in:
@@ -24,6 +24,9 @@ ALIGN 32
|
|||||||
EXTSYM SurfaceX,SurfaceY
|
EXTSYM SurfaceX,SurfaceY
|
||||||
EXTSYM ScreenPtr,SurfBufD
|
EXTSYM ScreenPtr,SurfBufD
|
||||||
EXTSYM pitch,MMXSupport,resolutn
|
EXTSYM pitch,MMXSupport,resolutn
|
||||||
|
%ifdef __WIN32__
|
||||||
|
EXTSYM BitConv32Ptr
|
||||||
|
%endif
|
||||||
|
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
@@ -46,7 +49,7 @@ NEWSYM ClearWin16
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
NEWSYM ClearWin32
|
NEWSYM ClearWin32
|
||||||
push es
|
pushad
|
||||||
mov ax,ds
|
mov ax,ds
|
||||||
mov es,ax
|
mov es,ax
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
@@ -64,13 +67,13 @@ NEWSYM ClearWin32
|
|||||||
add ebx,1
|
add ebx,1
|
||||||
cmp ebx, [SurfaceY]
|
cmp ebx, [SurfaceY]
|
||||||
jne .Blank3
|
jne .Blank3
|
||||||
pop es
|
popad
|
||||||
ret
|
ret
|
||||||
|
|
||||||
NEWSYM DrawWin256x224x16
|
NEWSYM DrawWin256x224x16
|
||||||
pushad
|
pushad
|
||||||
cmp byte[MMXSupport],0
|
cmp byte [MMXSupport],0
|
||||||
je .nommx
|
je .noMMX
|
||||||
mov esi, [ScreenPtr]
|
mov esi, [ScreenPtr]
|
||||||
mov edi, [SurfBufD]
|
mov edi, [SurfBufD]
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
@@ -101,7 +104,7 @@ NEWSYM DrawWin256x224x16
|
|||||||
emms
|
emms
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
.nommx
|
.noMMX:
|
||||||
mov ax,ds
|
mov ax,ds
|
||||||
mov es,ax
|
mov es,ax
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
@@ -129,8 +132,45 @@ NEWSYM DrawWin256x224x16
|
|||||||
popad
|
popad
|
||||||
ret
|
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
|
NEWSYM DrawWin320x240x16
|
||||||
pushad
|
pushad
|
||||||
|
cmp byte [MMXSupport],0
|
||||||
|
je near .noMMX
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
xor ebx,ebx
|
xor ebx,ebx
|
||||||
mov esi, [ScreenPtr]
|
mov esi, [ScreenPtr]
|
||||||
@@ -174,10 +214,54 @@ NEWSYM DrawWin320x240x16
|
|||||||
add edi, [pitch]
|
add edi, [pitch]
|
||||||
sub edi,640
|
sub edi,640
|
||||||
add esi,64
|
add esi,64
|
||||||
cmp ebx,223
|
%ifdef __WIN32__
|
||||||
|
cmp eax,239
|
||||||
|
%else
|
||||||
|
cmp eax,223
|
||||||
|
%endif
|
||||||
jne .Copying2MMX
|
jne .Copying2MMX
|
||||||
mov ecx,128
|
mov ecx,128
|
||||||
rep stosd
|
rep stosd
|
||||||
emms
|
emms
|
||||||
popad
|
popad
|
||||||
ret
|
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
|
||||||
|
|||||||
@@ -2044,6 +2044,7 @@ void clearwin()
|
|||||||
|
|
||||||
extern void DrawWin256x224x16();
|
extern void DrawWin256x224x16();
|
||||||
extern void DrawWin256x224x32();
|
extern void DrawWin256x224x32();
|
||||||
|
extern void DrawWin320x240x16();
|
||||||
|
|
||||||
void drawscreenwin(void)
|
void drawscreenwin(void)
|
||||||
{
|
{
|
||||||
@@ -2099,38 +2100,12 @@ void drawscreenwin(void)
|
|||||||
case 16:
|
case 16:
|
||||||
{
|
{
|
||||||
DrawWin256x224x16();
|
DrawWin256x224x16();
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 32:
|
case 32:
|
||||||
_asm {
|
{
|
||||||
push es
|
DrawWin256x224x32();
|
||||||
mov ax,ds
|
break;
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch];
|
SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch];
|
||||||
@@ -2172,110 +2147,10 @@ void drawscreenwin(void)
|
|||||||
switch (BitDepth)
|
switch (BitDepth)
|
||||||
{
|
{
|
||||||
case 16:
|
case 16:
|
||||||
if (MMXSupport == 1) {
|
{
|
||||||
_asm {
|
DrawWin320x240x16();
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 32:
|
case 32:
|
||||||
for(j=0;j<8;j++)
|
for(j=0;j<8;j++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user