summaryrefslogtreecommitdiff
path: root/test/popcnt2.s
blob: 5739fb74ef3eccd62539799994310f22474d91c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
; Register only version of popcnt.

.org $1000

popcnt:
	ldy #0		; Reset bit count.
	cmp #0		; Set the status flags.
@loop:
	beq @end	; There are no more one bits left, so we're done.
	tab		; Place the value in the B register.
	deb		; Decrement the temp value by one.
	iny		; Increment the bit count.
	and b		; AND value with value-1.
	bra @loop	; Keep looping.
@end:
	tya		; Return the bit count.
	rts		; End of popcnt.


reset:
	cps		; Boilerplate reset code.
	ldx.d #$2FFFF	;
	txs		;
	and #0		; Reset A.
	tab		; Reset B.
	tax		; Reset X.
	tay		; Reset Y.
main:
	pha.q		; Save A.
	jsr popcnt	; Get population count.
	tay		; Save it in Y.
	pla.q		; Get A back.
	inc		; Increment A by one.
	bra main	; Keep looping.


.org $FFC0
.qword reset

a
d