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

Diff of /avr-libc/libc/misc/ltoa.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     ltoa.S     ltoa.S
33    
# Line 69  _U(ltoa): Line 71  _U(ltoa):
71          push    ZH              ; keep &string          push    ZH              ; keep &string
72          push    ZL          push    ZL
73          cpi     a_radix, 2      ; no radix < 2          cpi     a_radix, 2      ; no radix < 2
74          brlt    conv_finished   ; return with \0          brlt    99f             ; return with \0
75          cpi     a_radix, 37     ; no radix > 36          cpi     a_radix, 37     ; no radix > 36
76          brge    conv_finished   ; return with \0          brge    99f             ; return with \0
77          mov     r_radix, a_radix; save radix          mov     r_radix, a_radix; save radix
78          clt                     ; make sure T flag is clear          clt                     ; make sure T flag is clear
79          cpi     r_radix, 10     ; decimal number?          cpi     r_radix, 10     ; decimal number?
80          brne    divide_loop          brne    1f
81          bst     a_val_hhi, 7    ; remember sign of decimal number          bst     a_val_hhi, 7    ; remember sign of decimal number
82          brtc    divide_loop     ; number positive? -> convert          brtc    1f              ; number positive? -> convert
83          com     a_val_hhi       ; make decimal number positive          com     a_val_hhi       ; make decimal number positive
84          com     a_val_hlo          com     a_val_hlo
85          com     a_val_hi          com     a_val_hi
# Line 85  _U(ltoa): Line 87  _U(ltoa):
87          sbci    a_val_hi,  lo8(-1)          sbci    a_val_hi,  lo8(-1)
88          sbci    a_val_hlo, lo8(-1)          sbci    a_val_hlo, lo8(-1)
89          sbci    a_val_hhi, lo8(-1)          sbci    a_val_hhi, lo8(-1)
90  divide_loop:  1:
91          mov     r18, r_radix    ; radix is divisor          mov     r18, r_radix    ; radix is divisor
92          clr     r19             ; remainder of number is dividend          clr     r19             ; remainder of number is dividend
93          clr     r20          clr     r20
# Line 97  divide_loop: Line 99  divide_loop:
99          pop     ZH          pop     ZH
100          subi    r22, 0xd0       ; + '0'          subi    r22, 0xd0       ; + '0'
101          cpi     r22, 0x3a       ; > '9' ?          cpi     r22, 0x3a       ; > '9' ?
102          brlt    L_10          brlt    10f
103          subi    r22, 0xd9       ; + 'a' - 10 - '0'          subi    r22, 0xd9       ; + 'a' - 10 - '0'
104  L_10:  10:
105          st      Z+, r22         ; write character to string in reverse order!          st      Z+, r22         ; write character to string in reverse order!
106          mov     a_val_lo, r18   ; quotient -> dividend          mov     a_val_lo, r18   ; quotient -> dividend
107          mov     a_val_hi, r19          mov     a_val_hi, r19
# Line 109  L_10: Line 111  L_10:
111          sbci    a_val_hi, 0          sbci    a_val_hi, 0
112          sbci    a_val_hlo, 0          sbci    a_val_hlo, 0
113          sbci    a_val_hhi,0     ; value == 0 ?          sbci    a_val_hhi,0     ; value == 0 ?
114          brne    divide_loop          brne    1b
115          brtc    conv_finished   ; decimal number positive -> finish          brtc    99f             ; decimal number positive -> finish
116          ldi     r28, '-'          ldi     r28, '-'
117          st      Z+, r28         ; write minus sign to string          st      Z+, r28         ; write minus sign to string
118  conv_finished:  99:
119          st      Z, __zero_reg__ ; terminate string          st      Z, __zero_reg__ ; terminate string
120          pop     a_val_hlo       ; restore &string as return value          pop     a_val_hlo       ; restore &string as return value
121          pop     a_val_hhi          pop     a_val_hhi

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