]> git.sur5r.net Git - cc65/commitdiff
Several SBC optimizations suggested by Piotr Fusik
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 17 Nov 2001 11:25:12 +0000 (11:25 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 17 Nov 2001 11:25:12 +0000 (11:25 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1121 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/runtime/ldec.s
libsrc/runtime/lsub.s
libsrc/runtime/lsubeq.s
libsrc/runtime/lsubeqsp.s
libsrc/runtime/sub.s
libsrc/runtime/subeqsp.s

index 404019b81e3a281b5245d8d7c914b2705d0e0fd3..a87323e6121191a5837ec129102f4f93fadb8e55 100644 (file)
@@ -5,13 +5,13 @@
 ;
 
                .export         deceaxy
-       .importzp       ptr4, sreg
+       .importzp       sreg, tmp1
 
 deceaxy:
-       sty     ptr4
+       sty     tmp1
        sec
-       sbc     ptr4
-       sta     ptr4
+       sbc     tmp1
+       sta     tmp1
        txa
        sbc     #0
        tax
@@ -21,6 +21,6 @@ deceaxy:
        lda     sreg+1
        sbc     #0
        sta     sreg+1
-       lda     ptr4
+       lda     tmp1
        rts
 
index 8854e9e504d12305a1fb04d3a54e8e24232317bf..0ba716a9d91f33ee6b7bfe97cafd8fc2a6d1dfd2 100644 (file)
@@ -9,19 +9,18 @@
 ;
        .export         tossubeax
        .import         addysp1
-       .importzp       sp, sreg, tmp1, tmp2
+       .importzp       sp, sreg
 
 tossubeax:
        ldy     #0
                sec
-       sta     tmp1
-       lda     (sp),y
-       sbc     tmp1            ; byte 0
-       sta     tmp2            ; use as temp storage
+       eor     #$FF
+               adc     (sp),y          ; byte 0
+               pha                     ; Save low byte
        iny
-       stx     tmp1
-       lda     (sp),y
-       sbc     tmp1            ; byte 1
+       txa
+       eor     #$FF
+       adc     (sp),y          ; byte 1
        tax
        iny
        lda     (sp),y
@@ -31,6 +30,6 @@ tossubeax:
        lda     (sp),y
        sbc     sreg+1          ; byte 3
        sta     sreg+1
-       lda     tmp2            ; load byte 0
-               jmp     addysp1         ; drop TOS
+       pla                     ; Restore byte 0
+               jmp     addysp1         ; Drop TOS
 
index 974626c146c95013e0ff252db8430bf9887ec583..acc6a286141b707e10746b0fcb892f8014824262 100644 (file)
@@ -1,4 +1,4 @@
-;
+;                                
 ; Ullrich von Bassewitz, 07.04.2000
 ;
 ; CC65 runtime: -= operator
@@ -8,7 +8,7 @@
 ;
 
                .export         lsubeq1, lsubeqa, lsubeq
-               .importzp       sreg, ptr1, tmp1
+               .importzp       sreg, ptr1
 
 
 lsubeq1:
@@ -23,16 +23,15 @@ lsubeq:     sty     ptr1+1                  ; Store high byte of address
        ldy     #$00                    ; Address low byte
        sec
 
-       sta     tmp1
-       lda     (ptr1),y                ; Load byte 0
-       sbc     tmp1
+       eor     #$FF
+       adc     (ptr1),y                ; Subtract byte 0
        sta     (ptr1),y
                pha                             ; Save byte 0 of result for later
 
        iny                             ; Address byte 1
-       stx     tmp1
-       lda     (ptr1),y                ; Load byte 1
-       sbc     tmp1
+       txa
+       eor     #$FF
+       adc     (ptr1),y                ; Subtract byte 1
        sta     (ptr1),y
        tax
 
@@ -48,9 +47,9 @@ lsubeq:       sty     ptr1+1                  ; Store high byte of address
        sta     (ptr1),y
        sta     sreg+1
 
-       pla                             ; Retrieve byte 0 of result
+       pla                             ; Retrieve byte 0 of result
 
-       rts                             ; Done
+       rts                             ; Done
 
 
 
index 6474f4059c41b5bfed2ea881ed196a11254493fc..c679c8806bb0e8473f77368de79d2a56bddcc311 100644 (file)
@@ -2,24 +2,23 @@
 ; Ullrich von Bassewitz, 08.10.1998
 ;
 ; CC65 runtime: -= operator for longs on the stack
-;                          
+;
 
                .export         lsubeq0sp, lsubeqysp
-       .importzp       sp, sreg, tmp1, tmp2
+       .importzp       sp, sreg
 
 lsubeq0sp:
        ldy     #0
 lsubeqysp:
        sec
-       sta     tmp1
-       stx     tmp2
-               lda     (sp),y
-       sbc     tmp1
+       eor     #$FF
+               adc     (sp),y
        sta     (sp),y
-       pha
+       pha                     ; Save low byte
        iny
-               lda     (sp),y
-       sbc     tmp2
+       txa
+       eor     #$FF
+               adc     (sp),y
        sta     (sp),y
        tax
        iny
index cb7ae6de716d066f1960a744485af765afa0adbc..1240737adcbcca44587d7b221e2605f932f7d19b 100644 (file)
@@ -6,7 +6,7 @@
 
                .export         tossuba0, tossubax
        .import         addysp1
-       .importzp       sp, ptr1
+       .importzp       sp
 
 ;
 ; AX = TOS - AX
 tossuba0:
        ldx     #0
 tossubax:
-       sta     ptr1
-       stx     ptr1+1
+       sec
+       eor     #$FF
 .ifpc02
-               lda     (sp)            ; Get lo byte
-       ldy     #1              ; Hi index
+        adc    (sp)
+       ldy     #1
 .else
        ldy     #0
-       lda     (sp),y          ; Lo byte
-       iny                     ; Hi index
+       adc     (sp),y          ; Subtract low byte
+       iny
 .endif
-       sec
-       sbc     ptr1
-       sta     ptr1            ; save lo byte
-       lda     (sp),y
-       sbc     ptr1+1
-       tax
-       lda     ptr1
-       jmp     addysp1         ; drop TOS, set condition codes
+       pha                     ; Save high byte
+        txa
+       eor     #$FF
+       adc     (sp),y          ; Subtract high byte
+       tax                     ; High byte into X
+       pla                     ; Restore low byte
+       jmp     addysp1         ; drop TOS
 
index a6f75798f85d2b9db89074bf2cf88763a38d5769..8a2e3e3ee9e2be01280b4423b843523e2bab0429 100644 (file)
@@ -5,23 +5,22 @@
 ;
 
                .export         subeq0sp, subeqysp
-       .importzp       sp, tmp1, tmp2
+       .importzp       sp
 
 subeq0sp:
        ldy     #0
 subeqysp:
        sec
-       sta     tmp1
-       stx     tmp2
-       lda     (sp),y
-       sbc     tmp1
+       eor     #$FF
+       adc     (sp),y
        sta     (sp),y
-       pha
+       pha                     ; Save low byte
        iny
-               lda     (sp),y
-       sbc     tmp2
+       txa
+       eor     #$FF
+               adc     (sp),y
        sta     (sp),y
        tax
-       pla
+       pla                     ; Restore low byte
        rts