--- gforth/vmgen-ex/support.c 2001/04/29 11:28:24 1.1 +++ gforth/vmgen-ex/support.c 2003/02/02 11:05:51 1.5 @@ -22,6 +22,8 @@ #include #include #include +extern int optind; + #include #include "mini.h" @@ -52,6 +54,11 @@ void printarg_a(char *a) fprintf(vm_out, "%p ", a); } +void printarg_Cell(Cell i) +{ + fprintf(vm_out, "0x%lx ", i); +} + /* This language has separate name spaces for functions and variables; this works because there are no function variables, and the syntax makes it possible to differentiate between function and variable @@ -149,9 +156,9 @@ int main(int argc, char **argv) int disassembling = 0; int profiling = 0; int c; - Inst vm_code[CODE_SIZE]; + Inst *vm_code=(Inst *)calloc(CODE_SIZE,sizeof(Inst)); Inst *start; - Cell stack[STACK_SIZE]; + Cell *stack=(Cell *)calloc(STACK_SIZE,sizeof(Cell)); engine_t runvm=engine; while ((c = getopt(argc, argv, "hdpt")) != -1) { @@ -159,14 +166,7 @@ int main(int argc, char **argv) default: case 'h': help: - fprintf(stderr, "\ -Usage: %s [options] file\n -Options:\n --h Print this message and exit\n\ --d disassemble VM program before execution\n\ --p profile VM code sequences (output on stderr)\n\ --t trace VM code execution (output on stderr)\n\ -", + fprintf(stderr, "Usage: %s [options] file\nOptions:\n-h Print this message and exit\n-d disassemble VM program before execution\n-p profile VM code sequences (output on stderr)\n-t trace VM code execution (output on stderr)\n", argv[0]); exit(1); case 'd': @@ -174,6 +174,7 @@ Options:\n break; case 'p': profiling=1; + use_super=0; /* we don't want superinstructions in the profile */ runvm = engine_debug; break; case 't': @@ -200,12 +201,16 @@ Options:\n exit(1); start=vmcodep; - gen_main_end(); + gen_main_end(); + vmcode_end=vmcodep; if (disassembling) vm_disassemble(vm_code, vmcodep, vm_prim); printf("result = %ld\n",runvm(start, stack+STACK_SIZE-1, NULL)); + if (profiling) + vm_print_profile(vm_out); + return 0; }