public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Update the assembler code to support old ARM architectures.
@ 2015-06-01 10:50 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2015-06-01 10:50 UTC (permalink / raw)
  To: newlib-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=24e054c8c8ed59b4b1009f81dc2760b914ad5b00

commit 24e054c8c8ed59b4b1009f81dc2760b914ad5b00
Author: Hale Wang <hale.wang@arm.com>
Date:   Mon Jun 1 12:49:37 2015 +0200

    Update the assembler code to support old ARM architectures.
    
            * libc/machine/arm/aeabi_memmove-arm.S (__aeabi_memmove): Update the
            assembler implementation.
            * libc/machine/arm/aeabi_memmove-thumb.S (__aeabi_memmove): Ditto.
            * libc/machine/arm/aeabi_memmove-thumb2.S (__aeabi_memmove): Ditto.
            * libc/machine/arm/aeabi_memset-arm.S (__aeabi_memset): Ditto.
            * libc/machine/arm/aeabi_memset-thumb.S (__aeabi_memset): Ditto.
            * libc/machine/arm/aeabi_memset-thumb2.S (__aeabi_memset): Ditto.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 newlib/ChangeLog                               |  10 +++
 newlib/libc/machine/arm/aeabi_memmove-arm.S    |  45 ++++++-----
 newlib/libc/machine/arm/aeabi_memmove-thumb.S  |  46 ++++++-----
 newlib/libc/machine/arm/aeabi_memmove-thumb2.S |  47 ++++++-----
 newlib/libc/machine/arm/aeabi_memset-arm.S     | 108 ++++++++++++-------------
 newlib/libc/machine/arm/aeabi_memset-thumb.S   |  66 +++++++--------
 newlib/libc/machine/arm/aeabi_memset-thumb2.S  |  50 ++++++------
 7 files changed, 189 insertions(+), 183 deletions(-)

diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 5d5d3fa..28d571e 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,13 @@
+2015-06-01  Hale Wang  <hale.wang@arm.com>
+
+	* libc/machine/arm/aeabi_memmove-arm.S (__aeabi_memmove): Update the
+	assembler implementation.
+	* libc/machine/arm/aeabi_memmove-thumb.S (__aeabi_memmove): Ditto.
+	* libc/machine/arm/aeabi_memmove-thumb2.S (__aeabi_memmove): Ditto.
+	* libc/machine/arm/aeabi_memset-arm.S (__aeabi_memset): Ditto.
+	* libc/machine/arm/aeabi_memset-thumb.S (__aeabi_memset): Ditto.
+	* libc/machine/arm/aeabi_memset-thumb2.S (__aeabi_memset): Ditto.
+
 2015-06-01  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
 	* libm/machine/aarch64/e_sqrt.c: New file.
diff --git a/newlib/libc/machine/arm/aeabi_memmove-arm.S b/newlib/libc/machine/arm/aeabi_memmove-arm.S
index 371f215..e6e9639 100644
--- a/newlib/libc/machine/arm/aeabi_memmove-arm.S
+++ b/newlib/libc/machine/arm/aeabi_memmove-arm.S
@@ -33,31 +33,32 @@
 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove
 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove
 __aeabi_memmove:
-	.cfi_startproc
 	cmp	r0, r1
+	bls	2f
 	add	r3, r1, r2
-	bhi	.L2
-.L4:
-	sub	r2, r0, #1
-	b	.L3
-.L2:
 	cmp	r0, r3
-	addcc	r1, r0, r2
-	rsbcc	r2, r3, r2
-	bcs	.L4
-.L5:
-	cmn	r3, r2
-	ldrneb	ip, [r3, #-1]!
-	strneb	ip, [r1, #-1]!
-	bne	.L5
-.L11:
+	bcs	2f
+	cmp	r2, #0
+	add	r1, r0, r2
+	bxeq	lr
+	rsb	r2, r2, r3
+1:
+	ldrb	ip, [r3, #-1]!
+	cmp	r2, r3
+	strb	ip, [r1, #-1]!
+	bne	1b
 	bx	lr
-.L3:
-	cmp	r1, r3
-	ldrneb	ip, [r1], #1
-	strneb	ip, [r2, #1]!
-	bne	.L3
-.L12:
+2:
+	cmp	r2, #0
+	addne	r2, r1, r2
+	subne	r3, r0, #1
+	beq	4f
+3:
+	ldrb	ip, [r1], #1
+	cmp	r2, r1
+	strb	ip, [r3, #1]!
+	bne	3b
+	bx	lr
+4:
 	bx	lr
-	.cfi_endproc
 	.size __aeabi_memmove, . - __aeabi_memmove
diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb.S b/newlib/libc/machine/arm/aeabi_memmove-thumb.S
index 52e9e07..61a7258 100644
--- a/newlib/libc/machine/arm/aeabi_memmove-thumb.S
+++ b/newlib/libc/machine/arm/aeabi_memmove-thumb.S
@@ -33,32 +33,34 @@
 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove
 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove
 __aeabi_memmove:
-	.cfi_startproc
 	push	{r4, lr}
 	cmp	r0, r1
-	bls	.L9
-	adds	r3, r1, r2
-	cmp	r0, r3
-	bcc	.L3
-.L9:
+	bls	3f
+	adds	r4, r1, r2
+	cmp	r0, r4
+	bcs	3f
+	subs	r3, r2, #1
+	cmp	r2, #0
+	beq	2f
+	subs	r2, r4, r2
+1:
+	ldrb	r1, [r2, r3]
+	strb	r1, [r0, r3]
+	subs	r3, r3, #1
+	bcs	1b
+2:
+	pop	{r4}
+	pop	{r1}
+	bx	r1
+3:
 	movs	r3, #0
-	b	.L4
-.L3:
-	subs	r3, r3, r2
-.L5:
-	subs	r2, r2, #1
-	bcc	.L10
-	ldrb	r1, [r3, r2]
-	strb	r1, [r0, r2]
-	b	.L5
-.L4:
-	cmp	r3, r2
-	beq	.L10
+	cmp	r2, #0
+	beq	2b
+4:
 	ldrb	r4, [r1, r3]
 	strb	r4, [r0, r3]
 	adds	r3, r3, #1
-	b	.L4
-.L10:
-	pop	{r4, pc}
-	.cfi_endproc
+	cmp	r2, r3
+	bne	4b
+	b	2b
 	.size __aeabi_memmove, . - __aeabi_memmove
diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
index d408f85..e950443 100644
--- a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
+++ b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
@@ -33,34 +33,33 @@
 	ASM_ALIAS __aeabi_memmove4 __aeabi_memmove
 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove
 __aeabi_memmove:
-	.cfi_startproc
 	cmp	r0, r1
-	add	r3, r1, r2
-	push	{r4, lr}
-	bhi	.L2
-.L4:
-	subs	r2, r0, #1
-	b	.L3
-.L2:
+	push	{r4}
+	bls	3f
+	adds	r3, r1, r2
 	cmp	r0, r3
-	bcs	.L4
+	bcs	3f
 	adds	r1, r0, r2
-	subs	r2, r2, r3
-.L5:
-	cmn	r3, r2
-	beq	.L12
+	cbz	r2, 2f
+	subs	r2, r3, r2
+1:
 	ldrb	r4, [r3, #-1]!
+	cmp	r2, r3
 	strb	r4, [r1, #-1]!
-	b	.L5
-.L12:
-	pop	{r4, pc}
-.L3:
-	cmp	r1, r3
-	beq	.L13
+	bne	1b
+2:
+	pop	{r4}
+	bx	lr
+3:
+	cmp	r2, #0
+	beq	2b
+	add	r2, r2, r1
+	subs	r3, r0, #1
+4:
 	ldrb	r4, [r1], #1
-	strb	r4, [r2, #1]!
-	b	.L3
-.L13:
-	pop	{r4, pc}
-	.cfi_endproc
+	cmp	r2, r1
+	strb	r4, [r3, #1]!
+	bne	4b
+	pop	{r4}
+	bx	lr
 	.size __aeabi_memmove, . - __aeabi_memmove
diff --git a/newlib/libc/machine/arm/aeabi_memset-arm.S b/newlib/libc/machine/arm/aeabi_memset-arm.S
index 4993e9a..0f91e3a 100644
--- a/newlib/libc/machine/arm/aeabi_memset-arm.S
+++ b/newlib/libc/machine/arm/aeabi_memset-arm.S
@@ -33,81 +33,75 @@
 	ASM_ALIAS __aeabi_memset4 __aeabi_memset
 	ASM_ALIAS __aeabi_memset8 __aeabi_memset
 __aeabi_memset:
-	.cfi_startproc
 	tst	r0, #3
-	stmfd	sp!, {r4, r5, lr}
-	beq	.L14
+	stmfd	sp!, {r4, lr}
+	beq	10f
 	cmp	r1, #0
 	sub	r1, r1, #1
-	ldmeqfd	sp!, {r4, r5, pc}
-	uxtb	lr, r2
+	beq	9f
+	and	ip, r2, #255
 	mov	r3, r0
-	b	.L4
-.L6:
+	b	2f
+1:
 	cmp	r1, #0
-	mov	r1, ip
-	ldmeqfd	sp!, {r4, r5, pc}
-.L4:
-	strb	lr, [r3], #1
+	sub	r1, r1, #1
+	beq	9f
+2:
+	strb	ip, [r3], #1
 	tst	r3, #3
-	sub	ip, r1, #1
-	bne	.L6
-.L2:
+	bne	1b
+3:
 	cmp	r1, #3
-	bls	.L11
-	uxtb	lr, r2
-	cmp	r1, #15
+	bls	7f
+	and	lr, r2, #255
 	orr	lr, lr, lr, asl #8
+	cmp	r1, #15
 	orr	lr, lr, lr, asl #16
-	bls	.L15
-	sub	r4, r1, #16
+	bls	5f
+	mov	r4, r1
 	add	ip, r3, #16
-	mov	r4, r4, lsr #4
-	add	r5, r4, #2
-	add	r5, r3, r5, lsl #4
-.L10:
+4:
+	sub	r4, r4, #16
+	cmp	r4, #15
 	str	lr, [ip, #-16]
+	str	lr, [ip, #-12]
+	str	lr, [ip, #-8]
+	str	lr, [ip, #-4]
 	add	ip, ip, #16
-	str	lr, [ip, #-28]
-	str	lr, [ip, #-24]
-	str	lr, [ip, #-20]
-	cmp	ip, r5
-	bne	.L10
+	bhi	4b
+	sub	ip, r1, #16
+	bic	ip, ip, #15
 	and	r1, r1, #15
-	add	ip, r4, #1
+	add	ip, ip, #16
 	cmp	r1, #3
-	add	ip, r3, ip, lsl #4
-	bls	.L28
-.L9:
-	sub	r3, r1, #4
-	bic	r3, r3, #3
-	add	r3, r3, #4
-	add	r3, ip, r3
-.L12:
-	str	lr, [ip], #4
-	cmp	r3, ip
-	bne	.L12
+	add	r3, r3, ip
+	bls	7f
+5:
+	mov	r4, r3
+	mov	ip, r1
+6:
+	sub	ip, ip, #4
+	cmp	ip, #3
+	str	lr, [r4], #4
+	bhi	6b
+	sub	ip, r1, #4
+	bic	ip, ip, #3
+	add	ip, ip, #4
+	add	r3, r3, ip
 	and	r1, r1, #3
-.L11:
+7:
 	cmp	r1, #0
-	uxtbne	r2, r2
+	andne	r2, r2, #255
 	addne	r1, r3, r1
-	beq	.L29
-.L13:
+	beq	9f
+8:
 	strb	r2, [r3], #1
 	cmp	r3, r1
-	bne	.L13
-	ldmfd	sp!, {r4, r5, pc}
-.L29:
-	ldmfd	sp!, {r4, r5, pc}
-.L14:
+	bne	8b
+9:
+	ldmfd	sp!, {r4, lr}
+	bx	lr
+10:
 	mov	r3, r0
-	b	.L2
-.L15:
-	mov	ip, r3
-	b	.L9
-.L28:
-	mov	r3, ip
-	b	.L11
-	.cfi_endproc
+	b	3b
 	.size __aeabi_memset, . - __aeabi_memset
diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb.S b/newlib/libc/machine/arm/aeabi_memset-thumb.S
index 5a4b808..aa8f271 100644
--- a/newlib/libc/machine/arm/aeabi_memset-thumb.S
+++ b/newlib/libc/machine/arm/aeabi_memset-thumb.S
@@ -33,31 +33,31 @@
 	ASM_ALIAS __aeabi_memset4 __aeabi_memset
 	ASM_ALIAS __aeabi_memset8 __aeabi_memset
 __aeabi_memset:
-	.cfi_startproc
 	push	{r4, r5, r6, lr}
 	lsls	r3, r0, #30
-	beq	.L14
+	beq	10f
 	subs	r4, r1, #1
 	cmp	r1, #0
-	beq	.L16
-	uxtb	r6, r2
+	beq	9f
+	lsls	r5, r2, #24
+	lsrs	r5, r5, #24
 	movs	r3, r0
-	movs	r5, #3
-	b	.L4
-.L6:
+	movs	r6, #3
+	b	2f
+1:
 	subs	r1, r4, #1
 	cmp	r4, #0
-	beq	.L16
+	beq	9f
 	movs	r4, r1
-.L4:
+2:
 	adds	r3, r3, #1
 	subs	r1, r3, #1
-	strb	r6, [r1]
-	tst	r3, r5
-	bne	.L6
-.L2:
+	strb	r5, [r1]
+	tst	r3, r6
+	bne	1b
+3:
 	cmp	r4, #3
-	bls	.L11
+	bls	7f
 	movs	r5, #255
 	ands	r5, r2
 	lsls	r1, r5, #8
@@ -65,7 +65,7 @@ __aeabi_memset:
 	lsls	r1, r5, #16
 	orrs	r5, r1
 	cmp	r4, #15
-	bls	.L9
+	bls	5f
 	movs	r6, r4
 	subs	r6, r6, #16
 	lsrs	r6, r6, #4
@@ -73,46 +73,48 @@ __aeabi_memset:
 	lsls	r6, r6, #4
 	movs	r1, r3
 	adds	r3, r3, r6
-.L10:
+4:
 	str	r5, [r1]
 	str	r5, [r1, #4]
 	str	r5, [r1, #8]
 	str	r5, [r1, #12]
 	adds	r1, r1, #16
 	cmp	r3, r1
-	bne	.L10
+	bne	4b
 	movs	r1, #15
 	ands	r4, r1
 	cmp	r4, #3
-	bls	.L11
-.L9:
+	bls	7f
+5:
 	subs	r6, r4, #4
 	lsrs	r6, r6, #2
 	adds	r6, r6, #1
 	lsls	r6, r6, #2
 	movs	r1, r3
 	adds	r3, r3, r6
-.L12:
+6:
 	stmia	r1!, {r5}
 	cmp	r3, r1
-	bne	.L12
+	bne	6b
 	movs	r1, #3
 	ands	r4, r1
-.L11:
+7:
 	cmp	r4, #0
-	beq	.L16
-	uxtb	r2, r2
+	beq	9f
+	lsls	r2, r2, #24
+	lsrs	r2, r2, #24
 	adds	r4, r3, r4
-.L13:
+8:
 	strb	r2, [r3]
 	adds	r3, r3, #1
 	cmp	r4, r3
-	bne	.L13
-.L16:
-	pop	{r4, r5, r6, pc}
-.L14:
-	movs	r4, r1
+	bne	8b
+9:
+	pop	{r4, r5, r6}
+	pop	{r1}
+	bx	r1
+10:
 	movs	r3, r0
-	b	.L2
-	.cfi_endproc
+	movs	r4, r1
+	b	3b
 	.size __aeabi_memset, . - __aeabi_memset
diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb2.S b/newlib/libc/machine/arm/aeabi_memset-thumb2.S
index cb78f87..eaca1d8 100644
--- a/newlib/libc/machine/arm/aeabi_memset-thumb2.S
+++ b/newlib/libc/machine/arm/aeabi_memset-thumb2.S
@@ -33,35 +33,34 @@
 	ASM_ALIAS __aeabi_memset4 __aeabi_memset
 	ASM_ALIAS __aeabi_memset8 __aeabi_memset
 __aeabi_memset:
-	.cfi_startproc
 	push	{r4, r5, r6}
 	lsls	r4, r0, #30
-	beq	.L14
+	beq	10f
 	subs	r4, r1, #1
 	cmp	r1, #0
-	beq	.L16
+	beq	9f
 	uxtb	r5, r2
 	mov	r3, r0
-	b	.L4
-.L6:
+	b	2f
+1:
 	subs	r1, r4, #1
-	cbz	r4, .L16
+	cbz	r4, 9f
 	mov	r4, r1
-.L4:
+2:
 	strb	r5, [r3], #1
 	lsls	r1, r3, #30
-	bne	.L6
-.L2:
+	bne	1b
+3:
 	cmp	r4, #3
-	bls	.L11
+	bls	7f
 	uxtb	r5, r2
 	orr	r5, r5, r5, lsl #8
 	cmp	r4, #15
 	orr	r5, r5, r5, lsl #16
-	bls	.L9
-	add	r1, r3, #16
+	bls	5f
 	mov	r6, r4
-.L10:
+	add	r1, r3, #16
+4:
 	subs	r6, r6, #16
 	cmp	r6, #15
 	str	r5, [r1, #-16]
@@ -69,41 +68,40 @@ __aeabi_memset:
 	str	r5, [r1, #-8]
 	str	r5, [r1, #-4]
 	add	r1, r1, #16
-	bhi	.L10
+	bhi	4b
 	sub	r1, r4, #16
 	bic	r1, r1, #15
 	and	r4, r4, #15
 	adds	r1, r1, #16
 	cmp	r4, #3
 	add	r3, r3, r1
-	bls	.L11
-.L9:
+	bls	7f
+5:
 	mov	r6, r3
 	mov	r1, r4
-.L12:
+6:
 	subs	r1, r1, #4
 	cmp	r1, #3
 	str	r5, [r6], #4
-	bhi	.L12
+	bhi	6b
 	subs	r1, r4, #4
 	bic	r1, r1, #3
 	adds	r1, r1, #4
 	add	r3, r3, r1
 	and	r4, r4, #3
-.L11:
-	cbz	r4, .L16
+7:
+	cbz	r4, 9f
 	uxtb	r2, r2
 	add	r4, r4, r3
-.L13:
+8:
 	strb	r2, [r3], #1
 	cmp	r3, r4
-	bne	.L13
-.L16:
+	bne	8b
+9:
 	pop	{r4, r5, r6}
 	bx	lr
-.L14:
+10:
 	mov	r4, r1
 	mov	r3, r0
-	b	.L2
-	.cfi_endproc
+	b	3b
 	.size __aeabi_memset, . - __aeabi_memset


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2015-06-01 10:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-01 10:50 [newlib-cygwin] Update the assembler code to support old ARM architectures Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).