SX Microcontroller Bit Math Method

Which bit is set?

Dmitry Kiryashov [zews at AHA.RU] says:

...to convert byte mask back into number. I suggest that somebody else probably has successfully researched this before. This is what I've discovered... It takes 12 clocks/words
;       W before -> W after
;       abcdefgh -> 00000ABC
;       10000000 -> 7 = 4+2+1
;       01000000 -> 6 = 4+2+0
;       00100000 -> 5 = 4+0+1
;       00010000 -> 4 = 4+0+0
;       00001000 -> 3 = 0+2+1
;       00000100 -> 2 = 0+2+0
;       00000010 -> 1 = 0+0+1
;       00000001 -> 0 = 0+0+0

	mov	temp, W	;save abcdefgh
	mov	W, <>temp	;efghabcd
	xor	temp, W	;........
	and	W, #$F		;0000abcd
	sb	Z
	mov	W, #4		;load A=0/4

	sb	temp.3
	snb	temp.2
	or	W, #2		;add B=0/2

	sb	temp.3
	snb	temp.1
	or	W, #1		;add C=0/1
				;W holds 7..0 of result

Marc [marc at AARGH.FRANKEN.DE] says:

You can make it a table-read, and fill the gaps with other sub functions. Under the presumption that you can make use of any area of 3+ words in size, this method uses 6 cycles (incl call/ret) and 11 words.
	add	pc, W
        (1 wasted word)
	retw	#0
	retw	#1
        (1 wasted word)
	retw	#2
        (3 spare words)
	retw	#3
        (7 spare words)
	retw	#4
        (15 spare words)
	retw	#5
        ...