--- gforth/vmgen-ex/support.c 2001/04/29 11:28:24 1.1 +++ gforth/vmgen-ex/support.c 2007/12/31 18:40:26 1.7 @@ -1,12 +1,12 @@ /* support functions and main() for vmgen example - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001,2003 Free Software Foundation, Inc. This file is part of Gforth. Gforth is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 + as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,13 +15,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + along with this program; if not, see http://www.gnu.org/licenses/. */ #include #include #include +extern int optind; + #include #include "mini.h" @@ -52,6 +53,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 +155,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 +165,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 +173,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 +200,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; }