memset.s raw

   1  .global memset
   2  .type memset,@function
   3  memset:
   4  	mov 12(%esp),%ecx
   5  	cmp $62,%ecx
   6  	ja 2f
   7  
   8  	mov 8(%esp),%dl
   9  	mov 4(%esp),%eax
  10  	test %ecx,%ecx
  11  	jz 1f
  12  
  13  	mov %dl,%dh
  14  
  15  	mov %dl,(%eax)
  16  	mov %dl,-1(%eax,%ecx)
  17  	cmp $2,%ecx
  18  	jbe 1f
  19  
  20  	mov %dx,1(%eax)
  21  	mov %dx,(-1-2)(%eax,%ecx)
  22  	cmp $6,%ecx
  23  	jbe 1f
  24  
  25  	shl $16,%edx
  26  	mov 8(%esp),%dl
  27  	mov 8(%esp),%dh
  28  
  29  	mov %edx,(1+2)(%eax)
  30  	mov %edx,(-1-2-4)(%eax,%ecx)
  31  	cmp $14,%ecx
  32  	jbe 1f
  33  
  34  	mov %edx,(1+2+4)(%eax)
  35  	mov %edx,(1+2+4+4)(%eax)
  36  	mov %edx,(-1-2-4-8)(%eax,%ecx)
  37  	mov %edx,(-1-2-4-4)(%eax,%ecx)
  38  	cmp $30,%ecx
  39  	jbe 1f
  40  
  41  	mov %edx,(1+2+4+8)(%eax)
  42  	mov %edx,(1+2+4+8+4)(%eax)
  43  	mov %edx,(1+2+4+8+8)(%eax)
  44  	mov %edx,(1+2+4+8+12)(%eax)
  45  	mov %edx,(-1-2-4-8-16)(%eax,%ecx)
  46  	mov %edx,(-1-2-4-8-12)(%eax,%ecx)
  47  	mov %edx,(-1-2-4-8-8)(%eax,%ecx)
  48  	mov %edx,(-1-2-4-8-4)(%eax,%ecx)
  49  
  50  1:	ret 	
  51  
  52  2:	movzbl 8(%esp),%eax
  53  	mov %edi,12(%esp)
  54  	imul $0x1010101,%eax
  55  	mov 4(%esp),%edi
  56  	test $15,%edi
  57  	mov %eax,-4(%edi,%ecx)
  58  	jnz 2f
  59  
  60  1:	shr $2, %ecx
  61  	rep
  62  	stosl
  63  	mov 4(%esp),%eax
  64  	mov 12(%esp),%edi
  65  	ret
  66  	
  67  2:	xor %edx,%edx
  68  	sub %edi,%edx
  69  	and $15,%edx
  70  	mov %eax,(%edi)
  71  	mov %eax,4(%edi)
  72  	mov %eax,8(%edi)
  73  	mov %eax,12(%edi)
  74  	sub %edx,%ecx
  75  	add %edx,%edi
  76  	jmp 1b
  77