77 lines
1.1 KiB
ArmAsm
77 lines
1.1 KiB
ArmAsm
.global memset
|
|
.type memset,@function
|
|
memset:
|
|
mov 12(%esp),%ecx
|
|
cmp $62,%ecx
|
|
ja 2f
|
|
|
|
mov 8(%esp),%dl
|
|
mov 4(%esp),%eax
|
|
test %ecx,%ecx
|
|
jz 1f
|
|
|
|
mov %dl,%dh
|
|
|
|
mov %dl,(%eax)
|
|
mov %dl,-1(%eax,%ecx)
|
|
cmp $2,%ecx
|
|
jbe 1f
|
|
|
|
mov %dx,1(%eax)
|
|
mov %dx,(-1-2)(%eax,%ecx)
|
|
cmp $6,%ecx
|
|
jbe 1f
|
|
|
|
shl $16,%edx
|
|
mov 8(%esp),%dl
|
|
mov 8(%esp),%dh
|
|
|
|
mov %edx,(1+2)(%eax)
|
|
mov %edx,(-1-2-4)(%eax,%ecx)
|
|
cmp $14,%ecx
|
|
jbe 1f
|
|
|
|
mov %edx,(1+2+4)(%eax)
|
|
mov %edx,(1+2+4+4)(%eax)
|
|
mov %edx,(-1-2-4-8)(%eax,%ecx)
|
|
mov %edx,(-1-2-4-4)(%eax,%ecx)
|
|
cmp $30,%ecx
|
|
jbe 1f
|
|
|
|
mov %edx,(1+2+4+8)(%eax)
|
|
mov %edx,(1+2+4+8+4)(%eax)
|
|
mov %edx,(1+2+4+8+8)(%eax)
|
|
mov %edx,(1+2+4+8+12)(%eax)
|
|
mov %edx,(-1-2-4-8-16)(%eax,%ecx)
|
|
mov %edx,(-1-2-4-8-12)(%eax,%ecx)
|
|
mov %edx,(-1-2-4-8-8)(%eax,%ecx)
|
|
mov %edx,(-1-2-4-8-4)(%eax,%ecx)
|
|
|
|
1: ret
|
|
|
|
2: movzbl 8(%esp),%eax
|
|
mov %edi,12(%esp)
|
|
imul $0x1010101,%eax
|
|
mov 4(%esp),%edi
|
|
test $15,%edi
|
|
mov %eax,-4(%edi,%ecx)
|
|
jnz 2f
|
|
|
|
1: shr $2, %ecx
|
|
rep
|
|
stosl
|
|
mov 4(%esp),%eax
|
|
mov 12(%esp),%edi
|
|
ret
|
|
|
|
2: xor %edx,%edx
|
|
sub %edi,%edx
|
|
and $15,%edx
|
|
mov %eax,(%edi)
|
|
mov %eax,4(%edi)
|
|
mov %eax,8(%edi)
|
|
mov %eax,12(%edi)
|
|
sub %edx,%ecx
|
|
add %edx,%edi
|
|
jmp 1b
|