cc65/libsrc/runtime/leave.s

57 lines
1.4 KiB
ArmAsm

;
; Ullrich von Bassewitz, 06.08.1998
; Christian Krueger, 11-Mar-2017, added 65SC02 optimization
;
; CC65 runtime: function epilogue
;
; exit a function. pop stack and rts. The function comes in different
; flavours that provide default values for the return val, or drop a local
; stack frame with size in y.
.export leave00, leave0, leavey00, leavey0, leavey
.export leave
.import addysp
.importzp sp
.macpack cpu
leave00:
lda #0
leave0: ldx #0
beq leave
leavey00:
lda #0 ; "return 0"
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
sec ; Count the byte, the count's stored in
adc sp
sta sp
bcc L1
inc sp+1
L1: pla ; Get return value back
.endif
rts