]> git.sur5r.net Git - cc65/blobdiff - libsrc/runtime/leave.s
few 6502 and some 65SC02 optimizations
[cc65] / libsrc / runtime / leave.s
index 8f4e055f563a5b301b4d9ca05fd993581bc1c97a..4a9ff799493d70c1e37ca722ee7fbd679e60190c 100644 (file)
@@ -1,5 +1,6 @@
 ;  
 ; Ullrich von Bassewitz, 06.08.1998
+; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
 ;
 ; CC65 runtime: function epilogue
 ;
@@ -13,6 +14,8 @@
         .import         addysp
         .importzp       sp
 
+        .macpack        cpu
+
 leave00:
         lda     #0
 leave0: ldx     #0
@@ -24,6 +27,20 @@ leavey0:
         ldx     #0              ; return < 256
 leavey:
         jsr     addysp          ; drop stack frame
+
+.if (.cpu .bitand ::CPU_ISET_65SC02)
+
+leave:  tay                     ; save A a sec
+        lda     (sp)            ; that's the pushed arg size
+        sec                     ; Count the byte, the count's stored in
+        adc     sp
+        sta     sp
+        bcc     L1
+        inc     sp+1
+L1:     tya                     ; Get return value back
+
+.else
+
 leave:  pha                     ; save A a sec
         ldy     #0
         lda     (sp),y          ; that's the pushed arg size
@@ -33,5 +50,7 @@ leave:  pha                     ; save A a sec
         bcc     L1
         inc     sp+1
 L1:     pla                     ; Get return value back
+
+.endif
         rts