]> git.sur5r.net Git - cc65/blobdiff - libsrc/runtime/lsub.s
few 6502 and some 65SC02 optimizations
[cc65] / libsrc / runtime / lsub.s
index 30ae49da173eda0753ff20be0face7860233cd5c..6f80491cacaa491d3daa68adc4978d20e19bd74c 100644 (file)
@@ -1,47 +1,52 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
-;
+; Christian Krueger, 11-Mar-2017, ímproved  65SC02 optimization
 ; CC65 runtime: long sub
 ;
 
 ;
 ; EAX = TOS - EAX
 ;
-       .export         tossub0ax, tossubeax
-       .import         addysp1
-       .importzp       sp, sreg
+        .export         tossub0ax, tossubeax
+        .import         addysp1
+        .importzp       sp, sreg
 
         .macpack        cpu
 
 tossub0ax:
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        stz     sreg
+        stz     sreg+1
+.else
         ldy     #$00
         sty     sreg
         sty     sreg+1
+.endif  
 
 tossubeax:
-       sec
-       eor     #$FF
-.if (.cpu .bitand CPU_ISET_65SC02)
-       adc     (sp)            ; 65SC02 version - saves 2 cycles
-       ldy     #1
+        sec
+        eor     #$FF
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+        adc     (sp)            ; 65SC02 version - saves 2 cycles
+        ldy     #1
 .else
-       ldy     #0
-       adc     (sp),y          ; lo byte
-       iny
+        ldy     #0
+        adc     (sp),y          ; lo byte
+        iny
 .endif
-               pha                     ; Save low byte
-       txa
-       eor     #$FF
-       adc     (sp),y          ; byte 1
-       tax
-       iny
-       lda     (sp),y
-       sbc     sreg            ; byte 2
-       sta     sreg
-       iny
-       lda     (sp),y
-       sbc     sreg+1          ; byte 3
-       sta     sreg+1
-       pla                     ; Restore byte 0
-               jmp     addysp1         ; Drop TOS
+        pha                     ; Save low byte
+        txa
+        eor     #$FF
+        adc     (sp),y          ; byte 1
+        tax
+        iny
+        lda     (sp),y
+        sbc     sreg            ; byte 2
+        sta     sreg
+        iny
+        lda     (sp),y
+        sbc     sreg+1          ; byte 3
+        sta     sreg+1
+        pla                     ; Restore byte 0
+        jmp     addysp1         ; Drop TOS