diff options
Diffstat (limited to 'libc/string/avr32/strlen.S')
-rw-r--r-- | libc/string/avr32/strlen.S | 90 |
1 files changed, 45 insertions, 45 deletions
diff --git a/libc/string/avr32/strlen.S b/libc/string/avr32/strlen.S index d2808998d..5223e5365 100644 --- a/libc/string/avr32/strlen.S +++ b/libc/string/avr32/strlen.S @@ -10,53 +10,53 @@ #define str r12 - .text - .global strlen - .type strlen, @function + .text + .global strlen + .type strlen, @function strlen: - mov r11, r12 - - mov r9, str - andl r9, 3, COH - brne .Lunaligned_str - -1: ld.w r8, str++ - tnbz r8 - brne 1b - - sub r12, r11 - bfextu r9, r8, 24, 8 - cp.w r9, 0 - subeq r12, 4 - reteq r12 - bfextu r9, r8, 16, 8 - cp.w r9, 0 - subeq r12, 3 - reteq r12 - bfextu r9, r8, 8, 8 - cp.w r9, 0 - subeq r12, 2 - reteq r12 - sub r12, 1 - retal r12 + mov r11, r12 + + mov r9, str + andl r9, 3, COH + brne .Lunaligned_str + +1: ld.w r8, str++ + tnbz r8 + brne 1b + + sub r12, r11 + bfextu r9, r8, 24, 8 + cp.w r9, 0 + subeq r12, 4 + reteq r12 + bfextu r9, r8, 16, 8 + cp.w r9, 0 + subeq r12, 3 + reteq r12 + bfextu r9, r8, 8, 8 + cp.w r9, 0 + subeq r12, 2 + reteq r12 + sub r12, 1 + retal r12 .Lunaligned_str: - add pc, pc, r9 << 3 - sub r0, r0, 0 /* 4-byte nop */ - ld.ub r8, str++ - sub r8, r8, 0 - breq 1f - ld.ub r8, str++ - sub r8, r8, 0 - breq 1f - ld.ub r8, str++ - sub r8, r8, 0 - brne 1b - -1: sub r12, 1 - sub r12, r11 - retal r12 - - .size strlen, . - strlen + add pc, pc, r9 << 3 + sub r0, r0, 0 /* 4-byte nop */ + ld.ub r8, str++ + sub r8, r8, 0 + breq 1f + ld.ub r8, str++ + sub r8, r8, 0 + breq 1f + ld.ub r8, str++ + sub r8, r8, 0 + brne 1b + +1: sub r12, 1 + sub r12, r11 + retal r12 + + .size strlen, . - strlen libc_hidden_def(strlen) |