Merge "Use unified syntax to compile with both llvm and gcc."
This commit is contained in:
		@@ -941,10 +941,6 @@ LOCAL_SRC_FILES := $(libc_bionic_src_files)
 | 
				
			|||||||
LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
					LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
				
			||||||
    -Wframe-larger-than=2048 \
 | 
					    -Wframe-larger-than=2048 \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# memcpy.S, memchr.S, etc. do not compile with Clang.
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm64 += -no-integrated-as
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
					LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
				
			||||||
LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
					LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
				
			||||||
LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
 | 
					LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
 | 
				
			||||||
@@ -972,10 +968,6 @@ LOCAL_SRC_FILES := $(libc_bionic_ndk_src_files)
 | 
				
			|||||||
LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
					LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
				
			||||||
    -Wframe-larger-than=2048 \
 | 
					    -Wframe-larger-than=2048 \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# memcpy.S, memchr.S, etc. do not compile with Clang.
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm64 += -no-integrated-as
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
					LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
				
			||||||
LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
					LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
				
			||||||
LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
 | 
					LOCAL_C_INCLUDES := $(libc_common_c_includes) bionic/libstdc++/include
 | 
				
			||||||
@@ -1024,10 +1016,6 @@ LOCAL_SRC_FILES := $(libc_pthread_src_files)
 | 
				
			|||||||
LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
					LOCAL_CFLAGS := $(libc_common_cflags) \
 | 
				
			||||||
    -Wframe-larger-than=2048 \
 | 
					    -Wframe-larger-than=2048 \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# memcpy.S, memchr.S, etc. do not compile with Clang.
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
 | 
					 | 
				
			||||||
LOCAL_CLANG_ASFLAGS_arm64 += -no-integrated-as
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
					LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 | 
				
			||||||
LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
					LOCAL_CPPFLAGS := $(libc_common_cppflags) -Wold-style-cast
 | 
				
			||||||
LOCAL_C_INCLUDES := $(libc_common_c_includes)
 | 
					LOCAL_C_INCLUDES := $(libc_common_c_includes)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .fpu    neon
 | 
					    .fpu    neon
 | 
				
			||||||
 | 
					    .syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(__memset_chk)
 | 
					ENTRY(__memset_chk)
 | 
				
			||||||
        cmp         r2, r3
 | 
					        cmp         r2, r3
 | 
				
			||||||
@@ -100,9 +101,9 @@ ENTRY(memset)
 | 
				
			|||||||
1:      bge         2f
 | 
					1:      bge         2f
 | 
				
			||||||
        vst1.32     {d0[0]}, [r0]!
 | 
					        vst1.32     {d0[0]}, [r0]!
 | 
				
			||||||
2:      movs        ip, r2, lsl #31
 | 
					2:      movs        ip, r2, lsl #31
 | 
				
			||||||
        strmib      r1, [r0], #1
 | 
					        strbmi      r1, [r0], #1
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        ldmfd       sp!, {r0}
 | 
					        ldmfd       sp!, {r0}
 | 
				
			||||||
        bx          lr
 | 
					        bx          lr
 | 
				
			||||||
END(memset)
 | 
					END(memset)
 | 
				
			||||||
@@ -131,11 +132,11 @@ ENTRY_PRIVATE(__memset_large_copy)
 | 
				
			|||||||
        orr         r1, r1, r1, lsr #16
 | 
					        orr         r1, r1, r1, lsr #16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        movs        r12, r3, lsl #31
 | 
					        movs        r12, r3, lsl #31
 | 
				
			||||||
        strcsb      r1, [r0], #1    /* can't use strh (alignment unknown) */
 | 
					        strbcs      r1, [r0], #1    /* can't use strh (alignment unknown) */
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        strmib      r1, [r0], #1
 | 
					        strbmi      r1, [r0], #1
 | 
				
			||||||
        subs        r2, r2, r3
 | 
					        subs        r2, r2, r3
 | 
				
			||||||
        ldmlsfd     sp!, {r0, r4-r7, lr}   /* return */
 | 
					        popls       {r0, r4-r7, lr}   /* return */
 | 
				
			||||||
        bxls        lr
 | 
					        bxls        lr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* align the destination to a cache-line */
 | 
					        /* align the destination to a cache-line */
 | 
				
			||||||
@@ -155,9 +156,9 @@ ENTRY_PRIVATE(__memset_large_copy)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionally writes 0 to 7 words (length in r3) */
 | 
					        /* conditionally writes 0 to 7 words (length in r3) */
 | 
				
			||||||
        movs        r3, r3, lsl #28
 | 
					        movs        r3, r3, lsl #28
 | 
				
			||||||
        stmcsia     r0!, {r1, lr}
 | 
					        stmcs       r0!, {r1, lr}
 | 
				
			||||||
        stmcsia     r0!, {r1, lr}
 | 
					        stmcs       r0!, {r1, lr}
 | 
				
			||||||
        stmmiia     r0!, {r1, lr}
 | 
					        stmmi       r0!, {r1, lr}
 | 
				
			||||||
        movs        r3, r3, lsl #2
 | 
					        movs        r3, r3, lsl #2
 | 
				
			||||||
        strcs       r1, [r0], #4
 | 
					        strcs       r1, [r0], #4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -172,13 +173,13 @@ ENTRY_PRIVATE(__memset_large_copy)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionally stores 0 to 31 bytes */
 | 
					        /* conditionally stores 0 to 31 bytes */
 | 
				
			||||||
        movs        r2, r2, lsl #28
 | 
					        movs        r2, r2, lsl #28
 | 
				
			||||||
        stmcsia     r0!, {r1,r3,r12,lr}
 | 
					        stmcs       r0!, {r1,r3,r12,lr}
 | 
				
			||||||
        stmmiia     r0!, {r1, lr}
 | 
					        stmmi       r0!, {r1, lr}
 | 
				
			||||||
        movs        r2, r2, lsl #2
 | 
					        movs        r2, r2, lsl #2
 | 
				
			||||||
        strcs       r1, [r0], #4
 | 
					        strcs       r1, [r0], #4
 | 
				
			||||||
        strmih      r1, [r0], #2
 | 
					        strhmi      r1, [r0], #2
 | 
				
			||||||
        movs        r2, r2, lsl #2
 | 
					        movs        r2, r2, lsl #2
 | 
				
			||||||
        strcsb      r1, [r0]
 | 
					        strbcs      r1, [r0]
 | 
				
			||||||
        ldmfd       sp!, {r0, r4-r7, lr}
 | 
					        ldmfd       sp!, {r0, r4-r7, lr}
 | 
				
			||||||
        bx          lr
 | 
					        bx          lr
 | 
				
			||||||
END(__memset_large_copy)
 | 
					END(__memset_large_copy)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,8 @@
 | 
				
			|||||||
 * Optimized memcmp() for Cortex-A9.
 | 
					 * Optimized memcmp() for Cortex-A9.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(memcmp)
 | 
					ENTRY(memcmp)
 | 
				
			||||||
        pld         [r0, #(CACHE_LINE_SIZE * 0)]
 | 
					        pld         [r0, #(CACHE_LINE_SIZE * 0)]
 | 
				
			||||||
        pld         [r0, #(CACHE_LINE_SIZE * 1)]
 | 
					        pld         [r0, #(CACHE_LINE_SIZE * 1)]
 | 
				
			||||||
@@ -161,25 +163,25 @@ ENTRY(memcmp)
 | 
				
			|||||||
        eors        r0, r0, ip
 | 
					        eors        r0, r0, ip
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       ip, [r1, #4]!
 | 
					        ldreq       ip, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, lr
 | 
					        eorseq      r0, r0, lr
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       lr, [r1, #4]!
 | 
					        ldreq       lr, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       ip, [r1, #4]!
 | 
					        ldreq       ip, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, lr
 | 
					        eorseq      r0, r0, lr
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       lr, [r1, #4]!
 | 
					        ldreq       lr, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       ip, [r1, #4]!
 | 
					        ldreq       ip, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, lr
 | 
					        eorseq      r0, r0, lr
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       lr, [r1, #4]!
 | 
					        ldreq       lr, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        ldreq       ip, [r1, #4]!
 | 
					        ldreq       ip, [r1, #4]!
 | 
				
			||||||
        eoreqs      r0, r0, lr
 | 
					        eorseq      r0, r0, lr
 | 
				
			||||||
        bne         2f
 | 
					        bne         2f
 | 
				
			||||||
        subs        r2, r2, #32
 | 
					        subs        r2, r2, #32
 | 
				
			||||||
        bhs         0b
 | 
					        bhs         0b
 | 
				
			||||||
@@ -263,17 +265,17 @@ ENTRY(memcmp)
 | 
				
			|||||||
        ldreq       lr, [r1], #4
 | 
					        ldreq       lr, [r1], #4
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        orreq       ip, ip, lr, lsl #16
 | 
					        orreq       ip, ip, lr, lsl #16
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        moveq       ip, lr, lsr #16
 | 
					        moveq       ip, lr, lsr #16
 | 
				
			||||||
        ldreq       lr, [r1], #4
 | 
					        ldreq       lr, [r1], #4
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        orreq       ip, ip, lr, lsl #16
 | 
					        orreq       ip, ip, lr, lsl #16
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        moveq       ip, lr, lsr #16
 | 
					        moveq       ip, lr, lsr #16
 | 
				
			||||||
        ldreq       lr, [r1], #4
 | 
					        ldreq       lr, [r1], #4
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        orreq       ip, ip, lr, lsl #16
 | 
					        orreq       ip, ip, lr, lsl #16
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        bne         7f
 | 
					        bne         7f
 | 
				
			||||||
        subs        r2, r2, #16
 | 
					        subs        r2, r2, #16
 | 
				
			||||||
        bhs         6b
 | 
					        bhs         6b
 | 
				
			||||||
@@ -317,7 +319,7 @@ ENTRY(memcmp)
 | 
				
			|||||||
        ldreq       r7, [r1], #4
 | 
					        ldreq       r7, [r1], #4
 | 
				
			||||||
        ldreq       r0, [r4], #4
 | 
					        ldreq       r0, [r4], #4
 | 
				
			||||||
        orreq       ip, ip, r7, lsl r6
 | 
					        orreq       ip, ip, r7, lsl r6
 | 
				
			||||||
        eoreqs      r0, r0, ip
 | 
					        eorseq      r0, r0, ip
 | 
				
			||||||
        bne         7f
 | 
					        bne         7f
 | 
				
			||||||
        subs        r2, r2, #8
 | 
					        subs        r2, r2, #8
 | 
				
			||||||
        bhs         6b
 | 
					        bhs         6b
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,8 @@
 | 
				
			|||||||
         * so we have to preserve R0.
 | 
					         * so we have to preserve R0.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         .syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(__memcpy_chk)
 | 
					ENTRY(__memcpy_chk)
 | 
				
			||||||
        cmp         r2, r3
 | 
					        cmp         r2, r3
 | 
				
			||||||
        bhi         __memcpy_chk_fail
 | 
					        bhi         __memcpy_chk_fail
 | 
				
			||||||
@@ -81,12 +83,12 @@ ENTRY(memcpy)
 | 
				
			|||||||
         */
 | 
					         */
 | 
				
			||||||
        movs        r12, r3, lsl #31
 | 
					        movs        r12, r3, lsl #31
 | 
				
			||||||
        sub         r2, r2, r3      /* we know that r3 <= r2 because r2 >= 4 */
 | 
					        sub         r2, r2, r3      /* we know that r3 <= r2 because r2 >= 4 */
 | 
				
			||||||
        ldrmib      r3, [r1], #1
 | 
					        ldrbmi      r3, [r1], #1
 | 
				
			||||||
        ldrcsb      r4, [r1], #1
 | 
					        ldrbcs      r4, [r1], #1
 | 
				
			||||||
        ldrcsb      r12,[r1], #1
 | 
					        ldrbcs      r12,[r1], #1
 | 
				
			||||||
        strmib      r3, [r0], #1
 | 
					        strbmi      r3, [r0], #1
 | 
				
			||||||
        strcsb      r4, [r0], #1
 | 
					        strbcs      r4, [r0], #1
 | 
				
			||||||
        strcsb      r12,[r0], #1
 | 
					        strbcs      r12,[r0], #1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Lsrc_aligned:
 | 
					.Lsrc_aligned:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -109,10 +111,10 @@ ENTRY(memcpy)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionally copies 0 to 7 words (length in r3) */
 | 
					        /* conditionally copies 0 to 7 words (length in r3) */
 | 
				
			||||||
        movs        r12, r3, lsl #28
 | 
					        movs        r12, r3, lsl #28
 | 
				
			||||||
        ldmcsia     r1!, {r4, r5, r6, r7}   /* 16 bytes */
 | 
					        ldmcs       r1!, {r4, r5, r6, r7}   /* 16 bytes */
 | 
				
			||||||
        ldmmiia     r1!, {r8, r9}           /*  8 bytes */
 | 
					        ldmmi       r1!, {r8, r9}           /*  8 bytes */
 | 
				
			||||||
        stmcsia     r0!, {r4, r5, r6, r7}
 | 
					        stmcs       r0!, {r4, r5, r6, r7}
 | 
				
			||||||
        stmmiia     r0!, {r8, r9}
 | 
					        stmmi       r0!, {r8, r9}
 | 
				
			||||||
        tst         r3, #0x4
 | 
					        tst         r3, #0x4
 | 
				
			||||||
        ldrne       r10,[r1], #4            /*  4 bytes */
 | 
					        ldrne       r10,[r1], #4            /*  4 bytes */
 | 
				
			||||||
        strne       r10,[r0], #4
 | 
					        strne       r10,[r0], #4
 | 
				
			||||||
@@ -177,18 +179,18 @@ ENTRY(memcpy)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionnaly copies 0 to 31 bytes */
 | 
					        /* conditionnaly copies 0 to 31 bytes */
 | 
				
			||||||
        movs        r12, r2, lsl #28
 | 
					        movs        r12, r2, lsl #28
 | 
				
			||||||
        ldmcsia     r1!, {r4, r5, r6, r7}   /* 16 bytes */
 | 
					        ldmcs       r1!, {r4, r5, r6, r7}   /* 16 bytes */
 | 
				
			||||||
        ldmmiia     r1!, {r8, r9}           /*  8 bytes */
 | 
					        ldmmi       r1!, {r8, r9}           /*  8 bytes */
 | 
				
			||||||
        stmcsia     r0!, {r4, r5, r6, r7}
 | 
					        stmcs       r0!, {r4, r5, r6, r7}
 | 
				
			||||||
        stmmiia     r0!, {r8, r9}
 | 
					        stmmi       r0!, {r8, r9}
 | 
				
			||||||
        movs        r12, r2, lsl #30
 | 
					        movs        r12, r2, lsl #30
 | 
				
			||||||
        ldrcs       r3, [r1], #4            /*  4 bytes */
 | 
					        ldrcs       r3, [r1], #4            /*  4 bytes */
 | 
				
			||||||
        ldrmih      r4, [r1], #2            /*  2 bytes */
 | 
					        ldrhmi      r4, [r1], #2            /*  2 bytes */
 | 
				
			||||||
        strcs       r3, [r0], #4
 | 
					        strcs       r3, [r0], #4
 | 
				
			||||||
        strmih      r4, [r0], #2
 | 
					        strhmi      r4, [r0], #2
 | 
				
			||||||
        tst         r2, #0x1
 | 
					        tst         r2, #0x1
 | 
				
			||||||
        ldrneb      r3, [r1]                /*  last byte  */
 | 
					        ldrbne      r3, [r1]                /*  last byte  */
 | 
				
			||||||
        strneb      r3, [r0]
 | 
					        strbne      r3, [r0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* we're done! restore everything and return */
 | 
					        /* we're done! restore everything and return */
 | 
				
			||||||
1:      ldmfd       sp!, {r5-r11}
 | 
					1:      ldmfd       sp!, {r5-r11}
 | 
				
			||||||
@@ -228,11 +230,11 @@ ENTRY(memcpy)
 | 
				
			|||||||
         * becomes aligned to 32 bits (r5 = nb of words to copy for alignment)
 | 
					         * becomes aligned to 32 bits (r5 = nb of words to copy for alignment)
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        movs        r5, r5, lsl #31
 | 
					        movs        r5, r5, lsl #31
 | 
				
			||||||
        strmib      r3, [r0], #1
 | 
					        strbmi      r3, [r0], #1
 | 
				
			||||||
        movmi       r3, r3, lsr #8
 | 
					        movmi       r3, r3, lsr #8
 | 
				
			||||||
        strcsb      r3, [r0], #1
 | 
					        strbcs      r3, [r0], #1
 | 
				
			||||||
        movcs       r3, r3, lsr #8
 | 
					        movcs       r3, r3, lsr #8
 | 
				
			||||||
        strcsb      r3, [r0], #1
 | 
					        strbcs      r3, [r0], #1
 | 
				
			||||||
        movcs       r3, r3, lsr #8
 | 
					        movcs       r3, r3, lsr #8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cmp         r2, #4
 | 
					        cmp         r2, #4
 | 
				
			||||||
@@ -363,23 +365,23 @@ ENTRY(memcpy)
 | 
				
			|||||||
.Lpartial_word_tail:
 | 
					.Lpartial_word_tail:
 | 
				
			||||||
        /* we have a partial word in the input buffer */
 | 
					        /* we have a partial word in the input buffer */
 | 
				
			||||||
        movs        r5, lr, lsl #(31-3)
 | 
					        movs        r5, lr, lsl #(31-3)
 | 
				
			||||||
        strmib      r3, [r0], #1
 | 
					        strbmi      r3, [r0], #1
 | 
				
			||||||
        movmi       r3, r3, lsr #8
 | 
					        movmi       r3, r3, lsr #8
 | 
				
			||||||
        strcsb      r3, [r0], #1
 | 
					        strbcs      r3, [r0], #1
 | 
				
			||||||
        movcs       r3, r3, lsr #8
 | 
					        movcs       r3, r3, lsr #8
 | 
				
			||||||
        strcsb      r3, [r0], #1
 | 
					        strbcs      r3, [r0], #1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Refill spilled registers from the stack. Don't update sp. */
 | 
					        /* Refill spilled registers from the stack. Don't update sp. */
 | 
				
			||||||
        ldmfd       sp, {r5-r11}
 | 
					        ldmfd       sp, {r5-r11}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Lcopy_last_3_and_return:
 | 
					.Lcopy_last_3_and_return:
 | 
				
			||||||
        movs        r2, r2, lsl #31 /* copy remaining 0, 1, 2 or 3 bytes */
 | 
					        movs        r2, r2, lsl #31 /* copy remaining 0, 1, 2 or 3 bytes */
 | 
				
			||||||
        ldrmib      r2, [r1], #1
 | 
					        ldrbmi      r2, [r1], #1
 | 
				
			||||||
        ldrcsb      r3, [r1], #1
 | 
					        ldrbcs      r3, [r1], #1
 | 
				
			||||||
        ldrcsb      r12,[r1]
 | 
					        ldrbcs      r12,[r1]
 | 
				
			||||||
        strmib      r2, [r0], #1
 | 
					        strbmi      r2, [r0], #1
 | 
				
			||||||
        strcsb      r3, [r0], #1
 | 
					        strbcs      r3, [r0], #1
 | 
				
			||||||
        strcsb      r12,[r0]
 | 
					        strbcs      r12,[r0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* we're done! restore sp and spilled registers and return */
 | 
					        /* we're done! restore sp and spilled registers and return */
 | 
				
			||||||
        add         sp,  sp, #28
 | 
					        add         sp,  sp, #28
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,8 @@
 | 
				
			|||||||
         * memset() returns its first argument.
 | 
					         * memset() returns its first argument.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         .syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(__memset_chk)
 | 
					ENTRY(__memset_chk)
 | 
				
			||||||
        cmp         r2, r3
 | 
					        cmp         r2, r3
 | 
				
			||||||
        bls         done
 | 
					        bls         done
 | 
				
			||||||
@@ -76,11 +78,11 @@ ENTRY(memset)
 | 
				
			|||||||
        orr         r1, r1, r1, lsr #16
 | 
					        orr         r1, r1, r1, lsr #16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        movs        r12, r3, lsl #31
 | 
					        movs        r12, r3, lsl #31
 | 
				
			||||||
        strcsb      r1, [r0], #1    /* can't use strh (alignment unknown) */
 | 
					        strbcs      r1, [r0], #1    /* can't use strh (alignment unknown) */
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        strmib      r1, [r0], #1
 | 
					        strbmi      r1, [r0], #1
 | 
				
			||||||
        subs        r2, r2, r3
 | 
					        subs        r2, r2, r3
 | 
				
			||||||
        ldmlsfd     sp!, {r0, r4-r7, lr}    /* return */
 | 
					        popls       {r0, r4-r7, lr}    /* return */
 | 
				
			||||||
        bxls        lr
 | 
					        bxls        lr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* align the destination to a cache-line */
 | 
					        /* align the destination to a cache-line */
 | 
				
			||||||
@@ -100,9 +102,9 @@ ENTRY(memset)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionally writes 0 to 7 words (length in r3) */
 | 
					        /* conditionally writes 0 to 7 words (length in r3) */
 | 
				
			||||||
        movs        r3, r3, lsl #28
 | 
					        movs        r3, r3, lsl #28
 | 
				
			||||||
        stmcsia     r0!, {r1, lr}
 | 
					        stmcs       r0!, {r1, lr}
 | 
				
			||||||
        stmcsia     r0!, {r1, lr}
 | 
					        stmcs       r0!, {r1, lr}
 | 
				
			||||||
        stmmiia     r0!, {r1, lr}
 | 
					        stmmi       r0!, {r1, lr}
 | 
				
			||||||
        movs        r3, r3, lsl #2
 | 
					        movs        r3, r3, lsl #2
 | 
				
			||||||
        strcs       r1, [r0], #4
 | 
					        strcs       r1, [r0], #4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,13 +119,13 @@ ENTRY(memset)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* conditionally stores 0 to 31 bytes */
 | 
					        /* conditionally stores 0 to 31 bytes */
 | 
				
			||||||
        movs        r2, r2, lsl #28
 | 
					        movs        r2, r2, lsl #28
 | 
				
			||||||
        stmcsia     r0!, {r1,r3,r12,lr}
 | 
					        stmcs       r0!, {r1,r3,r12,lr}
 | 
				
			||||||
        stmmiia     r0!, {r1, lr}
 | 
					        stmmi       r0!, {r1, lr}
 | 
				
			||||||
        movs        r2, r2, lsl #2
 | 
					        movs        r2, r2, lsl #2
 | 
				
			||||||
        strcs       r1, [r0], #4
 | 
					        strcs       r1, [r0], #4
 | 
				
			||||||
        strmih      r1, [r0], #2
 | 
					        strhmi      r1, [r0], #2
 | 
				
			||||||
        movs        r2, r2, lsl #2
 | 
					        movs        r2, r2, lsl #2
 | 
				
			||||||
        strcsb      r1, [r0]
 | 
					        strbcs      r1, [r0]
 | 
				
			||||||
        ldmfd       sp!, {r0, r4-r7, lr}
 | 
					        ldmfd       sp!, {r0, r4-r7, lr}
 | 
				
			||||||
        bx          lr
 | 
					        bx          lr
 | 
				
			||||||
END(memset)
 | 
					END(memset)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,8 @@
 | 
				
			|||||||
#include <machine/cpu-features.h>
 | 
					#include <machine/cpu-features.h>
 | 
				
			||||||
#include <private/bionic_asm.h>
 | 
					#include <private/bionic_asm.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(strcpy)
 | 
					ENTRY(strcpy)
 | 
				
			||||||
	pld	[r1, #0]
 | 
						pld	[r1, #0]
 | 
				
			||||||
	eor	r2, r0, r1
 | 
						eor	r2, r0, r1
 | 
				
			||||||
@@ -108,15 +110,15 @@ ENTRY(strcpy)
 | 
				
			|||||||
#ifdef __ARMEB__
 | 
					#ifdef __ARMEB__
 | 
				
			||||||
	tst	r2, #0xff00
 | 
						tst	r2, #0xff00
 | 
				
			||||||
	iteet	ne
 | 
						iteet	ne
 | 
				
			||||||
	strneh	r2, [ip], #2
 | 
						strhne	r2, [ip], #2
 | 
				
			||||||
	lsreq	r2, r2, #8
 | 
						lsreq	r2, r2, #8
 | 
				
			||||||
	streqb	r2, [ip]
 | 
						strbeq	r2, [ip]
 | 
				
			||||||
	tstne	r2, #0xff
 | 
						tstne	r2, #0xff
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	tst	r2, #0xff
 | 
						tst	r2, #0xff
 | 
				
			||||||
	itet	ne
 | 
						itet	ne
 | 
				
			||||||
	strneh	r2, [ip], #2
 | 
						strhne	r2, [ip], #2
 | 
				
			||||||
	streqb	r2, [ip]
 | 
						strbeq	r2, [ip]
 | 
				
			||||||
	tstne	r2, #0xff00
 | 
						tstne	r2, #0xff00
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	bne	5b
 | 
						bne	5b
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .fpu    neon
 | 
					    .fpu    neon
 | 
				
			||||||
 | 
					    .syntax unified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(__memset_chk)
 | 
					ENTRY(__memset_chk)
 | 
				
			||||||
        cmp         r2, r3
 | 
					        cmp         r2, r3
 | 
				
			||||||
@@ -98,9 +99,9 @@ ENTRY(memset)
 | 
				
			|||||||
1:      bge         2f
 | 
					1:      bge         2f
 | 
				
			||||||
        vst1.32     {d0[0]}, [r0]!
 | 
					        vst1.32     {d0[0]}, [r0]!
 | 
				
			||||||
2:      movs        ip, r2, lsl #31
 | 
					2:      movs        ip, r2, lsl #31
 | 
				
			||||||
        strmib      r1, [r0], #1
 | 
					        strbmi      r1, [r0], #1
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        strcsb      r1, [r0], #1
 | 
					        strbcs      r1, [r0], #1
 | 
				
			||||||
        ldmfd       sp!, {r0}
 | 
					        ldmfd       sp!, {r0}
 | 
				
			||||||
        bx          lr
 | 
					        bx          lr
 | 
				
			||||||
END(memset)
 | 
					END(memset)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,7 +101,7 @@ ENTRY(memchr)
 | 
				
			|||||||
	and	vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
 | 
						and	vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
 | 
				
			||||||
	addp	vend.16b, vhas_chr1.16b, vhas_chr2.16b		/* 256->128 */
 | 
						addp	vend.16b, vhas_chr1.16b, vhas_chr2.16b		/* 256->128 */
 | 
				
			||||||
	addp	vend.16b, vend.16b, vend.16b			/* 128->64 */
 | 
						addp	vend.16b, vend.16b, vend.16b			/* 128->64 */
 | 
				
			||||||
	mov	synd, vend.2d[0]
 | 
						mov	synd, vend.d[0]
 | 
				
			||||||
	/* Clear the soff*2 lower bits */
 | 
						/* Clear the soff*2 lower bits */
 | 
				
			||||||
	lsl	tmp, soff, #1
 | 
						lsl	tmp, soff, #1
 | 
				
			||||||
	lsr	synd, synd, tmp
 | 
						lsr	synd, synd, tmp
 | 
				
			||||||
@@ -121,7 +121,7 @@ ENTRY(memchr)
 | 
				
			|||||||
	/* Use a fast check for the termination condition */
 | 
						/* Use a fast check for the termination condition */
 | 
				
			||||||
	orr	vend.16b, vhas_chr1.16b, vhas_chr2.16b
 | 
						orr	vend.16b, vhas_chr1.16b, vhas_chr2.16b
 | 
				
			||||||
	addp	vend.2d, vend.2d, vend.2d
 | 
						addp	vend.2d, vend.2d, vend.2d
 | 
				
			||||||
	mov	synd, vend.2d[0]
 | 
						mov	synd, vend.d[0]
 | 
				
			||||||
	/* We're not out of data, loop if we haven't found the character */
 | 
						/* We're not out of data, loop if we haven't found the character */
 | 
				
			||||||
	cbz	synd, .Lloop
 | 
						cbz	synd, .Lloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,7 +131,7 @@ ENTRY(memchr)
 | 
				
			|||||||
	and	vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
 | 
						and	vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
 | 
				
			||||||
	addp	vend.16b, vhas_chr1.16b, vhas_chr2.16b		/* 256->128 */
 | 
						addp	vend.16b, vhas_chr1.16b, vhas_chr2.16b		/* 256->128 */
 | 
				
			||||||
	addp	vend.16b, vend.16b, vend.16b			/* 128->64 */
 | 
						addp	vend.16b, vend.16b, vend.16b			/* 128->64 */
 | 
				
			||||||
	mov	synd, vend.2d[0]
 | 
						mov	synd, vend.d[0]
 | 
				
			||||||
	/* Only do the clear for the last possible block */
 | 
						/* Only do the clear for the last possible block */
 | 
				
			||||||
	b.hi	.Ltail
 | 
						b.hi	.Ltail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,7 +109,7 @@ ENTRY(strchr)
 | 
				
			|||||||
	addp	vend1.16b, vend1.16b, vend2.16b		// 128->64
 | 
						addp	vend1.16b, vend1.16b, vend2.16b		// 128->64
 | 
				
			||||||
	lsr	tmp1, tmp3, tmp1
 | 
						lsr	tmp1, tmp3, tmp1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mov	tmp3, vend1.2d[0]
 | 
						mov	tmp3, vend1.d[0]
 | 
				
			||||||
	bic	tmp1, tmp3, tmp1	// Mask padding bits.
 | 
						bic	tmp1, tmp3, tmp1	// Mask padding bits.
 | 
				
			||||||
	cbnz	tmp1, .Ltail
 | 
						cbnz	tmp1, .Ltail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,7 +124,7 @@ ENTRY(strchr)
 | 
				
			|||||||
	orr	vend2.16b, vhas_nul2.16b, vhas_chr2.16b
 | 
						orr	vend2.16b, vhas_nul2.16b, vhas_chr2.16b
 | 
				
			||||||
	orr	vend1.16b, vend1.16b, vend2.16b
 | 
						orr	vend1.16b, vend1.16b, vend2.16b
 | 
				
			||||||
	addp	vend1.2d, vend1.2d, vend1.2d
 | 
						addp	vend1.2d, vend1.2d, vend1.2d
 | 
				
			||||||
	mov	tmp1, vend1.2d[0]
 | 
						mov	tmp1, vend1.d[0]
 | 
				
			||||||
	cbz	tmp1, .Lloop
 | 
						cbz	tmp1, .Lloop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Termination condition found.  Now need to establish exactly why
 | 
						/* Termination condition found.  Now need to establish exactly why
 | 
				
			||||||
@@ -138,7 +138,7 @@ ENTRY(strchr)
 | 
				
			|||||||
	addp	vend1.16b, vend1.16b, vend2.16b		// 256->128
 | 
						addp	vend1.16b, vend1.16b, vend2.16b		// 256->128
 | 
				
			||||||
	addp	vend1.16b, vend1.16b, vend2.16b		// 128->64
 | 
						addp	vend1.16b, vend1.16b, vend2.16b		// 128->64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mov	tmp1, vend1.2d[0]
 | 
						mov	tmp1, vend1.d[0]
 | 
				
			||||||
.Ltail:
 | 
					.Ltail:
 | 
				
			||||||
	/* Count the trailing zeros, by bit reversing...  */
 | 
						/* Count the trailing zeros, by bit reversing...  */
 | 
				
			||||||
	rbit	tmp1, tmp1
 | 
						rbit	tmp1, tmp1
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user