V5/usr/fort/sum.s

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

/	example of UNIX fortran
/	calling interface to machine code
/	this example is a function that
/	returns the single precision 
/	sum of all of its single precision arguments.
/	for example:
/		f = sum(1.,2.,3.)
/	sets f to 6.

.globl	sum.				/ defination of entry
.globl	retrn				/ reference of return

sum.:					/ entry point
	value				/ location of return value
	.+2				/ pointer to execution code
	setf				/ no d/f i/l modes guaranteed
	mov	*2(sp),r0		/ arg count
	mov	r3,r1			/ r3 points to arg list
	tst	(r1)+			/ zeroth arg is old r3

	clrf	fr0			/ start of actual function
1:
	addf	*(r1)+,fr0		/ add in each argument
	sob	r0,1b			/ for each argument

	movf	fr0,value		/ make returned value available
	jmp	retrn			/ actual return

.bss
value:	.=.+4				/ space for return value

/ synopsis:
/	1. save registers r3, sp
/	2. arg list (pointers to values)
/	   begins at 2(r3)
/	3. entry name is name of function
/	   followed by "."
/	4. first word after entry point is
/	   location of return value. this is
/	   true for both functions and subroutines
/	5. second word after entry point is
/	   pointer to pdp-11 code body
/	6. return is expedited by a jump to
/	   the globl routine "retrn"