memmove(): use %edx as temporary; don't save %ebx (untouched)
authorH. Peter Anvin <hpa@zytor.com>
Thu, 14 Feb 2008 01:53:21 +0000 (17:53 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 14 Feb 2008 01:53:21 +0000 (17:53 -0800)
Use %edx as a temporary instead of %eax (since the standard C
convention for memmove() is that it returns its destination argument,
which is trivial if we don't ever clobber %eax), and since %ebx is
never actually used in the function, don't bother saving it.

reloc/memmove.S

index ef1603b..e39f884 100644 (file)
@@ -35,7 +35,6 @@
        .type   memmove,@function
        .text
 memmove:
-       pushl   %ebx
        pushl   %esi
        pushl   %edi
 
@@ -46,12 +45,12 @@ memmove:
        jb      1f
 
        /* source >= dest, forwards move */
-       movl    %ecx,%eax
+       movl    %ecx,%edx
        shrl    $2,%ecx
-       andl    $3,%eax
+       andl    $3,%edx
 
        rep; movsl
-       movl    %eax,%ecx
+       movl    %edx,%ecx
        rep; movsb
 
        jmp     2f
@@ -60,13 +59,13 @@ memmove:
        leal    -4(%ecx,%esi),%esi
        leal    -4(%ecx,%edi),%edi
 
-       movl    %ecx,%eax
+       movl    %ecx,%edx
        shrl    $2,%ecx
-       andl    $3,%eax
+       andl    $3,%edx
 
        std
        rep; movsl
-       movl    %eax,%ecx
+       movl    %edx,%ecx
        addl    $3,%esi
        addl    $3,%edi
        rep; movsb
@@ -75,7 +74,6 @@ memmove:
 2:
        popl    %edi
        popl    %esi
-       popl    %ebx
        ret
 
        .size   memmove, .-memmove