Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorHale Wang <hale.wang@arm.com>2015-06-01 13:49:37 +0300
committerCorinna Vinschen <corinna@vinschen.de>2015-06-01 13:49:37 +0300
commit24e054c8c8ed59b4b1009f81dc2760b914ad5b00 (patch)
tree6a6adc6280e2ca5e7f486e12e1cbedf3618681b3 /newlib
parentb27c7d1d9a21496b0584a6f1252f66539151b42a (diff)
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>
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog10
-rw-r--r--newlib/libc/machine/arm/aeabi_memmove-arm.S45
-rw-r--r--newlib/libc/machine/arm/aeabi_memmove-thumb.S46
-rw-r--r--newlib/libc/machine/arm/aeabi_memmove-thumb2.S47
-rw-r--r--newlib/libc/machine/arm/aeabi_memset-arm.S108
-rw-r--r--newlib/libc/machine/arm/aeabi_memset-thumb.S66
-rw-r--r--newlib/libc/machine/arm/aeabi_memset-thumb2.S50
7 files changed, 189 insertions, 183 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 5d5d3fab4..28d571edb 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 371f21567..e6e9639fa 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 52e9e07b6..61a72581c 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 d408f8524..e9504437b 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 4993e9a78..0f91e3a26 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 5a4b808b4..aa8f2719e 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 cb78f8754..eaca1d8d7 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