/[avr-libc]/avr-libc/libc/misc/itoa.S
ViewVC logotype

Diff of /avr-libc/libc/misc/itoa.S

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by joerg_wunsch, Tue Sep 13 13:29:54 2005 UTC revision 1.5 by aesok, Wed Oct 12 20:24:45 2005 UTC
# Line 26  Line 26 
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     itoa.S     itoa.S
33    
# Line 66  _U(itoa): Line 68  _U(itoa):
68          mov     r_lstr_hi, ZH          mov     r_lstr_hi, ZH
69          clt                     ; make sure T flag is clear          clt                     ; make sure T flag is clear
70          cpi     r_radix, 2      ; no radix < 2          cpi     r_radix, 2      ; no radix < 2
71          brlt    terminate       ; return with \0          brlt    99f             ; return with \0
72          cpi     r_radix, 37     ; no radix > 36          cpi     r_radix, 37     ; no radix > 36
73          brge    terminate       ; return with \0          brge    99f             ; return with \0
74          cpi     r_radix, 10     ; decimal number ?          cpi     r_radix, 10     ; decimal number ?
75          brne    divide_loop     ; no -> convert          brne    1f              ; no -> convert
76          bst     r_val_hi, 7     ; for decimal numbers remember sign of value          bst     r_val_hi, 7     ; for decimal numbers remember sign of value
77          brtc    divide_loop     ; positive number -> convert          brtc    1f              ; positive number -> convert
78          com     r_val_hi        ; negative number -> make positive          com     r_val_hi        ; negative number -> make positive
79          neg     r_val_lo          neg     r_val_lo
80          sbci    r_val_hi, 0xff          sbci    r_val_hi, 0xff
81  divide_loop:  1:
82          mov     r22, r_radix    ; radix          mov     r22, r_radix    ; radix
83          clr     r23             ;  dividend in r25:r24, divisor in r23:r22          clr     r23             ;  dividend in r25:r24, divisor in r23:r22
84          XCALL   _U(__udivmodhi4);  quotient in r23:r22, remainder in r25:r24          XCALL   _U(__udivmodhi4);  quotient in r23:r22, remainder in r25:r24
# Line 84  divide_loop: Line 86  divide_loop:
86                                  ;  call-used but preserved: r18, r19, r20, r30, r31                                  ;  call-used but preserved: r18, r19, r20, r30, r31
87          subi    r24, 0xd0       ; + '0'          subi    r24, 0xd0       ; + '0'
88          cpi     r24, 0x3a       ; > '9' ?          cpi     r24, 0x3a       ; > '9' ?
89          brlt    L_10          brlt    10f
90          subi    r24, 0xd9       ; + 'a' - 10 - '0'          subi    r24, 0xd9       ; + 'a' - 10 - '0'
91  L_10:  10:
92          st      Z+, r24         ; write char to string in reverse order          st      Z+, r24         ; write char to string in reverse order
93          mov     r_val_lo, r22   ; quotient -> dividend          mov     r_val_lo, r22   ; quotient -> dividend
94          mov     r_val_hi, r23          mov     r_val_hi, r23
95          sbiw    r_val_lo, 0     ; value == 0 ?          sbiw    r_val_lo, 0     ; value == 0 ?
96          brne    divide_loop          brne    1b
97          brtc    terminate       ; T flag clear? -> positive number                        brtc    99f             ; T flag clear? -> positive number              
98          ldi     r21, '-'          ldi     r21, '-'
99          st      Z+, r21         ; write minus sign to string          st      Z+, r21         ; write minus sign to string
100  terminate:                      ; restore &string as return value  99:    
101          mov     r_val_hi, r_lstr_hi          mov     r_val_hi, r_lstr_hi     ; restore &string as return value
102          mov     r_val_lo, r_lstr_lo          mov     r_val_lo, r_lstr_lo
103          st      Z, __zero_reg__ ; terminate string          st      Z, __zero_reg__ ; terminate string
104          XJMP    _U(strrev)      ; reverse string          XJMP    _U(strrev)      ; reverse string

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26