
; d0 - 32bit unsigned value

	xdef	_BitSize

_BitSize	move.l	d2,a0
	moveq	#0,d1
	moveq	#31,d2	; number of bit
.looph	btst.l	d2,d0
	bne.s	.loopl
	dbf	d2,.looph
	tst.w	d2
	blt.s	.zero
.loopl	btst.l	d1,d0	; d2 contains position of highest bit
	bne.s	.end
	addq.w	#1,d1
	cmp.l	d2,d1
	blt.s	.loopl
	moveq	#1,d0
	bra.s	.finish
.end	addq.w	#1,d2
	sub.l	d1,d2
	move.l	d2,d0
.finish	move.l	a0,d2
	rts
.zero	moveq	#0,d0
	move.l	a0,d2
	rts
