Further minor optimizations
authorNick Downing <nick@ndcode.org>
Thu, 13 Jun 2019 12:36:10 +0000 (22:36 +1000)
committerNick Downing <nick@ndcode.org>
Thu, 13 Jun 2019 12:36:10 +0000 (22:36 +1000)
sm.asm

diff --git a/sm.asm b/sm.asm
index f4f022d..c4095fb 100644 (file)
--- a/sm.asm
+++ b/sm.asm
@@ -846,12 +846,13 @@ div_hl_de:
        ld      a,h
        ld      c,l
        ld      hl,0
+       scf
        call    div0
        ld      b,a
        ld      a,c
        ld      c,b
        call    div
-       jr      nc,1$
+       jr      c,1$
        add     hl,de
 1$:    ld      d,c
        ld      e,a
@@ -891,9 +892,10 @@ div_hl_de:
 ; is implicitly in the 100s place, making the code awkward though it's correct 
 
 ; now optimized to only inc/dec a when doing zero-crossing, fix above analysis
+; and inverted cf return sense so that it eliminates a scf instruction in div0
 
-div:   jr      c,div1
-div0:
+div:   jr      nc,div1
+div0:  ; enter with cf=1
  push af
  ld a,'A
  call print_char
@@ -912,7 +914,6 @@ div0:
  call print_word
  ex de,hl
        ld      b,8
-       scf
        rla
 div00: adc     hl,hl
        sbc     hl,de
@@ -922,7 +923,7 @@ div00:      adc     hl,hl
 div01: add     a,a
        djnz    div00
        dec     a
-       or      a
+       scf
  push af
  ld a,'B
  call print_char
@@ -972,7 +973,7 @@ div11:      add     a,a
        djnz    div10
        ;inc    a
        ;dec    a                       ; compensation
-       scf
+       jr      c,.
  push af
  ld a,'D
  call print_char