.define	.cii
.sect .text
.sect .rom
.sect .data
.sect .bss

.sect .text
.cii:
	move.l	(sp)+, a0	! return address
	move.l	(sp)+, d0	! destination size
	sub.l	(sp)+, d0	! destination - source size
	bgt	1f
	sub.l	d0, sp		! pop extra bytes
	jmp	(a0)
1:
	move.l	(sp), d1
	lsr.l	#1, d0
	bcs	1f		! branch if source size == 1
	lsr.l	#1, d0
	bcs	2f		! branch if source size == 2
	tst.l	d1
	bra	4f
1:	lsr.l	#1, d0		! size difference / 4
	ext.w	d1
2:	ext.l	d1
	move.l	d1, (sp)
4:	slt	d1
	extb.l	d1		! d1 contains sign of source
	sub.l	#1, d0
2:
	move.l	d1, -(sp)
	dbf	d0, 2b
	jmp	(a0)
.align 2