mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
ARM: Convert string/ assembly to unified syntax.
This commit is contained in:
parent
791de44658
commit
38435a9aff
@ -1,5 +1,10 @@
|
||||
2013-03-11 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/arm/memcpy.S: Convert to unified assembly syntax.
|
||||
* sysdeps/arm/memmove.S: Likewise.
|
||||
* sysdeps/arm/memset.S: Likewise.
|
||||
* sysdeps/arm/strlen.S: Likewise.
|
||||
|
||||
* sysdeps/arm/memcpy.S: Use r10 instead of r9.
|
||||
* sysdeps/arm/memmove.S: Likewise.
|
||||
|
||||
|
@ -53,6 +53,7 @@
|
||||
#endif
|
||||
|
||||
.text
|
||||
.syntax unified
|
||||
|
||||
/* Prototype: void *memcpy(void *dest, const void *src, size_t n); */
|
||||
|
||||
@ -84,7 +85,7 @@ ENTRY(memcpy)
|
||||
|
||||
CALGN( ands ip, r1, #31 )
|
||||
CALGN( rsb r3, ip, #32 )
|
||||
CALGN( sbcnes r4, r3, r2 ) @ C is always set here
|
||||
CALGN( sbcsne r4, r3, r2 ) @ C is always set here
|
||||
CALGN( bcs 2f )
|
||||
CALGN( adr r4, 6f )
|
||||
CALGN( subs r2, r2, r3 ) @ C gets set
|
||||
@ -139,12 +140,12 @@ ENTRY(memcpy)
|
||||
cfi_restore (r8)
|
||||
|
||||
8: movs r2, r2, lsl #31
|
||||
ldrneb r3, [r1], #1
|
||||
ldrcsb r4, [r1], #1
|
||||
ldrcsb ip, [r1]
|
||||
strneb r3, [r0], #1
|
||||
strcsb r4, [r0], #1
|
||||
strcsb ip, [r0]
|
||||
ldrbne r3, [r1], #1
|
||||
ldrbcs r4, [r1], #1
|
||||
ldrbcs ip, [r1]
|
||||
strbne r3, [r0], #1
|
||||
strbcs r4, [r0], #1
|
||||
strbcs ip, [r0]
|
||||
|
||||
#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
|
||||
pop {r0, r4, lr}
|
||||
@ -160,11 +161,11 @@ ENTRY(memcpy)
|
||||
|
||||
9: rsb ip, ip, #4
|
||||
cmp ip, #2
|
||||
ldrgtb r3, [r1], #1
|
||||
ldrgeb r4, [r1], #1
|
||||
ldrbgt r3, [r1], #1
|
||||
ldrbge r4, [r1], #1
|
||||
ldrb lr, [r1], #1
|
||||
strgtb r3, [r0], #1
|
||||
strgeb r4, [r0], #1
|
||||
strbgt r3, [r0], #1
|
||||
strbge r4, [r0], #1
|
||||
subs r2, r2, ip
|
||||
strb lr, [r0], #1
|
||||
blt 8b
|
||||
@ -185,7 +186,7 @@ ENTRY(memcpy)
|
||||
|
||||
CALGN( ands ip, r1, #31 )
|
||||
CALGN( rsb ip, ip, #32 )
|
||||
CALGN( sbcnes r4, ip, r2 ) @ C is always set here
|
||||
CALGN( sbcsne r4, ip, r2 ) @ C is always set here
|
||||
CALGN( subcc r2, r2, ip )
|
||||
CALGN( bcc 15f )
|
||||
|
||||
|
@ -53,6 +53,7 @@
|
||||
#endif
|
||||
|
||||
.text
|
||||
.syntax unified
|
||||
|
||||
/*
|
||||
* Prototype: void *memmove(void *dest, const void *src, size_t n);
|
||||
@ -100,7 +101,7 @@ ENTRY(memmove)
|
||||
blt 5f
|
||||
|
||||
CALGN( ands ip, r1, #31 )
|
||||
CALGN( sbcnes r4, ip, r2 ) @ C is always set here
|
||||
CALGN( sbcsne r4, ip, r2 ) @ C is always set here
|
||||
CALGN( bcs 2f )
|
||||
CALGN( adr r4, 6f )
|
||||
CALGN( subs r2, r2, ip ) @ C is set here
|
||||
@ -155,12 +156,12 @@ ENTRY(memmove)
|
||||
cfi_restore (r8)
|
||||
|
||||
8: movs r2, r2, lsl #31
|
||||
ldrneb r3, [r1, #-1]!
|
||||
ldrcsb r4, [r1, #-1]!
|
||||
ldrcsb ip, [r1, #-1]
|
||||
strneb r3, [r0, #-1]!
|
||||
strcsb r4, [r0, #-1]!
|
||||
strcsb ip, [r0, #-1]
|
||||
ldrbne r3, [r1, #-1]!
|
||||
ldrbcs r4, [r1, #-1]!
|
||||
ldrbcs ip, [r1, #-1]
|
||||
strbne r3, [r0, #-1]!
|
||||
strbcs r4, [r0, #-1]!
|
||||
strbcs ip, [r0, #-1]
|
||||
|
||||
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
|
||||
pop {r0, r4, lr}
|
||||
@ -175,11 +176,11 @@ ENTRY(memmove)
|
||||
cfi_restore_state
|
||||
|
||||
9: cmp ip, #2
|
||||
ldrgtb r3, [r1, #-1]!
|
||||
ldrgeb r4, [r1, #-1]!
|
||||
ldrbgt r3, [r1, #-1]!
|
||||
ldrbge r4, [r1, #-1]!
|
||||
ldrb lr, [r1, #-1]!
|
||||
strgtb r3, [r0, #-1]!
|
||||
strgeb r4, [r0, #-1]!
|
||||
strbgt r3, [r0, #-1]!
|
||||
strbge r4, [r0, #-1]!
|
||||
subs r2, r2, ip
|
||||
strb lr, [r0, #-1]!
|
||||
blt 8b
|
||||
@ -200,7 +201,7 @@ ENTRY(memmove)
|
||||
|
||||
CALGN( ands ip, r1, #31 )
|
||||
CALGN( rsb ip, ip, #32 )
|
||||
CALGN( sbcnes r4, ip, r2 ) @ C is always set here
|
||||
CALGN( sbcsne r4, ip, r2 ) @ C is always set here
|
||||
CALGN( subcc r2, r2, ip )
|
||||
CALGN( bcc 15f )
|
||||
|
||||
|
@ -20,6 +20,9 @@
|
||||
#define NO_THUMB
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
.syntax unified
|
||||
|
||||
/* void *memset (dstpp, c, len) */
|
||||
|
||||
ENTRY(memset)
|
||||
@ -29,7 +32,7 @@ ENTRY(memset)
|
||||
|
||||
1:
|
||||
tst r3, #3 @ aligned yet?
|
||||
strneb r1, [r3], #1
|
||||
strbne r1, [r3], #1
|
||||
subne r2, r2, #1
|
||||
bne 1b
|
||||
|
||||
@ -40,27 +43,27 @@ ENTRY(memset)
|
||||
|
||||
1:
|
||||
subs r2, r2, #8
|
||||
stmcsia r3!, {r1, ip} @ store up to 32 bytes per loop iteration
|
||||
subcss r2, r2, #8
|
||||
stmcsia r3!, {r1, ip}
|
||||
subcss r2, r2, #8
|
||||
stmcsia r3!, {r1, ip}
|
||||
subcss r2, r2, #8
|
||||
stmcsia r3!, {r1, ip}
|
||||
stmiacs r3!, {r1, ip} @ store up to 32 bytes per loop iteration
|
||||
subscs r2, r2, #8
|
||||
stmiacs r3!, {r1, ip}
|
||||
subscs r2, r2, #8
|
||||
stmiacs r3!, {r1, ip}
|
||||
subscs r2, r2, #8
|
||||
stmiacs r3!, {r1, ip}
|
||||
bcs 1b
|
||||
|
||||
and r2, r2, #7
|
||||
2:
|
||||
subs r2, r2, #1 @ store up to 4 bytes per loop iteration
|
||||
strcsb r1, [r3], #1
|
||||
subcss r2, r2, #1
|
||||
strcsb r1, [r3], #1
|
||||
subcss r2, r2, #1
|
||||
strcsb r1, [r3], #1
|
||||
subcss r2, r2, #1
|
||||
strcsb r1, [r3], #1
|
||||
strbcs r1, [r3], #1
|
||||
subscs r2, r2, #1
|
||||
strbcs r1, [r3], #1
|
||||
subscs r2, r2, #1
|
||||
strbcs r1, [r3], #1
|
||||
subscs r2, r2, #1
|
||||
strbcs r1, [r3], #1
|
||||
bcs 2b
|
||||
|
||||
|
||||
DO_RET(lr)
|
||||
END(memset)
|
||||
libc_hidden_builtin_def (memset)
|
||||
|
@ -25,6 +25,9 @@
|
||||
* exit: r0 = len
|
||||
*/
|
||||
|
||||
.syntax unified
|
||||
.text
|
||||
|
||||
ENTRY(strlen)
|
||||
bic r1, r0, $3 @ addr of word containing first byte
|
||||
ldr r2, [r1], $4 @ get the first word
|
||||
|
Loading…
Reference in New Issue
Block a user