| 26 |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 27 |
POSSIBILITY OF SUCH DAMAGE. */ |
POSSIBILITY OF SUCH DAMAGE. */ |
| 28 |
|
|
| 29 |
|
/* $Id$ */ |
| 30 |
|
|
| 31 |
/* |
/* |
| 32 |
strupr.S |
strupr.S |
| 33 |
Convert a string to upper case |
Convert a string to upper case |
| 56 |
|
|
| 57 |
#if !defined(DOXYGEN) |
#if !defined(DOXYGEN) |
| 58 |
|
|
| 59 |
.text |
.text |
| 60 |
.global _U(strupr) |
.global _U(strupr) |
| 61 |
.type _U(strupr), @function |
.type _U(strupr), @function |
| 62 |
|
|
| 63 |
_U(strupr): |
_U(strupr): |
| 64 |
LOAD_X(str_lo, str_hi) |
X_movw XL, str_lo |
| 65 |
.strupr_loop: |
.L_strupr_loop: |
| 66 |
LD temp, X ; get 1st character |
LD temp, X ; get 1st character |
| 67 |
TST temp ; is it end of string |
TST temp ; is it end of string |
| 68 |
BREQ .strupr_done |
BREQ .L_strupr_done |
| 69 |
ANDI temp, 0xDF ; make upper case |
ANDI temp, 0xDF ; make upper case |
| 70 |
CPI temp, 'A' ; test on [a .. z] |
CPI temp, 'A' ; test on [a .. z] |
| 71 |
BRLT .strupr_next |
BRLT .L_strupr_next |
| 72 |
CPI temp, 'Z'+1 |
CPI temp, 'Z'+1 |
| 73 |
BRGE .strupr_next |
BRGE .L_strupr_next |
| 74 |
ST X, temp ; ok, it is a char --> store it |
ST X, temp ; ok, it is a char --> store it |
| 75 |
.strupr_next: |
.L_strupr_next: |
| 76 |
ADIW XL, 1 ; point to next character |
ADIW XL, 1 ; point to next character |
| 77 |
RJMP .strupr_loop |
RJMP .L_strupr_loop |
| 78 |
.strupr_done: |
.L_strupr_done: |
| 79 |
RET |
RET |
| 80 |
.strupr_end: |
.L_strupr_end: |
| 81 |
.size _U(strupr), .strupr_end - _U(strupr) |
.size _U(strupr), .L_strupr_end - _U(strupr) |
| 82 |
|
|
| 83 |
#endif /* not DOXYGEN */ |
#endif /* not DOXYGEN */ |