We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

Bithacks: Difference between revisions

From SnesLab
Jump to: navigation, search
(A community page containing bithacks for the 65c816)
 
Line 12: Line 12:
ASL $00
ASL $00
ROR
ROR
</pre>
'''Signed Division By 2<sup>n</sup>''' ''(6+2n bytes / 5+2n cycles)''
<br>
<u>inputs:</u> A, n
<br>
<u>outputs:</u> A
<pre>
; signed division by two, n times
macro SignedDiv_2N(n)
BMI ?negative
LSR #!n
BRA ?end
?negative:
LSR #!n
ORA #($FF<<(8-!n)) ; sign extension
?end:
</pre>
</pre>

Revision as of 07:47, 6 April 2021

Bithacks are optimization tricks that utilize information in bits and bit manipulation to accomplish their tasks. Usually they work in a slightly non-obvious way, (the most famous being the fast inverse sqrt), and bit manipulation in general is harder on the 65c816. To that end here is a collection of some useful tricks.

Math Bithacks

Signed Division By 2 (5 bytes / 10 cycles)
inputs: A
outputs: A

STA $00
ASL $00
ROR

Signed Division By 2n (6+2n bytes / 5+2n cycles)
inputs: A, n
outputs: A

; signed division by two, n times
macro SignedDiv_2N(n)
BMI ?negative
LSR #!n
BRA ?end
?negative:
LSR #!n
ORA #($FF<<(8-!n))	; sign extension
?end: