[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-gcc-list] implementation of strstr(),
Jochen Pernsteiner <=