extension=S

function gen_call {
	typeset name="$1"
	typeset kcnum="$2"	
	typeset nparms="$3"
	typeset rent="$4"
	typeset neglist="$5"
		
	print		'/* DO NOT EDIT THIS FILE, IT IS GENERATED BY "mkkercalls" */'
	print		".text"
	print		".align 2"
	print		".global ${name}"
	print		"${name}:"
	# On ARM V3 processors, proc & other privledged processes run in SVC mode.
	# We need to preserve our lr, since it is to be overwritten by the swi.
	if [ ${nparms} -ge 7 ]; then
		echo "Too many parms to handle for ${name}" >&2
		exit 1
	fi
	if [ ${nparms} -eq 6 ]; then
		extra_regs="r4,r5,"
		print	"stmdb	sp!, {r4,r5,lr}"
		print	"add	r12, sp, #12"
		print	"ldmia	r12, {r4,r5}"
	elif [ ${nparms} -eq 5 ]; then
		extra_regs="r4,"
		print	"stmdb	sp!,{r4,lr}"
		print	"ldr	r4, [sp, #8]"
	else	
		extra_regs=""
		print	"stmdb	sp!, {lr}"
	fi		
	for neg in $neglist; do
		let "reg = $neg - 1"
		print	"rsb r${reg}, r${reg}, #0"
	done  
	print		"mov	r12, #${kcnum}"
	print		"swi	0"
	print		"ldmia	sp!, {${extra_regs}pc}"
	case ${rent} in
	NONE)
		print	"ldmia	sp!, {${extra_regs}lr}"
		print	"#if defined(__PIC__)"
		print	"  b __ker_err(PLT)"
		print	"#else"
		print	"  b __ker_err"
		print	"#endif"
		;;
	NORMAL)
		print	"ldmia	sp!, {${extra_regs}pc}"
		;;
	NEGATIVE)
		print	"rsb	r0, r0, #0"
		print	"ldmia	sp!, {${extra_regs}pc}"
		;;
	esac
	print		".type ${name},function"
	print		".size ${name},.-${name}"
}
