File: strstr.S

package info (click to toggle)
avr-libc 20020203-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,448 kB
  • ctags: 6,562
  • sloc: ansic: 7,631; asm: 4,424; sh: 2,703; makefile: 338; pascal: 289
file content (65 lines) | stat: -rw-r--r-- 1,451 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
   strstr.S
   Search string contained in a string

   Contributors:
     Created by Jochen Pernsteiner <jochen.pernsteiner@stud.fh-regensburg.de>

   THIS SOFTWARE IS NOT COPYRIGHTED

   This source code is offered for use in the public domain.  You may
   use, modify or distribute it freely.

   This code is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY.  ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
   DISCLAIMED.  This includes but is not limited to warranties of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/

#include "macros.inc"

#define s1_hi r25
#define s1_lo r24
#define s2_hi r23
#define s2_lo r22
#define tmp r21
#define ret_hi r25
#define ret_lo r24

;char *strstr(const char *s1, const char *s2)

.text
.global _U(strstr)
.type _U(strstr), @function
_U(strstr):
        LOAD_X(s1_lo, s1_hi)
        LOAD_Z(s2_lo, s2_hi)
        ld tmp, Z+
        tst tmp
        breq .strstr_ret
        clr ret_lo
        clr ret_hi
.strstr_loop:
        ld __tmp_reg__, X+
        tst __tmp_reg__
        breq .strstr_ret0
        cp __tmp_reg__, tmp
        brne .strstr_loop
        adiw ret_lo, 1
        ld tmp, Z+
        tst tmp
        brne .strstr_loop
        sub XL, ret_lo
        sbc XH, ret_hi
        mov ret_lo, XL
        mov ret_hi, XH
        ret
.strstr_ret0:
        clr ret_lo
        clr ret_hi
.strstr_ret:
        ret

.strstr_end:
.size _U(strstr), .strstr_end - _U(strstr)