]> cloudbase.mooo.com Git - avrcpm.git/commitdiff
* avr/z80.asm:
authorLeo <erbl259-lmu@yahoo.de>
Mon, 26 Jul 2010 06:28:08 +0000 (06:28 +0000)
committerLeo <erbl259-lmu@yahoo.de>
Mon, 26 Jul 2010 06:28:08 +0000 (06:28 +0000)
  - Interpreter: inc/dec optimization.

git-svn-id: svn://cu.loc/avr-cpm/trunk@53 57430480-672e-4586-8877-bcf8adbbf3b7

avrcpm/avr/z80.asm

index 3d5f0b84ec16455375eaf9f5c2a1e9080f398b07..2be56aa35cc438406a5cd0c0e299aae04b59e92e 100644 (file)
@@ -2611,6 +2611,8 @@ do_store_am:
 .equ OP_EI             = (38<<10)
 .equ OP_INV            = (39<<10)
 .equ OP_CPFA   = (40<<10)
+.equ OP_INCA   = (41<<10)
+.equ OP_DECA   = (42<<10)
 
 opjumps:
        rjmp do_op_nop
@@ -2654,6 +2656,8 @@ opjumps:
        rjmp do_op_ei
        rjmp do_op_inv
        rjmp do_op_cpfa
+       rjmp do_op_inca
+       rjmp do_op_deca
 
 
 ;How the flags are supposed to work:
@@ -2933,15 +2937,27 @@ do_op_nop:
 ;
 ; 
 do_op_inc:
-       ldi     temp,1
-       add     opl,temp
+       inc     opl
+#if EM_Z80
        in      temp, sreg
+#endif
        andi    z_flags,(1<<ZFL_H)|(1<<ZFL_C)   ; preserve C-, and H-flag
        ldpmx   temp2, sz53p_tab, opl
        or      z_flags,temp2           ;
        do_z80_flags_HP
        ret
 
+do_op_inca:
+       inc     z_a
+#if EM_Z80
+       in      temp, sreg
+#endif
+       andi    z_flags,(1<<ZFL_H)|(1<<ZFL_C)   ; preserve C-, and H-flag
+       ldpmx   temp2, sz53p_tab, z_a
+       or      z_flags,temp2           ;
+       do_z80_flags_HP
+       ret
+
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
 ;----------------------------------------------------------------
@@ -2954,8 +2970,10 @@ do_op_inc:
 ;
 ;
 do_op_dec:
-       subi    opl,1
+       dec     opl
+#if EM_Z80
        in    temp, sreg
+#endif
        andi    z_flags,(1<<ZFL_H)|(1<<ZFL_C)   ; preserve C-, and H-flag
        ldpmx   temp2, sz53p_tab, opl
        or      z_flags,temp2           ;
@@ -2963,6 +2981,17 @@ do_op_dec:
        do_z80_flags_set_N
        ret
 
+do_op_deca:
+       dec     z_a
+#if EM_Z80
+       in    temp, sreg
+#endif
+       andi    z_flags,(1<<ZFL_H)|(1<<ZFL_C)   ; preserve C-, and H-flag
+       ldpmx   temp2, sz53p_tab, z_a
+       or      z_flags,temp2           ;
+       do_z80_flags_HP
+       do_z80_flags_set_N
+       ret
 
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
@@ -3852,8 +3881,8 @@ inst_table:
 .dw (FETCH_SP  | OP_ADDHL      | STORE_HL )     ; 39           ADD HL,SP
 .dw (FETCH_DIR16| OP_RMEM8     | STORE_A  )     ; 3A nn nn     LD A,(nn)
 .dw (FETCH_SP  | OP_DEC16      | STORE_SP )     ; 3B           DEC SP
-.dw (FETCH_A    | OP_INC       | STORE_A  )     ; 3C           INC A
-.dw (FETCH_A    | OP_DEC       | STORE_A  )     ; 3D           DEC A
+.dw (FETCH_NOP  | OP_INCA      | STORE_NOP)     ; 3C           INC A
+.dw (FETCH_NOP  | OP_DECA      | STORE_NOP)     ; 3D           DEC A
 .dw (FETCH_DIR8        | OP_NOP        | STORE_A  )     ; 3E nn        LD A,n
 .dw (FETCH_NOP | OP_CCF        | STORE_NOP)     ; 3F           CCF (Complement Carry Flag, gvd)
 .dw (FETCH_B   | OP_NOP        | STORE_B  )     ; 40           LD B,r