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