]> git.sur5r.net Git - cc65/commitdiff
Shrink atoi by using negeax instead of inlined code.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 15 Sep 2009 21:25:44 +0000 (21:25 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 15 Sep 2009 21:25:44 +0000 (21:25 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4179 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/atoi.s

index 6732755733e75757241d0e21ae4f2c83e461aebb..d55ddb9e8b71c04654c2e7a445b9238d923a58ec 100644 (file)
@@ -6,7 +6,7 @@
 ;
 
        .export         _atoi, _atol
-               .import         __ctype
+               .import         negeax, __ctype
        .importzp       sreg, ptr1, ptr2, tmp1
 
         .include        "ctype.inc"
@@ -111,48 +111,28 @@ L7:       iny
        inc     ptr1+1
        bne     L6
 
-; Conversion done. Be shure to negate the value if needed.
+; Conversion done. Load the low 16 bit into A/X
 
-L8:    lda     ptr2
-       ldx     ptr2+1
-       ldy     tmp1            ; sign
-       beq     L9
+L8:     lda     ptr2
+        ldx     ptr2+1
 
-; Negate the 32 bit value in ptr2/sreg
+; Negate the value if necessary, otherwise we're done
 
-       sec
-       lda     ptr2
-       eor     #$FF
-       adc     #0
-       sta     ptr2
-       lda     ptr2+1
-       eor     #$FF
-       adc     #0
-       sta     ptr2+1
-       lda     sreg
-       eor     #$FF
-       adc     #0
-       sta     sreg
-       lda     sreg+1
-       eor     #$FF
-       adc     #0
-       sta     sreg+1
+       ldy     tmp1            ; sign
+       beq     L9              ; Branch if positive
 
-; Done, load the low 16 bit into A/X
+; Negate the 32 bit value in ptr2/sreg
 
-L9:    lda     ptr2
-       ldx     ptr2+1          ; get value
-       rts
+        jmp     negeax
 
 ;
 ; Helper functions
 ;
 
-mul2:
-       asl     ptr2
+mul2:   asl    ptr2
        rol     ptr2+1
        rol     sreg
        rol     sreg+1          ; * 2
-       rts
+L9:     rts