avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] implementation of strstr()


From: Jochen Pernsteiner
Subject: [avr-gcc-list] implementation of strstr()
Date: Sat, 9 Jun 2001 12:06:19 +0100

Hello,

I have written an implementation of strstr() in assembler,
maybe somebody else finds it usefull, too.
This function is missing in avr-libc.
In string.h some functions have an attribute "__ATTR_PURE__".
I don't know what this means and if strstr() needs it too.
Marek?


Here is the code:

#include "macros.inc"

#define s1_hi r25
#define s1_lo r24
#define s2_hi r23
#define s2_lo r22
;r21 used as second temporary register

;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 r21, Z+
        tst r21
        breq .strstr_ret
        clr r24
        clr r25
.strstr_loop:
        ld __tmp_reg__, X+
        tst __tmp_reg__
        breq .strstr_ret0
        cp __tmp_reg__, r21
        brne .strstr_loop
        adiw r24, 1
        ld r21, Z+
        tst r21
        brne .strstr_loop
        sub XL, r24
        sbc XH, r25
        mov r24, XL
        mov r25, XH
        ret
.strstr_ret0:
        clr r24
        clr r25
.strstr_ret:
        ret

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









reply via email to

[Prev in Thread] Current Thread [Next in Thread]