Merge "Fix assembler errors in generic arm strlen.c."

This commit is contained in:
Christopher Ferris 2013-07-17 00:19:42 +00:00 committed by Gerrit Code Review
commit f63c28f033

View File

@ -69,42 +69,50 @@ size_t strlen(const char *s)
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
#if !defined(__OPTIMIZE_SIZE__) #if !defined(__OPTIMIZE_SIZE__)
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
"bne 1f \n" "bne 1f \n"
"sub %[t], %[v], %[mask], lsr #7\n" "sub %[t], %[v], %[mask], lsr #7\n"
"and %[t], %[t], %[mask] \n" "and %[t], %[t], %[mask] \n"
"bics %[t], %[t], %[v] \n" "bics %[t], %[t], %[v] \n"
"it eq \n"
"ldreq %[v], [%[s]], #4 \n" "ldreq %[v], [%[s]], #4 \n"
#endif #endif
"beq 0b \n" "beq 0b \n"
@ -117,6 +125,7 @@ size_t strlen(const char *s)
"beq 2f \n" "beq 2f \n"
"add %[l], %[l], #1 \n" "add %[l], %[l], #1 \n"
"tst %[v], #0xFF0000 \n" "tst %[v], #0xFF0000 \n"
"it ne \n"
"addne %[l], %[l], #1 \n" "addne %[l], %[l], #1 \n"
"2: \n" "2: \n"
: [l]"=&r"(l), [v]"=&r"(v), [t]"=&r"(t), [s]"=&r"(u.b) : [l]"=&r"(l), [v]"=&r"(v), [t]"=&r"(t), [s]"=&r"(u.b)