4.4BSD/usr/src/old/lisp/franz/tahoe/pushframe.s

Compare this file to the similar file:
Show the results in this format:

/*
 * pushframe : stack a frame 
 * mess with the standard calls/callf call frame to put things in
 * the proper order. On entry to _Pushframe we have:
 * On entry to Pushframe:		On exit:
 * ______________			______________	
 * | second arg |			| second arg |
 * +------------+			+------------+
 * | first arg  |			| first arg  |
 * +------------+			+------------+
 * | 'class' arg|			| 'class' arg|
 * +------------+			+------------+
 * | saved fp   |  <<= fp		| return addr|
 * +------------+			+------------+
 * |mask|removed|			| old _errp  |
 * +------------+			+------------+
 * |return addr.|  <<= sp		| saved _bnp |
 * +------------+			+------------+
 *					| saved _np  |
 *					+------------+
 *					| saved lbot |	<<= d0
 *					+------------+
 *					| saved r13  |
 *					|       ...  |
 *					| saved r8   |  <<= sp
 *					+------------+
 */
	.text
	.globl	_Pushframe
	.globl	_qpushframe

_qpushframe:
_Pushframe:
	.word 0x0
	movl	(fp),fp		# give user his fp back
	movl	(sp),r0		# put program counter in temporary
	moval	12(sp),sp	# remove pc, 'mask', 'removed', and fp
	pushl	r0		# stack the return address
	pushl	_errp
	pushl	_bnp
	pushl	r6		# save _np
	pushl	r7		# save _lbot
	moval	(sp),r0		# return addr of lbot on stack to caller
	moval	-24(sp),sp
	storer	$0x3f00,(sp)	# save r13(fp), r12,r11,r10,r9,r8
	clrl	_retval		# set retval to C_INITIAL
	jmp	*40(sp)		# return to caller