aboutsummaryrefslogtreecommitdiffstats
path: root/distrib/sdl-1.2.12/src/hermes/x86p_32.asm
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/sdl-1.2.12/src/hermes/x86p_32.asm')
-rw-r--r--distrib/sdl-1.2.12/src/hermes/x86p_32.asm1045
1 files changed, 0 insertions, 1045 deletions
diff --git a/distrib/sdl-1.2.12/src/hermes/x86p_32.asm b/distrib/sdl-1.2.12/src/hermes/x86p_32.asm
deleted file mode 100644
index 4446c1c..0000000
--- a/distrib/sdl-1.2.12/src/hermes/x86p_32.asm
+++ /dev/null
@@ -1,1045 +0,0 @@
-;
-; x86 format converters for HERMES
-; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
-; This source code is licensed under the GNU LGPL
-;
-; Please refer to the file COPYING.LIB contained in the distribution for
-; licensing conditions
-;
-; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission
-;
-
-BITS 32
-
-%include "common.inc"
-
-SDL_FUNC _ConvertX86p32_32BGR888
-SDL_FUNC _ConvertX86p32_32RGBA888
-SDL_FUNC _ConvertX86p32_32BGRA888
-SDL_FUNC _ConvertX86p32_24RGB888
-SDL_FUNC _ConvertX86p32_24BGR888
-SDL_FUNC _ConvertX86p32_16RGB565
-SDL_FUNC _ConvertX86p32_16BGR565
-SDL_FUNC _ConvertX86p32_16RGB555
-SDL_FUNC _ConvertX86p32_16BGR555
-SDL_FUNC _ConvertX86p32_8RGB332
-
-SECTION .text
-
-;; _Convert_*
-;; Paramters:
-;; ESI = source
-;; EDI = dest
-;; ECX = amount (NOT 0!!! (the _ConvertX86 routine checks for that though))
-;; Destroys:
-;; EAX, EBX, EDX
-
-
-_ConvertX86p32_32BGR888:
-
- ; check short
- cmp ecx,BYTE 32
- ja .L3
-
-.L1 ; short loop
- mov edx,[esi]
- bswap edx
- ror edx,8
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; save ebp
- push ebp
-
- ; unroll four times
- mov ebp,ecx
- shr ebp,2
-
- ; save count
- push ecx
-
-.L4 mov eax,[esi]
- mov ebx,[esi+4]
-
- bswap eax
-
- bswap ebx
-
- ror eax,8
- mov ecx,[esi+8]
-
- ror ebx,8
- mov edx,[esi+12]
-
- bswap ecx
-
- bswap edx
-
- ror ecx,8
- mov [edi+0],eax
-
- ror edx,8
- mov [edi+4],ebx
-
- mov [edi+8],ecx
- mov [edi+12],edx
-
- add esi,BYTE 16
- add edi,BYTE 16
-
- dec ebp
- jnz .L4
-
- ; check tail
- pop ecx
- and ecx,BYTE 11b
- jz .L6
-
-.L5 ; tail loop
- mov edx,[esi]
- bswap edx
- ror edx,8
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L5
-
-.L6 pop ebp
- retn
-
-
-
-
-_ConvertX86p32_32RGBA888:
-
- ; check short
- cmp ecx,BYTE 32
- ja .L3
-
-.L1 ; short loop
- mov edx,[esi]
- rol edx,8
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; save ebp
- push ebp
-
- ; unroll four times
- mov ebp,ecx
- shr ebp,2
-
- ; save count
- push ecx
-
-.L4 mov eax,[esi]
- mov ebx,[esi+4]
-
- rol eax,8
- mov ecx,[esi+8]
-
- rol ebx,8
- mov edx,[esi+12]
-
- rol ecx,8
- mov [edi+0],eax
-
- rol edx,8
- mov [edi+4],ebx
-
- mov [edi+8],ecx
- mov [edi+12],edx
-
- add esi,BYTE 16
- add edi,BYTE 16
-
- dec ebp
- jnz .L4
-
- ; check tail
- pop ecx
- and ecx,BYTE 11b
- jz .L6
-
-.L5 ; tail loop
- mov edx,[esi]
- rol edx,8
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L5
-
-.L6 pop ebp
- retn
-
-
-
-
-_ConvertX86p32_32BGRA888:
-
- ; check short
- cmp ecx,BYTE 32
- ja .L3
-
-.L1 ; short loop
- mov edx,[esi]
- bswap edx
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; save ebp
- push ebp
-
- ; unroll four times
- mov ebp,ecx
- shr ebp,2
-
- ; save count
- push ecx
-
-.L4 mov eax,[esi]
- mov ebx,[esi+4]
-
- mov ecx,[esi+8]
- mov edx,[esi+12]
-
- bswap eax
-
- bswap ebx
-
- bswap ecx
-
- bswap edx
-
- mov [edi+0],eax
- mov [edi+4],ebx
-
- mov [edi+8],ecx
- mov [edi+12],edx
-
- add esi,BYTE 16
- add edi,BYTE 16
-
- dec ebp
- jnz .L4
-
- ; check tail
- pop ecx
- and ecx,BYTE 11b
- jz .L6
-
-.L5 ; tail loop
- mov edx,[esi]
- bswap edx
- mov [edi],edx
- add esi,BYTE 4
- add edi,BYTE 4
- dec ecx
- jnz .L5
-
-.L6 pop ebp
- retn
-
-
-
-
-;; 32 bit RGB 888 to 24 BIT RGB 888
-
-_ConvertX86p32_24RGB888:
-
- ; check short
- cmp ecx,BYTE 32
- ja .L3
-
-.L1 ; short loop
- mov al,[esi]
- mov bl,[esi+1]
- mov dl,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; head
- mov edx,edi
- and edx,BYTE 11b
- jz .L4
- mov al,[esi]
- mov bl,[esi+1]
- mov dl,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jmp SHORT .L3
-
-.L4 ; unroll 4 times
- push ebp
- mov ebp,ecx
- shr ebp,2
-
- ; save count
- push ecx
-
-.L5 mov eax,[esi] ; first dword eax = [A][R][G][B]
- mov ebx,[esi+4] ; second dword ebx = [a][r][g][b]
-
- shl eax,8 ; eax = [R][G][B][.]
- mov ecx,[esi+12] ; third dword ecx = [a][r][g][b]
-
- shl ebx,8 ; ebx = [r][g][b][.]
- mov al,[esi+4] ; eax = [R][G][B][b]
-
- ror eax,8 ; eax = [b][R][G][B] (done)
- mov bh,[esi+8+1] ; ebx = [r][g][G][.]
-
- mov [edi],eax
- add edi,BYTE 3*4
-
- shl ecx,8 ; ecx = [r][g][b][.]
- mov bl,[esi+8+0] ; ebx = [r][g][G][B]
-
- rol ebx,16 ; ebx = [G][B][r][g] (done)
- mov cl,[esi+8+2] ; ecx = [r][g][b][R] (done)
-
- mov [edi+4-3*4],ebx
- add esi,BYTE 4*4
-
- mov [edi+8-3*4],ecx
- dec ebp
-
- jnz .L5
-
- ; check tail
- pop ecx
- and ecx,BYTE 11b
- jz .L7
-
-.L6 ; tail loop
- mov al,[esi]
- mov bl,[esi+1]
- mov dl,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jnz .L6
-
-.L7 pop ebp
- retn
-
-
-
-
-;; 32 bit RGB 888 to 24 bit BGR 888
-
-_ConvertX86p32_24BGR888:
-
- ; check short
- cmp ecx,BYTE 32
- ja .L3
-
-
-.L1 ; short loop
- mov dl,[esi]
- mov bl,[esi+1]
- mov al,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; head
- mov edx,edi
- and edx,BYTE 11b
- jz .L4
- mov dl,[esi]
- mov bl,[esi+1]
- mov al,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jmp SHORT .L3
-
-.L4 ; unroll 4 times
- push ebp
- mov ebp,ecx
- shr ebp,2
-
- ; save count
- push ecx
-
-.L5
- mov eax,[esi] ; first dword eax = [A][R][G][B]
- mov ebx,[esi+4] ; second dword ebx = [a][r][g][b]
-
- bswap eax ; eax = [B][G][R][A]
-
- bswap ebx ; ebx = [b][g][r][a]
-
- mov al,[esi+4+2] ; eax = [B][G][R][r]
- mov bh,[esi+4+4+1] ; ebx = [b][g][G][a]
-
- ror eax,8 ; eax = [r][B][G][R] (done)
- mov bl,[esi+4+4+2] ; ebx = [b][g][G][R]
-
- ror ebx,16 ; ebx = [G][R][b][g] (done)
- mov [edi],eax
-
- mov [edi+4],ebx
- mov ecx,[esi+12] ; third dword ecx = [a][r][g][b]
-
- bswap ecx ; ecx = [b][g][r][a]
-
- mov cl,[esi+8] ; ecx = [b][g][r][B] (done)
- add esi,BYTE 4*4
-
- mov [edi+8],ecx
- add edi,BYTE 3*4
-
- dec ebp
- jnz .L5
-
- ; check tail
- pop ecx
- and ecx,BYTE 11b
- jz .L7
-
-.L6 ; tail loop
- mov dl,[esi]
- mov bl,[esi+1]
- mov al,[esi+2]
- mov [edi],al
- mov [edi+1],bl
- mov [edi+2],dl
- add esi,BYTE 4
- add edi,BYTE 3
- dec ecx
- jnz .L6
-
-.L7
- pop ebp
- retn
-
-
-
-
-;; 32 bit RGB 888 to 16 BIT RGB 565
-
-_ConvertX86p32_16RGB565:
- ; check short
- cmp ecx,BYTE 16
- ja .L3
-
-.L1 ; short loop
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
- jnz .L1
-
-.L2: ; End of short loop
- retn
-
-
-.L3 ; head
- mov ebx,edi
- and ebx,BYTE 11b
- jz .L4
-
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
-
-.L4:
- ; save count
- push ecx
-
- ; unroll twice
- shr ecx,1
-
- ; point arrays to end
- lea esi,[esi+ecx*8]
- lea edi,[edi+ecx*4]
-
- ; negative counter
- neg ecx
- jmp SHORT .L6
-
-.L5:
- mov [edi+ecx*4-4],eax
-.L6:
- mov eax,[esi+ecx*8]
-
- shr ah,2
- mov ebx,[esi+ecx*8+4]
-
- shr eax,3
- mov edx,[esi+ecx*8+4]
-
- shr bh,2
- mov dl,[esi+ecx*8+2]
-
- shl ebx,13
- and eax,000007FFh
-
- shl edx,8
- and ebx,07FF0000h
-
- and edx,0F800F800h
- add eax,ebx
-
- add eax,edx
- inc ecx
-
- jnz .L5
-
- mov [edi+ecx*4-4],eax
-
- ; tail
- pop ecx
- test cl,1
- jz .L7
-
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
-
-.L7:
- retn
-
-
-
-
-;; 32 bit RGB 888 to 16 BIT BGR 565
-
-_ConvertX86p32_16BGR565:
-
- ; check short
- cmp ecx,BYTE 16
- ja .L3
-
-.L1 ; short loop
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; head
- mov ebx,edi
- and ebx,BYTE 11b
- jz .L4
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
-
-.L4 ; save count
- push ecx
-
- ; unroll twice
- shr ecx,1
-
- ; point arrays to end
- lea esi,[esi+ecx*8]
- lea edi,[edi+ecx*4]
-
- ; negative count
- neg ecx
- jmp SHORT .L6
-
-.L5
- mov [edi+ecx*4-4],eax
-.L6
- mov edx,[esi+ecx*8+4]
-
- mov bh,[esi+ecx*8+4]
- mov ah,[esi+ecx*8]
-
- shr bh,3
- mov al,[esi+ecx*8+1]
-
- shr ah,3
- mov bl,[esi+ecx*8+5]
-
- shl eax,3
- mov dl,[esi+ecx*8+2]
-
- shl ebx,19
- and eax,0000FFE0h
-
- shr edx,3
- and ebx,0FFE00000h
-
- and edx,001F001Fh
- add eax,ebx
-
- add eax,edx
- inc ecx
-
- jnz .L5
-
- mov [edi+ecx*4-4],eax
-
- ; tail
- pop ecx
- and ecx,BYTE 1
- jz .L7
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111100b
- shl eax,3
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
-
-.L7
- retn
-
-
-
-
-;; 32 BIT RGB TO 16 BIT RGB 555
-
-_ConvertX86p32_16RGB555:
-
- ; check short
- cmp ecx,BYTE 16
- ja .L3
-
-.L1 ; short loop
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; head
- mov ebx,edi
- and ebx,BYTE 11b
- jz .L4
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
-
-.L4 ; save count
- push ecx
-
- ; unroll twice
- shr ecx,1
-
- ; point arrays to end
- lea esi,[esi+ecx*8]
- lea edi,[edi+ecx*4]
-
- ; negative counter
- neg ecx
- jmp SHORT .L6
-
-.L5
- mov [edi+ecx*4-4],eax
-.L6
- mov eax,[esi+ecx*8]
-
- shr ah,3
- mov ebx,[esi+ecx*8+4]
-
- shr eax,3
- mov edx,[esi+ecx*8+4]
-
- shr bh,3
- mov dl,[esi+ecx*8+2]
-
- shl ebx,13
- and eax,000007FFh
-
- shl edx,7
- and ebx,07FF0000h
-
- and edx,07C007C00h
- add eax,ebx
-
- add eax,edx
- inc ecx
-
- jnz .L5
-
- mov [edi+ecx*4-4],eax
-
- ; tail
- pop ecx
- and ecx,BYTE 1
- jz .L7
- mov bl,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov ah,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
-
-.L7
- retn
-
-
-
-
-;; 32 BIT RGB TO 16 BIT BGR 555
-
-_ConvertX86p32_16BGR555:
-
- ; check short
- cmp ecx,BYTE 16
- ja .L3
-
-
-.L1 ; short loop
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
- jnz .L1
-.L2
- retn
-
-.L3 ; head
- mov ebx,edi
- and ebx,BYTE 11b
- jz .L4
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
- dec ecx
-
-.L4 ; save count
- push ecx
-
- ; unroll twice
- shr ecx,1
-
- ; point arrays to end
- lea esi,[esi+ecx*8]
- lea edi,[edi+ecx*4]
-
- ; negative counter
- neg ecx
- jmp SHORT .L6
-
-.L5
- mov [edi+ecx*4-4],eax
-.L6
- mov edx,[esi+ecx*8+4]
-
- mov bh,[esi+ecx*8+4]
- mov ah,[esi+ecx*8]
-
- shr bh,3
- mov al,[esi+ecx*8+1]
-
- shr ah,3
- mov bl,[esi+ecx*8+5]
-
- shl eax,2
- mov dl,[esi+ecx*8+2]
-
- shl ebx,18
- and eax,00007FE0h
-
- shr edx,3
- and ebx,07FE00000h
-
- and edx,001F001Fh
- add eax,ebx
-
- add eax,edx
- inc ecx
-
- jnz .L5
-
- mov [edi+ecx*4-4],eax
-
- ; tail
- pop ecx
- and ecx,BYTE 1
- jz .L7
- mov ah,[esi+0] ; blue
- mov al,[esi+1] ; green
- mov bl,[esi+2] ; red
- shr ah,3
- and al,11111000b
- shl eax,2
- shr bl,3
- add al,bl
- mov [edi+0],al
- mov [edi+1],ah
- add esi,BYTE 4
- add edi,BYTE 2
-
-.L7
- retn
-
-
-
-
-
-;; FROM 32 BIT RGB to 8 BIT RGB (rrrgggbbb)
-;; This routine writes FOUR pixels at once (dword) and then, if they exist
-;; the trailing three pixels
-_ConvertX86p32_8RGB332:
-
-
-.L_ALIGNED
- push ecx
-
- shr ecx,2 ; We will draw 4 pixels at once
- jnz .L1
-
- jmp .L2 ; short jump out of range :(
-
-.L1:
- mov eax,[esi] ; first pair of pixels
- mov edx,[esi+4]
-
- shr dl,6
- mov ebx,eax
-
- shr al,6
- and ah,0e0h
-
- shr ebx,16
- and dh,0e0h
-
- shr ah,3
- and bl,0e0h
-
- shr dh,3
-
- or al,bl
-
- mov ebx,edx
- or al,ah
-
- shr ebx,16
- or dl,dh
-
- and bl,0e0h
-
- or dl,bl
-
- mov ah,dl
-
-
-
- mov ebx,[esi+8] ; second pair of pixels
-
- mov edx,ebx
- and bh,0e0h
-
- shr bl,6
- and edx,0e00000h
-
- shr edx,16
-
- shr bh,3
-
- ror eax,16
- or bl,dl
-
- mov edx,[esi+12]
- or bl,bh
-
- mov al,bl
-
- mov ebx,edx
- and dh,0e0h
-
- shr dl,6
- and ebx,0e00000h
-
- shr dh,3
- mov ah,dl
-
- shr ebx,16
- or ah,dh
-
- or ah,bl
-
- rol eax,16
- add esi,BYTE 16
-
- mov [edi],eax
- add edi,BYTE 4
-
- dec ecx
- jz .L2 ; L1 out of range for short jump :(
-
- jmp .L1
-.L2:
-
- pop ecx
- and ecx,BYTE 3 ; mask out number of pixels to draw
-
- jz .L4 ; Nothing to do anymore
-
-.L3:
- mov eax,[esi] ; single pixel conversion for trailing pixels
-
- mov ebx,eax
-
- shr al,6
- and ah,0e0h
-
- shr ebx,16
-
- shr ah,3
- and bl,0e0h
-
- or al,ah
- or al,bl
-
- mov [edi],al
-
- inc edi
- add esi,BYTE 4
-
- dec ecx
- jnz .L3
-
-.L4:
- retn
-
-%ifidn __OUTPUT_FORMAT__,elf
-section .note.GNU-stack noalloc noexec nowrite progbits
-%endif