*
*	$Id: sas_cxv54.asm,v 1.1.1.1 2004-07-26 16:31:04 obarthel Exp $
*
*	:ts=8
*
*	Adapted from reassembled SAS/C runtime library code.
*

	section	text,code

	xdef	__CXV54
	xref	__CXFERR

__CXV54
	MOVEM.L	A0/A1,-(SP)
	MOVE.L	D4,A0
	SWAP	D0
	MOVE.W	D0,D4
	AND.W	#$8000,D4
	EOR.W	D4,D0
	SUB.W	#$3800,D0
	CMP.W	#$10,D0
	BLT	lbC000098
	CMP.W	#$FEF,D0
	BLT	lbC000102
	CMP.W	#$47F0,D0
	BLT	lbC000058
	SWAP	D0
	LSL.L	#3,D0
	ROL.L	#3,D1
	AND.L	#7,D1
	EOR.L	D1,D0
	SWAP	D0
	OR.W	#$7F80,D0
	BRA	lbC000112

lbC000058
	CMP.W	#$FF0,D0
	BGE	lbC000074
	CMP.L	#$FFFF0FEF,D0
	BNE	lbC000102
	CMP.L	#$F0000000,D1
	BCS	lbC000102
lbC000074
	MOVEM.L	D0/D1/A0/A1,-(SP)
	PEA	2.L
	JSR	__CXFERR
	ADDQ.W	#4,SP
	MOVEM.L	(SP)+,D0/D1/A0/A1
	MOVE.L	#$7F80,D0
	EOR.W	D4,D0
	SWAP	D0
	MOVEQ	#0,D1
	BRA	lbC000116

lbC000098
	CMP.W	#$FE90,D0
	BGE	lbC0000C4
	ADD.W	#$3800,D0
	OR.L	D1,D0
	BEQ	lbC000112
	MOVEM.L	D0/D1/A0/A1,-(SP)
	PEA	1.L
	JSR	__CXFERR
	ADDQ.W	#4,SP
	MOVEM.L	(SP)+,D0/D1/A0/A1
	MOVEQ	#0,D0
	BRA	lbC000112

lbC0000C4
	MOVE.L	D5,A1
	MOVE.W	D0,D5
	AND.W	#15,D0
	EOR.W	#$10,D0
	SWAP	D0
	ASR.W	#4,D5
	ADDQ.W	#2,D5
	BGE	lbC0000E6
	NEG.W	D5
	LSR.L	D5,D0
	MOVEQ	#0,D5
	ADDX.L	D5,D0
	BRA	lbC0000F6

lbC0000E6
	CLR.W	D1
	LSL.L	D5,D0
	ADDQ.W	#1,D5
	ROXL.L	D5,D1
	AND.L	#15,D1
	ADDX.L	D1,D0
lbC0000F6
	MOVE.L	A1,D5
	SWAP	D0
	EOR.W	D4,D0
	SWAP	D0
	BRA	lbC000116

lbC000102
	SWAP	D0
	LSL.L	#3,D0
	ROXL.L	#4,D1
	AND.L	#7,D1
	ADDX.L	D1,D0
	SWAP	D0
lbC000112
	EOR.W	D4,D0
	SWAP	D0
lbC000116
	MOVE.L	A0,D4
	MOVEM.L	(SP)+,A0/A1
	RTS

	end
