]> git.sur5r.net Git - cc65/blob - libsrc/runtime/lsub.s
few 6502 and some 65SC02 optimizations
[cc65] / libsrc / runtime / lsub.s
1 ;
2 ; Ullrich von Bassewitz, 05.08.1998
3 ; Christian Krueger, 11-Mar-2017, ímproved  65SC02 optimization
4 ; CC65 runtime: long sub
5 ;
6
7 ;
8 ; EAX = TOS - EAX
9 ;
10         .export         tossub0ax, tossubeax
11         .import         addysp1
12         .importzp       sp, sreg
13
14         .macpack        cpu
15
16 tossub0ax:
17 .if (.cpu .bitand ::CPU_ISET_65SC02)
18         stz     sreg
19         stz     sreg+1
20 .else
21         ldy     #$00
22         sty     sreg
23         sty     sreg+1
24 .endif  
25
26 tossubeax:
27         sec
28         eor     #$FF
29 .if (.cpu .bitand ::CPU_ISET_65SC02)
30         adc     (sp)            ; 65SC02 version - saves 2 cycles
31         ldy     #1
32 .else
33         ldy     #0
34         adc     (sp),y          ; lo byte
35         iny
36 .endif
37         pha                     ; Save low byte
38         txa
39         eor     #$FF
40         adc     (sp),y          ; byte 1
41         tax
42         iny
43         lda     (sp),y
44         sbc     sreg            ; byte 2
45         sta     sreg
46         iny
47         lda     (sp),y
48         sbc     sreg+1          ; byte 3
49         sta     sreg+1
50         pla                     ; Restore byte 0
51         jmp     addysp1         ; Drop TOS
52