	.title	handler
;
; reserved floating point operand handler for fdmp
;
; here we expect two arrays, passed by length, more or less
;
;	the first one is the signal argument vector, which describes
;	things like the PC and PSL
;
;	the second is the mechanism argument vector, which describes
;		the saved state of the process
;
	$ssdef
	
	.psect	$data,rd,nowrt,shr,pic,noexe

reserved_message1:
	.ascid	/There was an invalid floating point number in the/
reserved_message2:
	.ascid	/record below.  The value was set to zero.  You should/
reserved_message3:
	.ascid	/examine the record in hex to see the value in error./
blank:
	.ascid	/ /

	.psect	$code,rd,nowrt,shr,pic,exe

	.entry	handler,^m<r2,r3,r4,r5,r6,r7,r8,r9,r10,r11>

	movl	4(ap),r2			; get address of sigarg array
	movl	8(ap),r3			; get address of mecharg array

	cmpl	4(r2),#ss$_roprand		; see if this is a reserved op

	bneq	nofix

	pushaq	blank
	calls	#1,g^lib$put_output		; send message to user
	pushaq	reserved_message1
	calls	#1,g^lib$put_output		; send message to user
	pushaq	reserved_message2
	calls	#1,g^lib$put_output		; send message to user
	pushaq	reserved_message3
	calls	#1,g^lib$put_output		; send message to user
	pushaq	blank
	calls	#1,g^lib$put_output		; send message to user

	movf	#0,@12(r3)

	movl	#ss$_continue,r0		; signal continue
	ret

nofix:	movl	#ss$_resignal,r0		; no fix here, resignal error
	ret

	.end
