286 lines
4.4 KiB
ArmAsm
286 lines
4.4 KiB
ArmAsm
|
|
|
|
#include "asmnames.h"
|
|
|
|
.text
|
|
|
|
.macro _enter
|
|
pushl %ebx
|
|
pushl %ebp
|
|
pushl %esi
|
|
pushl %edi
|
|
movl 20(%esp), %edi
|
|
movl 24(%esp), %esi
|
|
movl 28(%esp), %ebp
|
|
movl 32(%esp), %ecx
|
|
xorl %eax, %eax
|
|
xorl %ebx, %ebx
|
|
.endm
|
|
|
|
.macro _leave
|
|
popl %edi
|
|
popl %esi
|
|
popl %ebp
|
|
popl %ebx
|
|
ret
|
|
.endm
|
|
|
|
|
|
.globl refresh_1
|
|
refresh_1:
|
|
_enter
|
|
subl $4, %esi
|
|
subl $4, %edi
|
|
shrl $2, %ecx
|
|
.Lrefresh_1:
|
|
movb 2(%esi,%ecx,4), %al
|
|
movb 3(%esi,%ecx,4), %bl
|
|
movb (%ebp, %eax), %dl
|
|
movb (%esi,%ecx,4), %al
|
|
movb (%ebp, %ebx), %dh
|
|
movb 1(%esi,%ecx,4), %bl
|
|
rorl $16, %edx
|
|
movb (%ebp, %eax), %dl
|
|
movb (%ebp, %ebx), %dh
|
|
movl %edx, (%edi,%ecx,4)
|
|
decl %ecx
|
|
jnz .Lrefresh_1
|
|
_leave
|
|
|
|
.globl refresh_2
|
|
refresh_2:
|
|
_enter
|
|
subl $2, %esi
|
|
subl $4, %edi
|
|
shrl $1, %ecx
|
|
.Lrefresh_2:
|
|
movb 1(%esi,%ecx,2), %al
|
|
movb (%esi,%ecx,2), %bl
|
|
movw (%ebp,%eax,2), %dx
|
|
rorl $16, %edx
|
|
movw (%ebp,%ebx,2), %dx
|
|
movl %edx, (%edi,%ecx,4)
|
|
decl %ecx
|
|
jnz .Lrefresh_2
|
|
_leave
|
|
|
|
.globl refresh_3
|
|
refresh_3:
|
|
_enter
|
|
subl $2, %esi
|
|
leal (%ecx,%ecx,2), %edx
|
|
shrl $1, %ecx
|
|
addl %edx, %edi
|
|
.Lrefresh_3:
|
|
movb (%esi,%ecx,2), %al
|
|
subl $6, %edi
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movl (%ebp,%eax,4), %edx
|
|
movb %dl, (%edi)
|
|
movb 2(%ebp,%eax,4), %dl
|
|
movb %dh, 1(%edi)
|
|
movb %dl, 2(%edi)
|
|
movl (%ebp,%ebx,4), %edx
|
|
movb %dl, 3(%edi)
|
|
movb 2(%ebp,%ebx,4), %dl
|
|
movb %dh, 4(%edi)
|
|
movb %dl, 5(%edi)
|
|
decl %ecx
|
|
jnz .Lrefresh_3
|
|
_leave
|
|
|
|
.globl refresh_4
|
|
refresh_4:
|
|
_enter
|
|
subl $2, %esi
|
|
subl $8, %edi
|
|
shrl $1, %ecx
|
|
.Lrefresh_4:
|
|
movb (%esi,%ecx,2), %al
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movl (%ebp,%eax,4), %edx
|
|
movl %edx, (%edi,%ecx,8)
|
|
movl (%ebp,%ebx,4), %edx
|
|
movl %edx, 4(%edi,%ecx,8)
|
|
decl %ecx
|
|
jnz .Lrefresh_4
|
|
_leave
|
|
|
|
|
|
|
|
.globl refresh_1_2x
|
|
refresh_1_2x:
|
|
_enter
|
|
subl $2, %esi
|
|
subl $4, %edi
|
|
shrl $1, %ecx
|
|
.Lrefresh_1_2x:
|
|
movb 1(%esi,%ecx,2), %al
|
|
movb (%esi,%ecx,2), %bl
|
|
movb (%ebp,%eax), %al
|
|
movb %al, %dl
|
|
movb %al, %dh
|
|
movb (%ebp,%ebx), %bl
|
|
rorl $16, %edx
|
|
movb %bl, %dl
|
|
movb %bl, %dh
|
|
movl %edx, (%edi,%ecx,4)
|
|
decl %ecx
|
|
jnz .Lrefresh_1_2x
|
|
_leave
|
|
|
|
|
|
|
|
|
|
.globl refresh_2_2x
|
|
refresh_2_2x:
|
|
_enter
|
|
subl $2, %esi
|
|
subl $8, %edi
|
|
shrl $1, %ecx
|
|
.Lrefresh_2_2x:
|
|
movb (%esi,%ecx,2), %al
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movw (%ebp,%eax,2), %dx
|
|
rorl $16, %edx
|
|
movw (%ebp,%eax,2), %dx
|
|
movl %edx, (%edi,%ecx,8)
|
|
movw (%ebp,%ebx,2), %dx
|
|
rorl $16, %edx
|
|
movw (%ebp,%ebx,2), %dx
|
|
movl %edx, 4(%edi,%ecx,8)
|
|
decl %ecx
|
|
jnz .Lrefresh_2_2x
|
|
_leave
|
|
|
|
|
|
|
|
.globl refresh_4_2x
|
|
refresh_4_2x:
|
|
_enter
|
|
subl $2, %esi
|
|
subl $16, %edi
|
|
.Lrefresh_4_2x:
|
|
movb (%esi,%ecx), %al
|
|
movb 1(%esi,%ecx), %bl
|
|
movl (%ebp,%eax,4), %edx
|
|
movl %edx, (%edi,%ecx,8)
|
|
movl %edx, 4(%edi,%ecx,8)
|
|
movl (%ebp,%ebx,4), %edx
|
|
movl %edx, 8(%edi,%ecx,8)
|
|
movl %edx, 12(%edi,%ecx,8)
|
|
subl $2, %ecx
|
|
jnz .Lrefresh_4_2x
|
|
_leave
|
|
|
|
|
|
|
|
|
|
.globl refrsh_1_3x
|
|
refresh_1_3x:
|
|
_enter
|
|
leal (%ecx,%ecx,2), %edx
|
|
shrl $1, %ecx
|
|
addl %edx, %edi
|
|
subl $2, %esi
|
|
.Lrefresh_1_3x:
|
|
movb (%esi,%ecx,2), %al
|
|
subl $6, %edi
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movb (%ebp,%eax,2), %dl
|
|
movb %dl, (%edi)
|
|
movb %dl, 1(%edi)
|
|
movb %dl, 2(%edi)
|
|
movb (%ebp,%ebx,2), %dl
|
|
movb %dl, 3(%edi)
|
|
movb %dl, 4(%edi)
|
|
movb %dl, 5(%edi)
|
|
decl %ecx
|
|
jnz .Lrefresh_1_3x
|
|
_leave
|
|
|
|
|
|
.globl refresh_2_3x
|
|
refresh_2_3x:
|
|
_enter
|
|
shll $1, %ecx
|
|
addl %ecx, %edi
|
|
addl %ecx, %edi
|
|
addl %ecx, %edi
|
|
shrl $2, %ecx
|
|
subl $2, %esi
|
|
.Lrefresh_2_3x:
|
|
movb (%esi,%ecx,2), %al
|
|
subl $12, %edi
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movw (%ebp,%eax,2), %dx
|
|
movw %dx, (%edi)
|
|
movw %dx, 2(%edi)
|
|
movw %dx, 4(%edi)
|
|
movw (%ebp,%ebx,2), %dx
|
|
movw %dx, 6(%edi)
|
|
movw %dx, 8(%edi)
|
|
movw %dx, 10(%edi)
|
|
decl %ecx
|
|
jnz .Lrefresh_2_3x
|
|
_leave
|
|
|
|
|
|
|
|
.globl refresh_4_3x
|
|
refresh_4_3x:
|
|
_enter
|
|
shll $2, %ecx
|
|
addl %ecx, %edi
|
|
addl %ecx, %edi
|
|
addl %ecx, %edi
|
|
shrl $3, %ecx
|
|
subl $2, %esi
|
|
.Lrefresh_4_3x:
|
|
movb (%esi,%ecx,2), %al
|
|
subl $24, %edi
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movl (%ebp,%eax,4), %edx
|
|
movl %edx, (%edi)
|
|
movl %edx, 4(%edi)
|
|
movl %edx, 8(%edi)
|
|
movl (%ebp,%ebx,4), %edx
|
|
movl %edx, 12(%edi)
|
|
movl %edx, 16(%edi)
|
|
movl %edx, 20(%edi)
|
|
decl %ecx
|
|
jnz .Lrefresh_4_3x
|
|
_leave
|
|
|
|
|
|
.globl refresh_4_4x
|
|
refresh_4_4x:
|
|
_enter
|
|
shll $4, %ecx
|
|
addl %ecx, %edi
|
|
shrl $5, %ecx
|
|
subl $2, %esi
|
|
.Lrefresh_4_4x:
|
|
movb (%esi,%ecx,2), %al
|
|
subl $32, %edi
|
|
movb 1(%esi,%ecx,2), %bl
|
|
movl (%ebp,%eax,4), %edx
|
|
movl %edx, (%edi)
|
|
movl %edx, 4(%edi)
|
|
movl %edx, 8(%edi)
|
|
movl %edx, 12(%edi)
|
|
movl (%ebp,%ebx,4), %edx
|
|
movl %edx, 16(%edi)
|
|
movl %edx, 20(%edi)
|
|
movl %edx, 24(%edi)
|
|
movl %edx, 28(%edi)
|
|
decl %ecx
|
|
jnz .Lrefresh_4_4x
|
|
_leave
|
|
|
|
|
|
|
|
|
|
|
|
|