.section .text.parse_base10 .global _parse_base10 _parse_base10: /* r8 = pointer to text ; r1 = number */ /* return r0 = number of digits */ mov #0,r1 /* r1: accumulated number */ mov r8,r0 /* r0: number of digits */ parse_base10_loop: mov.b @r8+,r2 add #-48,r2 /* ascii '0' */ cmp/pz r2 /* Rn >= 0 (signed) (r2 >= 0 ) */ bf/s parse_base10_rts mov #9,r4 /* const 9 */ cmp/ge r2,r4 /* Rn >= Rm (signed) ( 9 >= r2) */ bf/s parse_base10_rts mov #10,r4 /* const 10 */ mulu.w r1,r4 sts macl,r1 bra parse_base10_loop add r2,r1 parse_base10_rts: rts sub r8,r0