1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-21 17:31:10 +03:00

ARM: Convert string/ assembly to unified syntax.

This commit is contained in:
Roland McGrath
2013-03-11 16:44:31 -07:00
parent 791de44658
commit 38435a9aff
5 changed files with 53 additions and 40 deletions

View File

@@ -1,5 +1,10 @@
2013-03-11 Roland McGrath <roland@hack.frob.com> 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/memcpy.S: Use r10 instead of r9.
* sysdeps/arm/memmove.S: Likewise. * sysdeps/arm/memmove.S: Likewise.

View File

@@ -53,6 +53,7 @@
#endif #endif
.text .text
.syntax unified
/* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */
@@ -84,7 +85,7 @@ ENTRY(memcpy)
CALGN( ands ip, r1, #31 ) CALGN( ands ip, r1, #31 )
CALGN( rsb r3, ip, #32 ) 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( bcs 2f )
CALGN( adr r4, 6f ) CALGN( adr r4, 6f )
CALGN( subs r2, r2, r3 ) @ C gets set CALGN( subs r2, r2, r3 ) @ C gets set
@@ -139,12 +140,12 @@ ENTRY(memcpy)
cfi_restore (r8) cfi_restore (r8)
8: movs r2, r2, lsl #31 8: movs r2, r2, lsl #31
ldrneb r3, [r1], #1 ldrbne r3, [r1], #1
ldrcsb r4, [r1], #1 ldrbcs r4, [r1], #1
ldrcsb ip, [r1] ldrbcs ip, [r1]
strneb r3, [r0], #1 strbne r3, [r0], #1
strcsb r4, [r0], #1 strbcs r4, [r0], #1
strcsb ip, [r0] strbcs ip, [r0]
#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) #if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
pop {r0, r4, lr} pop {r0, r4, lr}
@@ -160,11 +161,11 @@ ENTRY(memcpy)
9: rsb ip, ip, #4 9: rsb ip, ip, #4
cmp ip, #2 cmp ip, #2
ldrgtb r3, [r1], #1 ldrbgt r3, [r1], #1
ldrgeb r4, [r1], #1 ldrbge r4, [r1], #1
ldrb lr, [r1], #1 ldrb lr, [r1], #1
strgtb r3, [r0], #1 strbgt r3, [r0], #1
strgeb r4, [r0], #1 strbge r4, [r0], #1
subs r2, r2, ip subs r2, r2, ip
strb lr, [r0], #1 strb lr, [r0], #1
blt 8b blt 8b
@@ -185,7 +186,7 @@ ENTRY(memcpy)
CALGN( ands ip, r1, #31 ) CALGN( ands ip, r1, #31 )
CALGN( rsb ip, ip, #32 ) 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( subcc r2, r2, ip )
CALGN( bcc 15f ) CALGN( bcc 15f )

View File

@@ -53,6 +53,7 @@
#endif #endif
.text .text
.syntax unified
/* /*
* Prototype: void *memmove(void *dest, const void *src, size_t n); * Prototype: void *memmove(void *dest, const void *src, size_t n);
@@ -100,7 +101,7 @@ ENTRY(memmove)
blt 5f blt 5f
CALGN( ands ip, r1, #31 ) 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( bcs 2f )
CALGN( adr r4, 6f ) CALGN( adr r4, 6f )
CALGN( subs r2, r2, ip ) @ C is set here CALGN( subs r2, r2, ip ) @ C is set here
@@ -155,12 +156,12 @@ ENTRY(memmove)
cfi_restore (r8) cfi_restore (r8)
8: movs r2, r2, lsl #31 8: movs r2, r2, lsl #31
ldrneb r3, [r1, #-1]! ldrbne r3, [r1, #-1]!
ldrcsb r4, [r1, #-1]! ldrbcs r4, [r1, #-1]!
ldrcsb ip, [r1, #-1] ldrbcs ip, [r1, #-1]
strneb r3, [r0, #-1]! strbne r3, [r0, #-1]!
strcsb r4, [r0, #-1]! strbcs r4, [r0, #-1]!
strcsb ip, [r0, #-1] strbcs ip, [r0, #-1]
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) #if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
pop {r0, r4, lr} pop {r0, r4, lr}
@@ -175,11 +176,11 @@ ENTRY(memmove)
cfi_restore_state cfi_restore_state
9: cmp ip, #2 9: cmp ip, #2
ldrgtb r3, [r1, #-1]! ldrbgt r3, [r1, #-1]!
ldrgeb r4, [r1, #-1]! ldrbge r4, [r1, #-1]!
ldrb lr, [r1, #-1]! ldrb lr, [r1, #-1]!
strgtb r3, [r0, #-1]! strbgt r3, [r0, #-1]!
strgeb r4, [r0, #-1]! strbge r4, [r0, #-1]!
subs r2, r2, ip subs r2, r2, ip
strb lr, [r0, #-1]! strb lr, [r0, #-1]!
blt 8b blt 8b
@@ -200,7 +201,7 @@ ENTRY(memmove)
CALGN( ands ip, r1, #31 ) CALGN( ands ip, r1, #31 )
CALGN( rsb ip, ip, #32 ) 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( subcc r2, r2, ip )
CALGN( bcc 15f ) CALGN( bcc 15f )

View File

@@ -20,6 +20,9 @@
#define NO_THUMB #define NO_THUMB
#include <sysdep.h> #include <sysdep.h>
.text
.syntax unified
/* void *memset (dstpp, c, len) */ /* void *memset (dstpp, c, len) */
ENTRY(memset) ENTRY(memset)
@@ -29,7 +32,7 @@ ENTRY(memset)
1: 1:
tst r3, #3 @ aligned yet? tst r3, #3 @ aligned yet?
strneb r1, [r3], #1 strbne r1, [r3], #1
subne r2, r2, #1 subne r2, r2, #1
bne 1b bne 1b
@@ -40,27 +43,27 @@ ENTRY(memset)
1: 1:
subs r2, r2, #8 subs r2, r2, #8
stmcsia r3!, {r1, ip} @ store up to 32 bytes per loop iteration stmiacs r3!, {r1, ip} @ store up to 32 bytes per loop iteration
subcss r2, r2, #8 subscs r2, r2, #8
stmcsia r3!, {r1, ip} stmiacs r3!, {r1, ip}
subcss r2, r2, #8 subscs r2, r2, #8
stmcsia r3!, {r1, ip} stmiacs r3!, {r1, ip}
subcss r2, r2, #8 subscs r2, r2, #8
stmcsia r3!, {r1, ip} stmiacs r3!, {r1, ip}
bcs 1b bcs 1b
and r2, r2, #7 and r2, r2, #7
2: 2:
subs r2, r2, #1 @ store up to 4 bytes per loop iteration subs r2, r2, #1 @ store up to 4 bytes per loop iteration
strcsb r1, [r3], #1 strbcs r1, [r3], #1
subcss r2, r2, #1 subscs r2, r2, #1
strcsb r1, [r3], #1 strbcs r1, [r3], #1
subcss r2, r2, #1 subscs r2, r2, #1
strcsb r1, [r3], #1 strbcs r1, [r3], #1
subcss r2, r2, #1 subscs r2, r2, #1
strcsb r1, [r3], #1 strbcs r1, [r3], #1
bcs 2b bcs 2b
DO_RET(lr) DO_RET(lr)
END(memset) END(memset)
libc_hidden_builtin_def (memset) libc_hidden_builtin_def (memset)

View File

@@ -25,6 +25,9 @@
* exit: r0 = len * exit: r0 = len
*/ */
.syntax unified
.text
ENTRY(strlen) ENTRY(strlen)
bic r1, r0, $3 @ addr of word containing first byte bic r1, r0, $3 @ addr of word containing first byte
ldr r2, [r1], $4 @ get the first word ldr r2, [r1], $4 @ get the first word