diff options
Diffstat (limited to 'newlib/libc/machine/mn10300/memchr.S')
-rw-r--r-- | newlib/libc/machine/mn10300/memchr.S | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/newlib/libc/machine/mn10300/memchr.S b/newlib/libc/machine/mn10300/memchr.S new file mode 100644 index 0000000..4a808f9 --- /dev/null +++ b/newlib/libc/machine/mn10300/memchr.S @@ -0,0 +1,76 @@ + .file "memchr.S" + + .section .text + .global _memchr + .type _memchr,@function +_memchr: + movm [d2,d3,a2,a3],(sp) + mov d0,a0 + mov d1,d2 + mov (28,sp),a1 +#ifndef __OPTIMIZE_SIZE__ + cmp 3,a1 + bls .L44 + mov a0,d3 + btst 3,d3 + bne .L44 + mov a0,a2 + mov 0,a3 + clr d1 +.L29: + setlb + mov a3,d0 + asl 8,d0 + mov d2,a3 + add d0,a3 + inc d1 + cmp 3,d1 + lls + cmp 3,a1 + bls .L48 +.L33: + mov (a2),d0 + mov a3,d3 + xor d3,d0 + mov d0,d1 + not d1 + add -16843009,d0 + and d1,d0 + btst -2139062144,d0 + beq .L34 + mov a2,a0 + clr d1 +.L38: + setlb + movbu (a0),d0 + cmp d2,d0 + beq .L47 + inc a0 + inc d1 + cmp 3,d1 + lls +.L34: + add -4,a1 + inc4 a2 + cmp 3,a1 + bhi .L33 +.L48: + mov a2,a0 +#endif +.L44: + cmp 0,a1 + beq .L50 +.L49: + setlb + movbu (a0),d0 + cmp d2,d0 + beq .L47 + inc a0 + sub 1,a1 + lne +.L50: + mov 0,a0 +.L47: + ret [d2,d3,a2,a3],16 +.Lfe1: + .size _memchr,.Lfe1-_memchr |