v0.78: VM performance improvement, removed debug printout on error

This commit is contained in:
Bobbi Webber-Manners 2018-06-11 22:06:33 -04:00
parent 8765cfce25
commit 86e517a6eb
14 changed files with 298 additions and 77 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -400,9 +400,6 @@ void error(unsigned char errcode)
{
printchar('?');
print(errmsgs[errcode - ERR_FIRST]);
print(" \"");
print(txtPtr);
print("\"\n");
}
#ifdef A2E
#pragma code-name (pop)

View File

@ -37,7 +37,7 @@
/* */
/**************************************************************************/
#define VERSIONSTR "0.77"
#define VERSIONSTR "0.78"
void print(char *str);

View File

@ -180,9 +180,6 @@ unsigned char *memory = 0;
#define CHECKSTACKOVERFLOW(bytes)
#endif
/* Handler for unsupported bytecode */
#define UNSUPPORTED() unsupported()
#ifdef STACKCHECKS
/*
* Check for evaluation stack underflow.
@ -1084,76 +1081,264 @@ typedef void (*func)(void);
* Must be in same order as enum bytecode.
*/
func jumptbl[] = {
vm_end,
vm_ldimm,
vm_ldaword,
vm_ldawordimm,
vm_ldabyte,
vm_ldabyteimm,
vm_staword,
vm_stawordimm,
vm_stabyte,
vm_stabyteimm,
vm_ldrword,
vm_ldrwordimm,
vm_ldrbyte,
vm_ldrbyteimm,
vm_strword,
vm_strwordimm,
vm_strbyte,
vm_strbyteimm,
vm_swap,
vm_dup,
vm_dup2,
vm_drop,
vm_over,
vm_pick,
vm_popword,
vm_popbyte,
vm_pshword,
vm_pshbyte,
vm_discard,
vm_sptofp,
vm_fptosp,
vm_ator,
vm_rtoa,
vm_inc,
vm_dec,
vm_add,
vm_sub,
vm_mul,
vm_div,
vm_mod,
vm_neg,
vm_gt,
vm_gte,
vm_lt,
vm_lte,
vm_eql,
vm_neql,
vm_and,
vm_or,
vm_not,
vm_bitand,
vm_bitor,
vm_bitxor,
vm_bitnot,
vm_lsh,
vm_rsh,
vm_jmp,
vm_jmpimm,
vm_brnch,
vm_brnchimm,
vm_jsr,
vm_jsrimm,
vm_rts,
vm_prdec,
vm_prhex,
vm_prch,
vm_prstr,
vm_prmsg,
vm_kbdch,
vm_kbdln};
vm_end,
vm_ldimm,
vm_ldaword,
vm_ldawordimm,
vm_ldabyte,
vm_ldabyteimm,
vm_staword,
vm_stawordimm,
vm_stabyte,
vm_stabyteimm,
vm_ldrword,
vm_ldrwordimm,
vm_ldrbyte,
vm_ldrbyteimm,
vm_strword,
vm_strwordimm,
vm_strbyte,
vm_strbyteimm,
vm_swap,
vm_dup,
vm_dup2,
vm_drop,
vm_over,
vm_pick,
vm_popword,
vm_popbyte,
vm_pshword,
vm_pshbyte,
vm_discard,
vm_sptofp,
vm_fptosp,
vm_ator,
vm_rtoa,
vm_inc,
vm_dec,
vm_add,
vm_sub,
vm_mul,
vm_div,
vm_mod,
vm_neg,
vm_gt,
vm_gte,
vm_lt,
vm_lte,
vm_eql,
vm_neql,
vm_and,
vm_or,
vm_not,
vm_bitand,
vm_bitor,
vm_bitxor,
vm_bitnot,
vm_lsh,
vm_rsh,
vm_jmp,
vm_jmpimm,
vm_brnch,
vm_brnchimm,
vm_jsr,
vm_jsrimm,
vm_rts,
vm_prdec,
vm_prhex,
vm_prch,
vm_prstr,
vm_prmsg,
vm_kbdch,
vm_kbdln,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported,
unsupported /* Should be at least 255 lines long */
};
/*
* Fetch, decode and execute a VM instruction.
@ -1255,7 +1440,46 @@ void execute()
#endif
#endif
#ifndef A2E
jumptbl[MEM(pc)]();
#else
#if 0
/* Slight speedup versus the code emitted by cc65 */
__asm__("ml: lda (_pc)");
__asm__(" stz tmp1");
__asm__(" asl a");
__asm__(" rol tmp1");
__asm__(" clc");
__asm__(" adc #<(_jumptbl)");
__asm__(" sta ptr1");
__asm__(" lda tmp1");
__asm__(" adc #>(_jumptbl)");
__asm__(" sta ptr1+1");
__asm__(" ldy #$01");
__asm__(" lda (ptr1),y");
__asm__(" tax");
__asm__(" lda (ptr1)");
__asm__(" jsr callax");
__asm__(" bra ml");
#else
/* This version assumes (_pc) < 128, saves a few more cycles */
/* Slight speedup versus the code emitted by cc65 */
__asm__("ml: lda (_pc)");
__asm__(" asl a");
__asm__(" clc");
__asm__(" adc #<(_jumptbl)");
__asm__(" sta ptr1");
__asm__(" lda #$00");
__asm__(" adc #>(_jumptbl)");
__asm__(" sta ptr1+1");
__asm__(" ldy #$01");
__asm__(" lda (ptr1),y");
__asm__(" tax");
__asm__(" lda (ptr1)");
__asm__(" jsr callax");
__asm__(" bra ml");
#endif
#endif
}
};