misc/include/push.mac
	.nlist
  .ifndef __push_mac__
__push_mac__	equ	1

;----------------------------------------------------------------
;
;	プッシュとポップ
;
;----------------------------------------------------------------
;	push	rl1			movem.l	rl1,-(sp)
;		:				:
;	push_again			movem.l	rl1,-(sp)
;		:				:
;		push	rl2			movem.l	rl2,-(sp)
;			:				:
;		push_again			movem.l	rl2,-(sp)
;			:				:
;		pop_test			movem.l	(sp)+,rl2
;			:				:
;		pop				movem.l	(sp)+,rl2
;			:				:
;	pop_test			movem.l	(sp)+,rl1
;		:				:
;	pop				movem.l	(sp)+,rl1
;----------------------------------------------------------------

~pushdepth = 0				;push~popの深さ。0=なし
~pushrl reg d0				;最も内側のpush~popのrl
;~pushrl%~pushdepth			;~pushrlのスタック

;----------------------------------------------------------------
pop	.macro
	.sall
  .if ~pushdepth=0
	.lall
	.fail	1	;popに対応するpushがない
	.exitm
  .endif
	.lall
	movem.l	(sp)+,~pushrl
	.sall
~pushdepth = ~pushdepth-1
~pushrl reg ~pushrl%~pushdepth
	.lall
	.endm

;----------------------------------------------------------------
pop_test	.macro
	.sall
  .if ~pushdepth=0
	.lall
	.fail	1	;pop_testに対応するpushがない
	.exitm
  .endif
	.lall
	movem.l	(sp)+,~pushrl
	.endm

;----------------------------------------------------------------
push	.macro	rl
	.sall
~pushrl%~pushdepth reg ~pushrl
~pushdepth = ~pushdepth+1
~pushrl reg rl
	.lall
	movem.l	~pushrl,-(sp)
	.endm

;----------------------------------------------------------------
push_again	.macro
	.sall
	.lall
	movem.l	~pushrl,-(sp)
	.endm

;----------------------------------------------------------------

  .endif  ;__push_mac__
	.list