diff options
author | Hale Wang <hale.wang@arm.com> | 2015-06-01 12:49:37 +0200 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-06-01 12:49:37 +0200 |
commit | 24e054c8c8ed59b4b1009f81dc2760b914ad5b00 (patch) | |
tree | 6a6adc6280e2ca5e7f486e12e1cbedf3618681b3 /newlib/libc/machine/arm/aeabi_memset-arm.S | |
parent | b27c7d1d9a21496b0584a6f1252f66539151b42a (diff) | |
download | cygnal-24e054c8c8ed59b4b1009f81dc2760b914ad5b00.tar.gz cygnal-24e054c8c8ed59b4b1009f81dc2760b914ad5b00.tar.bz2 cygnal-24e054c8c8ed59b4b1009f81dc2760b914ad5b00.zip |
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/libc/machine/arm/aeabi_memset-arm.S')
-rw-r--r-- | newlib/libc/machine/arm/aeabi_memset-arm.S | 108 |
1 files changed, 51 insertions, 57 deletions
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 |