Improve the memmove implementation to save one instruction and use
better label names. Also use better label names for the memset and
memcpy implementations so everything looks consistent.
Suggested-by: Jens Remus <jremus@linux.vnet.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
ltgr %r4,%r4
lgr %r1,%r2
bzr %r14
ltgr %r4,%r4
lgr %r1,%r2
bzr %r14
clgr %r2,%r3
jnh .Lmemmove_forward
clgr %r2,%r3
jnh .Lmemmove_forward
clgr %r2,%r5
jl .Lmemmove_reverse
.Lmemmove_forward:
clgr %r2,%r5
jl .Lmemmove_reverse
.Lmemmove_forward:
srlg %r0,%r4,8
ltgr %r0,%r0
srlg %r0,%r4,8
ltgr %r0,%r0
- jz .Lmemmove_rest
-.Lmemmove_loop:
+ jz .Lmemmove_forward_remainder
+.Lmemmove_forward_loop:
mvc 0(256,%r1),0(%r3)
la %r1,256(%r1)
la %r3,256(%r3)
mvc 0(256,%r1),0(%r3)
la %r1,256(%r1)
la %r3,256(%r3)
- brctg %r0,.Lmemmove_loop
-.Lmemmove_rest:
+ brctg %r0,.Lmemmove_forward_loop
+.Lmemmove_forward_remainder:
larl %r5,.Lmemmove_mvc
ex %r4,0(%r5)
br %r14
.Lmemmove_reverse:
larl %r5,.Lmemmove_mvc
ex %r4,0(%r5)
br %r14
.Lmemmove_reverse:
- aghi %r4,-1
-.Lmemmove_reverse_loop:
ic %r0,0(%r4,%r3)
stc %r0,0(%r4,%r1)
ic %r0,0(%r4,%r3)
stc %r0,0(%r4,%r1)
- brctg %r4,.Lmemmove_reverse_loop
+ brctg %r4,.Lmemmove_reverse
ic %r0,0(%r4,%r3)
stc %r0,0(%r4,%r1)
br %r14
ic %r0,0(%r4,%r3)
stc %r0,0(%r4,%r1)
br %r14
srlg %r3,%r4,8
ltgr %r3,%r3
lgr %r1,%r2
srlg %r3,%r4,8
ltgr %r3,%r3
lgr %r1,%r2
+ jz .Lmemset_clear_remainder
.Lmemset_clear_loop:
xc 0(256,%r1),0(%r1)
la %r1,256(%r1)
brctg %r3,.Lmemset_clear_loop
.Lmemset_clear_loop:
xc 0(256,%r1),0(%r1)
la %r1,256(%r1)
brctg %r3,.Lmemset_clear_loop
+.Lmemset_clear_remainder:
larl %r3,.Lmemset_xc
ex %r4,0(%r3)
br %r14
larl %r3,.Lmemset_xc
ex %r4,0(%r3)
br %r14
aghi %r4,-2
srlg %r3,%r4,8
ltgr %r3,%r3
aghi %r4,-2
srlg %r3,%r4,8
ltgr %r3,%r3
+ jz .Lmemset_fill_remainder
.Lmemset_fill_loop:
mvc 1(256,%r1),0(%r1)
la %r1,256(%r1)
brctg %r3,.Lmemset_fill_loop
.Lmemset_fill_loop:
mvc 1(256,%r1),0(%r1)
la %r1,256(%r1)
brctg %r3,.Lmemset_fill_loop
+.Lmemset_fill_remainder:
larl %r3,.Lmemset_mvc
ex %r4,0(%r3)
br %r14
larl %r3,.Lmemset_mvc
ex %r4,0(%r3)
br %r14
ltgr %r5,%r5
lgr %r1,%r2
jnz .Lmemcpy_loop
ltgr %r5,%r5
lgr %r1,%r2
jnz .Lmemcpy_loop
larl %r5,.Lmemcpy_mvc
ex %r4,0(%r5)
br %r14
larl %r5,.Lmemcpy_mvc
ex %r4,0(%r5)
br %r14
la %r1,256(%r1)
la %r3,256(%r3)
brctg %r5,.Lmemcpy_loop
la %r1,256(%r1)
la %r3,256(%r3)
brctg %r5,.Lmemcpy_loop
.Lmemcpy_mvc:
mvc 0(1,%r1),0(%r3)
EXPORT_SYMBOL(memcpy)
.Lmemcpy_mvc:
mvc 0(1,%r1),0(%r3)
EXPORT_SYMBOL(memcpy)