~ubuntu-branches/ubuntu/gutsy/avr-libc/gutsy

« back to all changes in this revision

Viewing changes to libc/misc/ultoa.S

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2006-11-15 21:12:47 UTC
  • mfrom: (3.1.2 feisty)
  • Revision ID: james.westby@ubuntu.com-20061115211247-b7qhgnb6o49v5zsg
Tags: 1:1.4.5-2
* Convertion to debheler fixed (closes: #398220)
* Reference to /usr/share/common-licenses in copyright file

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
27
  POSSIBILITY OF SUCH DAMAGE. */
28
28
 
 
29
/* $Id: ultoa.S,v 1.7 2005/10/19 20:12:45 aesok Exp $ */
 
30
 
29
31
/*
30
32
   ultoa.S
31
33
 
39
41
  ----------------------------------------------------------------------
40
42
*/
41
43
 
42
 
#if !defined(DOXYGEN)
 
44
#if !defined(__DOXYGEN__)
43
45
 
44
46
#include "macros.inc"
45
47
#include "ctoasm.inc"
62
64
 
63
65
 
64
66
_U(ultoa):
65
 
        mov     ZH, a_str_hi    ; Z = &string
66
 
        mov     ZL, a_str_lo
 
67
        X_movw  ZL, a_str_lo    ; Z = &string
67
68
        push    r28             ; save r28
68
69
        push    ZH              ; keep &string
69
70
        push    ZL
70
71
        cpi     a_radix, 2      ; no radix < 2
71
 
        brlt    conv_finished   ; return with \0
 
72
        brlt    99f             ; return with \0
72
73
        cpi     a_radix, 37     ; no radix > 36
73
 
        brge    conv_finished   ; return with \0
 
74
        brge    99f             ; return with \0
74
75
        mov     r_radix, a_radix; save radix
75
 
divide_loop:
 
76
1:
76
77
        mov     r18, r_radix    ; radix is divisor
77
78
        clr     r19             ; remainder of number is dividend
78
79
        clr     r20
84
85
        pop     ZH
85
86
        subi    r22, 0xd0       ; + '0'
86
87
        cpi     r22, 0x3a       ; > '9' ?
87
 
        brlt    L_10
 
88
        brlt    10f
88
89
        subi    r22, 0xd9       ; + 'a' - 10 - '0'
89
 
L_10:
 
90
10:
90
91
        st      Z+, r22         ; write character to string in reverse order!
91
 
        mov     a_val_lo, r18   ; quotient -> dividend
92
 
        mov     a_val_hi, r19
93
 
        mov     a_val_hlo, r20
94
 
        mov     a_val_hhi, r21
 
92
        X_movw  a_val_lo, r18   ; quotient -> dividend
 
93
        X_movw  a_val_hlo, r20
95
94
        subi    a_val_lo, 0
96
95
        sbci    a_val_hi, 0
97
96
        sbci    a_val_hlo, 0
98
97
        sbci    a_val_hhi,0     ; value == 0 ?
99
 
        brne    divide_loop
100
 
conv_finished:
 
98
        brne    1b
 
99
99:
101
100
        st      Z, __zero_reg__ ; terminate string
102
101
        pop     a_val_hlo       ; restore &string as return value
103
102
        pop     a_val_hhi
105
104
        XJMP    _U(strrev)      ; reverse string
106
105
        .endfunc
107
106
 
108
 
#endif /* not DOXYGEN */
 
107
#endif /* not __DOXYGEN__ */