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('?'); printchar('?');
print(errmsgs[errcode - ERR_FIRST]); print(errmsgs[errcode - ERR_FIRST]);
print(" \"");
print(txtPtr);
print("\"\n");
} }
#ifdef A2E #ifdef A2E
#pragma code-name (pop) #pragma code-name (pop)

View File

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

View File

@ -180,9 +180,6 @@ unsigned char *memory = 0;
#define CHECKSTACKOVERFLOW(bytes) #define CHECKSTACKOVERFLOW(bytes)
#endif #endif
/* Handler for unsupported bytecode */
#define UNSUPPORTED() unsupported()
#ifdef STACKCHECKS #ifdef STACKCHECKS
/* /*
* Check for evaluation stack underflow. * Check for evaluation stack underflow.
@ -1084,76 +1081,264 @@ typedef void (*func)(void);
* Must be in same order as enum bytecode. * Must be in same order as enum bytecode.
*/ */
func jumptbl[] = { func jumptbl[] = {
vm_end, vm_end,
vm_ldimm, vm_ldimm,
vm_ldaword, vm_ldaword,
vm_ldawordimm, vm_ldawordimm,
vm_ldabyte, vm_ldabyte,
vm_ldabyteimm, vm_ldabyteimm,
vm_staword, vm_staword,
vm_stawordimm, vm_stawordimm,
vm_stabyte, vm_stabyte,
vm_stabyteimm, vm_stabyteimm,
vm_ldrword, vm_ldrword,
vm_ldrwordimm, vm_ldrwordimm,
vm_ldrbyte, vm_ldrbyte,
vm_ldrbyteimm, vm_ldrbyteimm,
vm_strword, vm_strword,
vm_strwordimm, vm_strwordimm,
vm_strbyte, vm_strbyte,
vm_strbyteimm, vm_strbyteimm,
vm_swap, vm_swap,
vm_dup, vm_dup,
vm_dup2, vm_dup2,
vm_drop, vm_drop,
vm_over, vm_over,
vm_pick, vm_pick,
vm_popword, vm_popword,
vm_popbyte, vm_popbyte,
vm_pshword, vm_pshword,
vm_pshbyte, vm_pshbyte,
vm_discard, vm_discard,
vm_sptofp, vm_sptofp,
vm_fptosp, vm_fptosp,
vm_ator, vm_ator,
vm_rtoa, vm_rtoa,
vm_inc, vm_inc,
vm_dec, vm_dec,
vm_add, vm_add,
vm_sub, vm_sub,
vm_mul, vm_mul,
vm_div, vm_div,
vm_mod, vm_mod,
vm_neg, vm_neg,
vm_gt, vm_gt,
vm_gte, vm_gte,
vm_lt, vm_lt,
vm_lte, vm_lte,
vm_eql, vm_eql,
vm_neql, vm_neql,
vm_and, vm_and,
vm_or, vm_or,
vm_not, vm_not,
vm_bitand, vm_bitand,
vm_bitor, vm_bitor,
vm_bitxor, vm_bitxor,
vm_bitnot, vm_bitnot,
vm_lsh, vm_lsh,
vm_rsh, vm_rsh,
vm_jmp, vm_jmp,
vm_jmpimm, vm_jmpimm,
vm_brnch, vm_brnch,
vm_brnchimm, vm_brnchimm,
vm_jsr, vm_jsr,
vm_jsrimm, vm_jsrimm,
vm_rts, vm_rts,
vm_prdec, vm_prdec,
vm_prhex, vm_prhex,
vm_prch, vm_prch,
vm_prstr, vm_prstr,
vm_prmsg, vm_prmsg,
vm_kbdch, vm_kbdch,
vm_kbdln}; 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. * Fetch, decode and execute a VM instruction.
@ -1255,7 +1440,46 @@ void execute()
#endif #endif
#endif #endif
#ifndef A2E
jumptbl[MEM(pc)](); 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
} }
}; };