;
; Ullrich von Bassewitz, 05.08.1998
+; Christian Krueger, 11-Mar-2017, spend two bytes for one cycle, improved 65SC02 optimization
;
; CC65 runtime: add ints
;
; called a lot!
.export tosadda0, tosaddax
- .importzp sp
+ .importzp sp, tmp1
.macpack cpu
tosadda0:
ldx #0
tosaddax:
- clc
-.if (.cpu .bitand CPU_ISET_65SC02)
- adc (sp) ; 65SC02 version - saves 2 cycles
- ldy #1
-.else
- ldy #0
- adc (sp),y ; lo byte
- iny
-.endif
- pha ; save it
- txa
- adc (sp),y ; hi byte
- tax
- clc
- lda sp
- adc #2
- sta sp
- bcc L1
- inc sp+1
-L1: pla ; Restore low byte
- rts
+ clc ; (2)
+
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+
+ adc (sp) ; (7)
+ tay ; (9)
+ inc sp ; (14)
+ bne hiadd ; (17)
+ inc sp+1 ; (-1+5)
+hiadd: txa ; (19)
+ adc (sp) ; (24)
+ tax ; (26)
+ inc sp ; (31)
+ bne done ; (34)
+ inc sp+1 ; (-1+5)
+done: tya ; (36)
+.else
+
+ ldy #0 ; (4)
+ adc (sp),y ; (9) lo byte
+ iny ; (11)
+ sta tmp1 ; (14) save it
+ txa ; (16)
+ adc (sp),y ; (21) hi byte
+ tax ; (23)
+ clc ; (25)
+ lda sp ; (28)
+ adc #2 ; (30)
+ sta sp ; (33)
+ bcc L1 ; (36)
+ inc sp+1 ; (-1+5)
+L1: lda tmp1 ; (39) restore low byte
+
+.endif
+ rts ; (6502: 45 cycles, 26 bytes <-> 65SC02: 42 cycles, 22 bytes )