diff options
Diffstat (limited to 'distrib/sdl-1.2.12/src/hermes/x86p_16.asm')
-rw-r--r-- | distrib/sdl-1.2.12/src/hermes/x86p_16.asm | 490 |
1 files changed, 0 insertions, 490 deletions
diff --git a/distrib/sdl-1.2.12/src/hermes/x86p_16.asm b/distrib/sdl-1.2.12/src/hermes/x86p_16.asm deleted file mode 100644 index e35c75d..0000000 --- a/distrib/sdl-1.2.12/src/hermes/x86p_16.asm +++ /dev/null @@ -1,490 +0,0 @@ -; -; x86 format converters for HERMES -; Copyright (c) 1998 Glenn Fielder (gaffer@gaffer.org) -; This source code is licensed under the GNU LGPL -; -; Please refer to the file COPYING.LIB contained in the distribution for -; licensing conditions -; -; Routines adjusted for Hermes by Christian Nentwich (brn@eleet.mcb.at) -; Used with permission. -; - -BITS 32 - -%include "common.inc" - -SDL_FUNC _ConvertX86p16_16BGR565 -SDL_FUNC _ConvertX86p16_16RGB555 -SDL_FUNC _ConvertX86p16_16BGR555 -SDL_FUNC _ConvertX86p16_8RGB332 - -EXTERN _ConvertX86 - -SECTION .text - -_ConvertX86p16_16BGR565: - - ; check short - cmp ecx,BYTE 16 - ja .L3 - - -.L1 ; short loop - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - and ebx,11111100000b - shl edx,11 - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - jnz .L1 -.L2 - retn - -.L3 ; head - mov eax,edi - and eax,BYTE 11b - jz .L4 - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - and ebx,11111100000b - shl edx,11 - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - -.L4 ; save count - push ecx - - ; unroll twice - shr ecx,1 - - ; point arrays to end - lea esi,[esi+ecx*4] - lea edi,[edi+ecx*4] - - ; negative counter - neg ecx - jmp SHORT .L6 - -.L5 mov [edi+ecx*4-4],eax -.L6 mov eax,[esi+ecx*4] - - mov ebx,[esi+ecx*4] - and eax,07E007E0h - - mov edx,[esi+ecx*4] - and ebx,0F800F800h - - shr ebx,11 - and edx,001F001Fh - - shl edx,11 - 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 al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - and ebx,11111100000b - shl edx,11 - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - -.L7 - retn - - - - - - -_ConvertX86p16_16RGB555: - - ; check short - cmp ecx,BYTE 32 - ja .L3 - - -.L1 ; short loop - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - shr ebx,1 - and ebx, 0111111111100000b - and eax,BYTE 0000000000011111b - add eax,ebx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - jnz .L1 -.L2 - retn - -.L3 ; head - mov eax,edi - and eax,BYTE 11b - jz .L4 - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - shr ebx,1 - and ebx, 0111111111100000b - and eax,BYTE 0000000000011111b - add eax,ebx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - -.L4 ; save ebp - push ebp - - ; save count - push ecx - - ; unroll four times - shr ecx,2 - - ; point arrays to end - lea esi,[esi+ecx*8] - lea edi,[edi+ecx*8] - - ; negative counter - xor ebp,ebp - sub ebp,ecx - -.L5 mov eax,[esi+ebp*8] ; agi? - mov ecx,[esi+ebp*8+4] - - mov ebx,eax - mov edx,ecx - - and eax,0FFC0FFC0h - and ecx,0FFC0FFC0h - - shr eax,1 - and ebx,001F001Fh - - shr ecx,1 - and edx,001F001Fh - - add eax,ebx - add ecx,edx - - mov [edi+ebp*8],eax - mov [edi+ebp*8+4],ecx - - inc ebp - jnz .L5 - - ; tail - pop ecx -.L6 and ecx,BYTE 11b - jz .L7 - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - shr ebx,1 - and ebx, 0111111111100000b - and eax,BYTE 0000000000011111b - add eax,ebx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - jmp SHORT .L6 - -.L7 pop ebp - retn - - - - - - -_ConvertX86p16_16BGR555: - - ; check short - cmp ecx,BYTE 16 - ja .L3 - - -.L1 ; short loop - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - shr ebx,1 - and ebx,1111100000b - shl edx,10 - and edx,0111110000000000b - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - jnz .L1 -.L2 - retn - -.L3 ; head - mov eax,edi - and eax,BYTE 11b - jz .L4 - mov al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - shr ebx,1 - and ebx,1111100000b - shl edx,10 - and edx,0111110000000000b - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - dec ecx - -.L4 ; save count - push ecx - - ; unroll twice - shr ecx,1 - - ; point arrays to end - lea esi,[esi+ecx*4] - lea edi,[edi+ecx*4] - - ; negative counter - neg ecx - jmp SHORT .L6 - -.L5 mov [edi+ecx*4-4],eax -.L6 mov eax,[esi+ecx*4] - - shr eax,1 - mov ebx,[esi+ecx*4] - - and eax,03E003E0h - mov edx,[esi+ecx*4] - - and ebx,0F800F800h - - shr ebx,11 - and edx,001F001Fh - - shl edx,10 - 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 al,[esi] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - shr eax,11 - and eax,BYTE 11111b - shr ebx,1 - and ebx,1111100000b - shl edx,10 - and edx,0111110000000000b - add eax,ebx - add eax,edx - mov [edi],al - mov [edi+1],ah - add esi,BYTE 2 - add edi,BYTE 2 - -.L7 - retn - - - - - - -_ConvertX86p16_8RGB332: - - ; check short - cmp ecx,BYTE 16 - ja .L3 - - -.L1 ; short loop - mov al,[esi+0] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - and eax,BYTE 11000b ; blue - shr eax,3 - and ebx,11100000000b ; green - shr ebx,6 - and edx,1110000000000000b ; red - shr edx,8 - add eax,ebx - add eax,edx - mov [edi],al - add esi,BYTE 2 - inc edi - dec ecx - jnz .L1 -.L2 - retn - -.L3 mov eax,edi - and eax,BYTE 11b - jz .L4 - mov al,[esi+0] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - and eax,BYTE 11000b ; blue - shr eax,3 - and ebx,11100000000b ; green - shr ebx,6 - and edx,1110000000000000b ; red - shr edx,8 - add eax,ebx - add eax,edx - mov [edi],al - add esi,BYTE 2 - inc edi - dec ecx - jmp SHORT .L3 - -.L4 ; save ebp - push ebp - - ; save count - push ecx - - ; unroll 4 times - shr ecx,2 - - ; prestep - mov dl,[esi+0] - mov bl,[esi+1] - mov dh,[esi+2] - -.L5 shl edx,16 - mov bh,[esi+3] - - shl ebx,16 - mov dl,[esi+4] - - mov dh,[esi+6] - mov bl,[esi+5] - - and edx,00011000000110000001100000011000b - mov bh,[esi+7] - - ror edx,16+3 - mov eax,ebx ; setup eax for reds - - and ebx,00000111000001110000011100000111b - and eax,11100000111000001110000011100000b ; reds - - ror ebx,16-2 - add esi,BYTE 8 - - ror eax,16 - add edi,BYTE 4 - - add eax,ebx - mov bl,[esi+1] ; greens - - add eax,edx - mov dl,[esi+0] ; blues - - mov [edi-4],eax - mov dh,[esi+2] - - dec ecx - jnz .L5 - - ; check tail - pop ecx - and ecx,BYTE 11b - jz .L7 - -.L6 ; tail - mov al,[esi+0] - mov ah,[esi+1] - mov ebx,eax - mov edx,eax - and eax,BYTE 11000b ; blue - shr eax,3 - and ebx,11100000000b ; green - shr ebx,6 - and edx,1110000000000000b ; red - shr edx,8 - add eax,ebx - add eax,edx - mov [edi],al - add esi,BYTE 2 - inc edi - dec ecx - jnz .L6 - -.L7 pop ebp - retn - -%ifidn __OUTPUT_FORMAT__,elf -section .note.GNU-stack noalloc noexec nowrite progbits -%endif |