Remove rst 0x30, sometimes inline code, sometimes moving it to prefix a routine
authorNick Downing <nick@ndcode.org>
Fri, 21 Jun 2019 14:28:12 +0000 (00:28 +1000)
committerNick Downing <nick@ndcode.org>
Fri, 21 Jun 2019 14:28:12 +0000 (00:28 +1000)
sm3.asm

diff --git a/sm3.asm b/sm3.asm
index 7bd4abf..8fc3742 100644 (file)
--- a/sm3.asm
+++ b/sm3.asm
@@ -353,7 +353,7 @@ page1_imm_slrev_w:
 page1_sl_w:
        pop     hl
        call    math_sl_w
-       jr      mul_w_done
+       jr      add_w_done ;mul_w_done
 
 page1_imm_sl_w:
        rst     0x28
@@ -361,7 +361,7 @@ page1_imm_sl_w:
 page1_slrev_w:
        pop     hl
        call    math_sl_w0
-       jr      mul_w_done
+       jr      add_w_done ;mul_w_done
 
 page1_imm_srrev_sw:
        rst     0x28
@@ -446,25 +446,43 @@ page1_ld_l:
 
 page1_imm_slrev_l:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       call    math_sl_l0
+       jr      page1_dispatch2
 page1_sl_l:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        call    math_sl_l0
        jr      page1_dispatch2
 
 page1_imm_srrev_sl:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       call    math_sr_sl0
+       jr      page1_dispatch2
 page1_sr_sl:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        call    math_sr_sl0
        jr      page1_dispatch2
 
 page1_imm_srrev_ul:
-       rst     0x38
-       .db     0x3e ; ld a,
+       ;rst    0x38
+       ;.db    0x3e ; ld a,
+       call    math_sr_ul0
+       jr      page1_dispatch2
 page1_sr_ul:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        call    math_sr_ul0
 page1_dispatch2:
        ld      a,(bc)
@@ -533,39 +551,43 @@ page2_st_l:
 
 page2_imm_cmprev_sl:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jp      math_cmprev_sl
 page2_cmp_sl:
-       rst     0x30
+       ;rst    0x30
        ;call   math_cmprev_sl
        ;jr     page2_dispatch0
-       jp      math_cmprev_sl
+       jp      math_cmprev_sl0
 
 page2_imm_cmprev_ul:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jp      math_cmprev_ul
 page2_cmp_ul:
-       rst     0x30
+       ;rst    0x30
        ;call   math_cmprev_ul
        ;jr     page2_dispatch0
-       jp      math_cmprev_ul
+       jp      math_cmprev_ul0
 
 page2_imm_cmp_sl:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jp      math_cmp_sl
 page2_cmprev_sl:
-       rst     0x30
+       ;rst    0x30
        ;call   math_cmp_sl
        ;jr     page2_dispatch0
-       jp      math_cmp_sl
+       jp      math_cmp_sl0
 
 page2_imm_cmp_ul:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jp      math_cmp_ul
 page2_cmprev_ul:
-       rst     0x30
+       ;rst    0x30
        ;call   math_cmp_ul
        ;jr     page2_dispatch0
-       jp      math_cmp_ul
+       jp      math_cmp_ul0
 
 ; page 2 to 2
 
@@ -575,10 +597,10 @@ page2_imm_and_l:
        jp      math_and_imm_l
 
 page2_and_l:
-       rst     0x30
+       ;rst    0x30
        ;call   math_and_l
        ;jr     page2_dispatch2
-       jp      math_and_l
+       jp      math_and_l0
 
 page2_imm_or_l:
        ;call   math_or_imm_l
@@ -586,10 +608,10 @@ page2_imm_or_l:
        jp      math_or_imm_l
 
 page2_or_l:
-       rst     0x30
+       ;rst    0x30
        ;call   math_or_l
        ;jr     page2_dispatch2
-       jp      math_or_l
+       jp      math_or_l0
 
 page2_imm_xor_l:
        ;call   math_xor_imm_l
@@ -597,16 +619,22 @@ page2_imm_xor_l:
        jp      math_xor_imm_l
 
 page2_xor_l:
-       rst     0x30
+       ;rst    0x30
        ;call   math_xor_l
        ;jr     page2_dispatch2
-       jp      math_xor_l
+       jp      math_xor_l0
 
 page2_imm_add_l:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jr      add_l_entry
 page2_add_l:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
+add_l_entry:
        exx
        add     hl,de
        exx
@@ -615,9 +643,15 @@ page2_add_l:
 
 page2_imm_subrev_l:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       jr      sub_l_entry
 page2_sub_l:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
+sub_l_entry:
        exx
        ex      de,hl
        or      a
@@ -628,7 +662,11 @@ page2_sub_l:
 
 ; use addition for page2_imm_sub_l
 page2_subrev_l:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        exx
        or      a
        sbc     hl,de
@@ -669,41 +707,71 @@ page2_imm_mul_ul:
        jr      mul_l_done
 
 page2_mul_l:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        ex      de,hl
        call    math_mul_l
        jr      mul_l_done
 
 page2_imm_divrev_sl:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       call    math_div_sl0
+       jr      div_l_done
 page2_div_sl:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        call    math_div_sl0
        jr      div_l_done
 
 page2_imm_div_sl:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       ex      de,hl
+       call    math_div_sl
+       jr      div_l_done
 page2_divrev_sl:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        ex      de,hl
        call    math_div_sl
        jr      div_l_done
 
 page2_imm_divrev_ul:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       call    math_div_ul0
+       jr      div_l_done
 page2_div_ul:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        call    math_div_ul0
        jr      div_l_done
 
 page2_imm_div_ul:
        rst     0x38
-       .db     0x3e ; ld a,
+       ;.db    0x3e ; ld a,
+       ex      de,hl
+       call    math_div_ul
+       jr      div_l_done
 page2_divrev_ul:
-       rst     0x30
+       ;rst    0x30
+       exx
+       pop     de
+       exx
+       pop     hl
        ex      de,hl
        call    math_div_ul
 div_l_done:
@@ -943,6 +1011,11 @@ math_and_w: ; de &= hl
        ld      h,page1
        jp      (hl)
 
+math_and_l0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_and_l: ; de:hl' &= hl:de'
        exx
        ld      a,l
@@ -1025,6 +1098,11 @@ math_or_w: ; de |= hl
        ld      h,page1
        jp      (hl)
 
+math_or_l0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_or_l: ; de:hl' |= hl:de'
        exx
        ld      a,l
@@ -1107,6 +1185,11 @@ math_xor_w: ; de ^= hl
        ld      h,page1
        jp      (hl)
 
+math_xor_l0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_xor_l: ; de:hl' ^= hl:de'
        exx
        ld      a,l
@@ -1149,6 +1232,11 @@ math_cmprev_sw: ; cf=1 hl < de, zf=1 hl == de, signed
 
 ; use inline code for math_cmp_uw, math_cmprev_uw
 
+math_cmp_sl0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_cmp_sl: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', signed
        ex      de,hl
        or      a
@@ -1166,6 +1254,11 @@ math_cmp_sl: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', signed
        ld      h,page0
        jp      (hl)
 
+math_cmp_ul0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_cmp_ul: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', unsigned
        ex      de,hl
        or      a
@@ -1184,6 +1277,11 @@ cmp_l_dispatch:
        ld      h,page0
        jp      (hl)
 
+math_cmprev_sl0:
+       exx
+       pop     de
+       exx
+       pop     hl
 math_cmprev_sl: ; cf=1 hl:de' < de:hl', zf=1 hl:de' == de:hl', signed
        or      a
        sbc     hl,de
@@ -1200,7 +1298,12 @@ math_cmprev_sl: ; cf=1 hl:de' < de:hl', zf=1 hl:de' == de:hl', signed
        ld      h,page0
        jp      (hl)
 
-math_cmprev_ul: ; cf=1 de:hl' < de:de', zf=1 de:hl' == hl:de', unsigned
+math_cmprev_ul0:
+       exx
+       pop     de
+       exx
+       pop     hl
+math_cmprev_ul: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', unsigned
        or      a
        sbc     hl,de
        ;ret    nz
@@ -2659,6 +2762,12 @@ div_l_n18: ; done, below
 ; debugging
 
 print_trace: ; print af, bc, de:hl', hl:de', sp, (sp+2):(sp)
+       call    print_trace2
+       ld      a,(bc)
+       inc     bc
+       ld      l,a
+       jp      (hl)
+print_trace2:
        push    hl
        push    af
        pop     hl
@@ -2697,12 +2806,12 @@ print_trace: ; print af, bc, de:hl', hl:de', sp, (sp+2):(sp)
        call    print_word
        ld      a,' 
        call    print_char
-       ld      hl,4
+       ld      hl,6
        add     hl,sp
        call    print_word
        ld      a,' 
        call    print_char
-       ld      hl,6
+       ld      hl,8
        add     hl,sp
        ld      a,(hl)
        inc     hl
@@ -2711,7 +2820,7 @@ print_trace: ; print af, bc, de:hl', hl:de', sp, (sp+2):(sp)
        call    print_word
        ld      a,':
        call    print_char
-       ld      hl,4
+       ld      hl,6
        add     hl,sp
        ld      a,(hl)
        inc     hl
@@ -2724,10 +2833,7 @@ print_trace: ; print af, bc, de:hl', hl:de', sp, (sp+2):(sp)
        call    print_char
        pop     af
        pop     hl
-       ld      a,(bc)
-       inc     bc
-       ld      l,a
-       jp      (hl)
+       ret
 
 print_word:
        push    af