4BSD/usr/src/cmd/px/08call.s

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

#
# Copyright (c) 1979 Regents of the University of California
#
# char sccsid[] = "@(#)08call.s 4.1 10/10/80";
#
_CALL:
	cvtbl	(r10)+,r0	#entry level of new proc
	movl	(r10)+,r1	#new entry point
	pushr	$R11|R10|R9	#save lino, lc, dp
	addl2	ap,r1		#calc new entry point
	addl3	2(r1),ap,r10
	moval	_display(r0),r9	#set up new display pointer
	jmp	(r8)

_FCALL:
	cvtbl	(r10)+,r0	#r0 has number of bytes of arguments
	bneq	L0801
	movl	(r10)+,r0
L0801:
	movl	(sp)+,r6	#r6 points to formal call struct
	pushr	$R11|R10|R9	#save lino, lc, dp
	movl	(r6),r10	#set new entry point
	cmpl	6(r10),r0	#check arg count
	bneq	enargs
	addl3	$_display,4(r6),r9	#set up new display pointer
	movl	4(r6),r1	#save current display, restore formal display
	movc3	r1,_display+4,8(r6)[r1]
	movc3	4(r6),8(r6),_display+4
	jmp	(r8)
enargs:
	movw	$ENARGS,_perrno
	jbr	error

_FSAV:
	movl	(sp),r6		#r6 points to formal call struct
	cvtbl	(r10)+,4(r6)	#set block number
	addl3	(r10)+,ap,r0	#r0 pts to TRA4
	addl3	2(r0),ap,(r6)	#set entry address
	movc3	4(r6),_display+4,8(r6)	#save current display
	jmp	(r8)

_FRTN:
	cvtbl	(r10)+,r0	#r0 has size of returned object
	bneq	L0802
	movzwl	(r10)+,r0
L0802:
	addl3	r0,sp,r1	#r1 points to stack loc of formal call struct
	movl	(r1),r6		#r6 points to formal call struct
	movc3	r0,(sp),4(sp)	#move down the returned value
	addl2	$4,sp		#throw away leftover
	movl	4(r6),r1	#r1 has display size
	movc3	r1,8(r6)[r1],_display+4	#restore previous display
	jmp	(r8)
#
_NODUMP:
	moval	iloop,r8	#disable profiling
	incw	_nodump
	bicpsw	$0xe0		#disable overflow checks

_BEG:
	movzbl	(r10)+,r1	#r1 has name size
	movl	(r10)+,r0	#r0 has local variable size
	addl2	$4,r9		#enter local scope
	pushl	(r9)		#save old display value
	pushal	(r10)+		#pointer to entry info
	movzwl	(r10)+,r11	#set new lino
	addl2	r1,r10		#skip over name text
	pushl	r7		#save I/O info
	pushl	_file
	subl2	$4,sp		#space for top of frame pointer
	movl	sp,(r9)		#set new display pointer
	addl3	r0,sp,r3	#r3 points to new top of stack
	clrl	tempsize(r3)	#check for memory (fault => not available)
	movl	r3,(sp)		#set new top of stack pointer
	movl	r3,sp		#allocate local variables
	mnegl	r0,r6		#r6 has amount of space to alloc
	cmpl	r6,$65535	#check for out of character range
	bleq	L0804
L0803:
	movc5	$0,(r2),$0,$65535,(r3)	#continue zero of local variables
	acbl	$65536,$-65535,r6,L0803	#deduct amount zeroed and continue
L0804:
	movc5	$0,(r2),$0,r6,(r3)	#zero out local variables
	jmp	(r8)

_END:
	pushl	(r9)		#flush and close local files
	calls	$1,_pclose
	movl	(r9),sp		#deallocate local vars
	addl2	$4,sp		#pop TOS ptr
	movl	(sp)+,_file	#restore old I/O info
	movl	(sp)+,r7
	movzwl	*(sp)+,r0	#r0 has number of bytes of parameters
	movl	(sp)+,(r9)	#restore old display entry
	cmpl	r9,$_display+4	#exiting main proc ???
	beql	L0805
	popr	$R11|R10|R9	#restore lino, lc, dp
	addl2	r0,sp		#deallocate parameters
	jmp	(r8)
L0805:
	ret			#end of interpretation