--- gforth/engine/profile.c 2001/03/01 14:27:22 1.3 +++ gforth/engine/profile.c 2003/11/02 18:18:35 1.12 @@ -1,6 +1,6 @@ /* VM profiling support stuff - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001,2002,2003 Free Software Foundation, Inc. This file is part of Gforth. @@ -20,10 +20,10 @@ */ #include "config.h" +#include "forth.h" #include #include #include -#include "forth.h" /* data structure: simple hash table with external chaining */ @@ -85,9 +85,9 @@ void vm_count_block(Xt *ip) } #ifdef DIRECT_THREADED -#define VM_IS_INST(inst, n) ((inst) == vm_prims[(n)+DOESJUMP+1]) +#define VM_IS_INST(inst, n) ((inst) == vm_prims[n]) #else -#define VM_IS_INST(inst, n) ((inst) == &(vm_prims[(n)+DOESJUMP+1])) +#define VM_IS_INST(inst, n) ((inst) == &(vm_prims[n])) #endif void postprocess_block(block_count *b) @@ -96,12 +96,13 @@ void postprocess_block(block_count *b) block_count *next_block; do { -#include "profile.i" +#include PROFILE_I /* else */ { add_inst(b,"unknown"); ip++; } + _endif_: next_block = block_lookup(ip); } while (next_block == NULL); /* we fell through, so set fallthrough and update the count */ @@ -127,7 +128,8 @@ void postprocess(void) } } -#if 0 +#if 1 +/* full basic blocks only */ void print_block(FILE *file, block_count *b) { size_t i; @@ -137,20 +139,34 @@ void print_block(FILE *file, block_count fprintf(file, "%s ", b->insts[i]); putc('\n', file); } -#endif +#elif 0 +/* full basic blocks and all their prefixes */ +void print_block(FILE *file, block_count *b) +{ + size_t i,j; + for (j=1; j<=b->ninsts; j++) { + fprintf(file,"%14lld\t",b->count); + for (i=0; iinsts[i]); + putc('\n', file); + } +} +#else +/* all subsequences up to length 12 */ void print_block(FILE *file, block_count *b) { size_t i,j,k; - for (i=2; i<12; i++) - for (j=0; i+jninsts; j++) { + for (i=1; i<2; i++) + for (j=0; i+j<=b->ninsts; j++) { fprintf(file,"%14lld\t",b->count); for (k=j; kinsts[k]); putc('\n', file); } } +#endif void vm_print_profile(FILE *file) {