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
Runic Rain (talk | contribs) (A community page containing bithacks for the 65c816) |
Runic Rain (talk | contribs) |
||
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: