logoalt Hacker News

HarHarVeryFunnytoday at 1:33 PM1 replyview on HN

If you assume that A * 10 isn't going to overflow, so that ASL A moves 0 into the carry flag (so no need for CLC), then instead of using the undocumented RRA opcode, you can just do:

sta $00

asl a

asl a

adc $00

asl a

This is also 7 bytes, but is faster since adc $00 is 3 cycles, vs rra $00 being 5 cycles.

The A = max(A, X) example is certainly interesting, but not very useful since it loops through the code twice (very slow) and assumes that $8a is available. The much faster obvious version only adds one byte:

stx $00

cmp $00

bcs done

txa

done:


Replies

Aransentintoday at 1:53 PM

Sure. Note that I picked those examples to demonstrate the two fairly quirky classes of things the optimizer tends to find. If the programmer has different requirements they can specify that, and it'll spit out the examples you gave (or something equivalent).

show 1 reply