diff --git a/vvp/compile.cc b/vvp/compile.cc index 17a573ce4..f292715e3 100644 --- a/vvp/compile.cc +++ b/vvp/compile.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: compile.cc,v 1.57 2001/05/06 17:42:22 steve Exp $" +#ident "$Id: compile.cc,v 1.58 2001/05/08 23:32:26 steve Exp $" #endif # include "compile.h" @@ -300,7 +300,12 @@ void compile_functor(char*label, char*type, unsigned argc, struct symb_s*argv) obj->ival = 0x33; obj->oval = 2; + obj->odrive0 = 6; + obj->odrive1 = 6; obj->mode = 0; +#if defined(WIDH_DEBUG) + obj->breakpoint = 0; +#endif if (strcmp(type, "OR") == 0) { obj->table = ft_OR; @@ -406,6 +411,9 @@ void compile_udp_functor(char*label, char*type, iobj->old_ival = obj->ival; iobj->oval = u->init; iobj->mode = M42; +#if defined(WITH_DEBUG) + iobj->breakpoint = 0; +#endif if (idx) { iobj->out = fdx; @@ -498,8 +506,13 @@ void compile_event(char*label, char*type, obj->ival = 0xaa; obj->oval = 2; + obj->odrive0 = 6; + obj->odrive0 = 6; obj->mode = 1; obj->out = 0; +#if defined(WITH_DEBUG) + obj->breakpoint = 0; +#endif obj->event = (struct vvp_event_s*) malloc(sizeof (struct vvp_event_s)); obj->event->threads = 0; @@ -527,8 +540,13 @@ void compile_named_event(char*label, char*name) obj->ival = 0xaa; obj->oval = 2; + obj->odrive0 = 6; + obj->odrive1 = 6; obj->mode = 2; obj->out = 0; +#if defined(WITH_DEBUG) + obj->breakpoint = 0; +#endif obj->event = (struct vvp_event_s*) malloc(sizeof (struct vvp_event_s)); obj->event->threads = 0; @@ -547,8 +565,13 @@ void compile_event_or(char*label, unsigned argc, struct symb_s*argv) obj->ival = 0xaa; obj->oval = 2; + obj->odrive0 = 6; + obj->odrive1 = 6; obj->mode = 2; obj->out = 0; +#if defined(WITH_DEBUG) + obj->breakpoint = 0; +#endif obj->event = new struct vvp_event_s; obj->event->threads = 0; @@ -872,7 +895,12 @@ void compile_variable(char*label, char*name, int msb, int lsb, obj->table = ft_var; obj->ival = 0x22; obj->oval = 0x02; + obj->odrive0 = 6; + obj->odrive1 = 6; obj->mode = 0; +#if defined(WITH_DEBUG) + obj->breakpoint = 0; +#endif } /* Make the vpiHandle for the reg. */ @@ -894,9 +922,14 @@ void compile_net(char*label, char*name, int msb, int lsb, bool signed_flag, for (unsigned idx = 0 ; idx < wid ; idx += 1) { functor_t obj = functor_index(ipoint_index(fdx,idx)); obj->table = ft_var; - obj->ival = 0x22; + obj->ival = 0x02; obj->oval = 0x02; + obj->odrive0 = 6; + obj->odrive1 = 6; obj->mode = 0; +#if defined(WITH_DEBUG) + obj->breakpoint = 0; +#endif } assert(argc == wid); @@ -1047,8 +1080,30 @@ void compile_dump(FILE*fd) codespace_dump(fd); } +/* + * These functions are in support of the debugger. + * + * debug_lookup_functor + * Use a name to locate a functor address. This only gets the LSB + * of a vector, but it is enough to locate the object. + */ +vvp_ipoint_t debug_lookup_functor(const char*name) +{ + symbol_value_t val = sym_get_value(sym_functors, name); + return val.num; +} + + /* * $Log: compile.cc,v $ + * Revision 1.58 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.57 2001/05/06 17:42:22 steve * Add the %ix/get instruction. (Stephan Boettcher) * @@ -1084,110 +1139,5 @@ void compile_dump(FILE*fd) * * Revision 1.48 2001/05/01 01:09:39 steve * Add support for memory objects. (Stephan Boettcher) - * - * Revision 1.47 2001/04/30 03:53:19 steve - * Fix up functor inputs to support C values. - * - * Revision 1.46 2001/04/29 23:13:33 steve - * Add bufif0 and bufif1 functors. - * - * Revision 1.45 2001/04/29 22:59:46 steve - * Support .net constant inputs. - * - * Revision 1.44 2001/04/28 20:24:03 steve - * input connect cleanup. (Stephan Boettcher) - * - * Revision 1.43 2001/04/26 15:52:22 steve - * Add the mode-42 functor concept to UDPs. - * - * Revision 1.42 2001/04/26 05:12:02 steve - * Implement simple MUXZ for ?: operators. - * - * Revision 1.41 2001/04/26 03:10:55 steve - * Redo and simplify UDP behavior. - * - * Revision 1.40 2001/04/24 03:48:53 steve - * Fix underflow when UDP has 1 input. - * - * Revision 1.39 2001/04/24 02:23:59 steve - * Support for UDP devices in VVP (Stephen Boettcher) - * - * Revision 1.38 2001/04/23 00:37:58 steve - * Support unconnected .net objects. - * - * Revision 1.37 2001/04/21 02:04:01 steve - * Add NAND and XNOR functors. - * - * Revision 1.36 2001/04/18 05:03:49 steve - * Resolve forward references for %fork. - * - * Revision 1.35 2001/04/18 04:21:23 steve - * Put threads into scopes. - * - * Revision 1.34 2001/04/15 16:37:48 steve - * add XOR support. - * - * Revision 1.33 2001/04/15 04:07:56 steve - * Add support for behavioral xnor. - * - * Revision 1.32 2001/04/14 05:10:56 steve - * support the .event/or statement. - * - * Revision 1.31 2001/04/13 03:55:18 steve - * More complete reap of all threads. - * - * Revision 1.30 2001/04/05 01:34:26 steve - * Add the .var/s and .net/s statements for VPI support. - * - * Revision 1.29 2001/04/05 01:12:28 steve - * Get signed compares working correctly in vvp. - * - * Revision 1.28 2001/04/01 22:25:33 steve - * Add the reduction nor instruction. - * - * Revision 1.27 2001/04/01 21:31:46 steve - * Add the buf functor type. - * - * Revision 1.26 2001/04/01 07:22:08 steve - * Implement the less-then and %or instructions. - * - * Revision 1.25 2001/04/01 06:40:45 steve - * Support empty statements for hanging labels. - * - * Revision 1.24 2001/04/01 06:12:13 steve - * Add the bitwise %and instruction. - * - * Revision 1.23 2001/04/01 04:34:28 steve - * Implement %cmp/x and %cmp/z instructions. - * - * Revision 1.22 2001/03/31 19:00:43 steve - * Add VPI support for the simulation time. - * - * Revision 1.21 2001/03/31 17:36:02 steve - * Add the jmp/1 instruction. - * - * Revision 1.20 2001/03/31 01:59:59 steve - * Add the ADD instrunction. - * - * Revision 1.19 2001/03/30 04:55:22 steve - * Add fork and join instructions. - * - * Revision 1.18 2001/03/29 03:46:36 steve - * Support named events as mode 2 functors. - * - * Revision 1.17 2001/03/28 17:24:32 steve - * include string.h for strcmp et al. - * - * Revision 1.16 2001/03/26 04:00:39 steve - * Add the .event statement and the %wait instruction. - * - * Revision 1.15 2001/03/25 19:38:23 steve - * Support NOR and NOT gates. - * - * Revision 1.14 2001/03/25 03:54:26 steve - * Add JMP0XZ and postpone net inputs when needed. - * - * Revision 1.13 2001/03/25 00:35:35 steve - * Add the .net statement. */ diff --git a/vvp/debug.cc b/vvp/debug.cc index 26d076221..0ab1cf828 100644 --- a/vvp/debug.cc +++ b/vvp/debug.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: debug.cc,v 1.1 2001/05/05 23:55:46 steve Exp $" +#ident "$Id: debug.cc,v 1.2 2001/05/08 23:32:26 steve Exp $" #endif /* @@ -31,16 +31,78 @@ #if defined(WITH_DEBUG) # include "debug.h" +# include "functor.h" # include "schedule.h" # include # include # include # include +# include # include static bool interact_flag = false; +extern vvp_ipoint_t debug_lookup_functor(const char*name); + +static void cmd_lookup(unsigned argc, char*argv[]) +{ + for (unsigned idx = 1 ; idx < argc ; idx += 1) { + vvp_ipoint_t fnc = debug_lookup_functor(argv[idx]); + + if (fnc) { + printf("%s: functor 0x%x\n", argv[idx], fnc); + continue; + } + + printf("%s: *** unknown\n", argv[idx]); + } +} + +static void cmd_fbreak(unsigned argc, char*argv[]) +{ + for (unsigned idx = 1 ; idx < argc ; idx += 1) { + vvp_ipoint_t fnc = strtoul(argv[idx],0,0); + functor_t fp = functor_index(fnc); + + if (fp == 0) { + continue; + } + + fp->breakpoint = 1; + } +} + +static const char bitval_tab[4] = { '0', '1', 'x', 'z' }; +static const char*strength_tab[8] = { + "hiz", "small", + "medium", "weak", + "large", "pull", + "strong", "supply" }; + +static void cmd_functor(unsigned argc, char*argv[]) +{ + for (unsigned idx = 1 ; idx < argc ; idx += 1) { + vvp_ipoint_t fnc = strtoul(argv[idx],0,0); + functor_t fp = functor_index(fnc); + + if (fp == 0) { + continue; + } + + printf("out pointer = 0x%x\n", fp->out); + printf("input values = %c %c %c %c\n", + bitval_tab[fp->ival&3], + bitval_tab[(fp->ival>>2)&3], + bitval_tab[(fp->ival>>4)&3], + bitval_tab[(fp->ival>>6)&3]); + printf("out value = %c (%s0 %s1)\n", + bitval_tab[fp->oval], + strength_tab[fp->odrive0], + strength_tab[fp->odrive1]); + } +} + static void cmd_go(unsigned, char*[]) { interact_flag = false; @@ -60,9 +122,12 @@ static void cmd_unknown(unsigned argc, char*argv[]) struct { const char*name; void (*proc)(unsigned argc, char*argv[]); } cmd_table[] = { - { "go", &cmd_go}, - { "time", &cmd_time}, - { 0, &cmd_unknown} + { "fbreak", &cmd_fbreak}, + { "func", &cmd_functor}, + { "go", &cmd_go}, + { "lookup", &cmd_lookup}, + { "time", &cmd_time}, + { 0, &cmd_unknown} }; void breakpoint(void) @@ -104,6 +169,14 @@ void breakpoint(void) #endif /* * $Log: debug.cc,v $ + * Revision 1.2 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.1 2001/05/05 23:55:46 steve * Add the beginnings of an interactive debugger. * diff --git a/vvp/debug.txt b/vvp/debug.txt new file mode 100644 index 000000000..f2d762056 --- /dev/null +++ b/vvp/debug.txt @@ -0,0 +1,26 @@ + +INTERACTIVE ASSEMBLY DEBUGGER + +The VVP runtime includes an interactive runtime debugger that allows +the expert user to trace the actions of the VVP simulation. It is +entered just before simulation starts if the user uses the -d flag to +the vvp command, and it is also entered when an interesting breakpoint +is triggered. The -d flag is useful for giving the user a chance to +set breakpoints. + +DEBUGGER COMMANDS + +* go + +Resume the simulation. The simulation will continue until the next +breakpoint, or until the simulation ends. + +* lookup ... + +Give a symbol name, and this function will lookup that symbol and +return the type and address. + +fbreak
... + +Set the breakpoint on a given functor address. (Use the lookup +function to locate the address.) diff --git a/vvp/functor.cc b/vvp/functor.cc index cee18f318..cd89fddfc 100644 --- a/vvp/functor.cc +++ b/vvp/functor.cc @@ -17,13 +17,14 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: functor.cc,v 1.16 2001/05/06 03:51:37 steve Exp $" +#ident "$Id: functor.cc,v 1.17 2001/05/08 23:32:26 steve Exp $" #endif # include "functor.h" # include "udp.h" # include "schedule.h" # include "vthread.h" +# include "debug.h" # include /* @@ -233,17 +234,21 @@ static void functor_set_mode2(functor_t fp) * output. If the output changes any, then generate the necessary * propagation events to pass the output on. */ -void functor_set(vvp_ipoint_t ptr, unsigned bit, bool push) +void functor_set(vvp_ipoint_t ptr, unsigned bit, + unsigned drive0, unsigned drive1, + bool push) { functor_t fp = functor_index(ptr); unsigned pp = ipoint_port(ptr); assert(fp); - // assert(fp->table); + + assert(drive0 <= 8); + assert(drive1 <= 8); /* Change the bits of the input. */ static const unsigned char mask_table[4] = { 0xfc, 0xf3, 0xcf, 0x3f }; unsigned char mask = mask_table[pp]; - fp->ival = (fp->ival & mask) | (bit << (2*pp)); + fp->ival = (fp->ival & mask) | ((bit & 3) << (2*pp)); switch (fp->mode) { case 0: @@ -264,6 +269,11 @@ void functor_set(vvp_ipoint_t ptr, unsigned bit, bool push) fp->obj->set(ptr, fp, push); break; } + +#if defined(WITH_DEBUG) + if (fp->breakpoint) + breakpoint(); +#endif } unsigned functor_get(vvp_ipoint_t ptr) @@ -272,7 +282,7 @@ unsigned functor_get(vvp_ipoint_t ptr) assert(fp); if ((fp->mode == M42) && fp->obj) return fp->obj->get(ptr, fp); - return fp->oval & 3; + return fp->oval; } /* @@ -285,12 +295,14 @@ void functor_propagate(vvp_ipoint_t ptr) { functor_t fp = functor_index(ptr); unsigned char oval = fp->oval; + unsigned drive0 = fp->odrive0; + unsigned drive1 = fp->odrive1; vvp_ipoint_t idx = fp->out; while (idx) { functor_t idxp = functor_index(idx); vvp_ipoint_t next = idxp->port[ipoint_port(idx)]; - functor_set(idx, oval); + functor_set(idx, oval, drive0, drive1); idx = next; } } @@ -331,6 +343,14 @@ const unsigned char ft_var[16] = { /* * $Log: functor.cc,v $ + * Revision 1.17 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.16 2001/05/06 03:51:37 steve * Regularize the mode-42 functor handling. * diff --git a/vvp/functor.h b/vvp/functor.h index 538b1298a..dd92c6ae3 100644 --- a/vvp/functor.h +++ b/vvp/functor.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: functor.h,v 1.18 2001/05/06 03:51:37 steve Exp $" +#ident "$Id: functor.h,v 1.19 2001/05/08 23:32:26 steve Exp $" #endif # include "pointers.h" @@ -83,6 +83,25 @@ * with a struct vvp_fobj_s pointer. This abstract class has virtual * methods for receiving and retrieving values. See the vvp_fobj_s * definition below. + * + * STRENGTHS: + * + * The normal functor (modes 0, 1 and 2) is not aware of strengths. It + * generates strength simply by virtue of having strength + * specifications. + * + * When the bit value is read out of the functor, only the val bits + * are read. There are 8 drive values available in the 3 bits: + * HiZ = 0, + * SMALL = 1, + * MEDIUM = 2, + * WEAK = 3, + * LARGE = 4, + * PULL = 5, + * STRONG = 6, + * SUPPLY = 7 + * + * Only mode-42 functors are strength-aware. */ struct functor_s { @@ -99,7 +118,15 @@ struct functor_s { vvp_ipoint_t port[4]; /* These are the input values. */ unsigned char ival; - unsigned char oval; + /* Output value (low bits, and drive1 and drive0 strength. */ + unsigned oval : 2; + unsigned odrive0 : 3; + unsigned odrive1 : 3; +#if defined(WITH_DEBUG) + /* True if this functor triggers a breakpoint. */ + unsigned breakpoint : 1; +#endif + /* functor mode: 0 == table ; 1 == event ; 2 == named event */ unsigned char mode; union { @@ -171,10 +198,21 @@ extern vvp_ipoint_t functor_allocate(unsigned wid); /* * functor_set sets the addressed input to the specified value, and * calculates a new output value. If there is any propagation to do, - * propagation events are created. + * propagation events are created. Propagation calls further + * functor_set methods for the functors connected to the output. + * + * The val contains 2 bits two represent the 4-value bit. The drive0 + * and drive1 values are also passed, and typically just stored in the + * functor. */ -extern void functor_set(vvp_ipoint_t point, unsigned val, bool push=false); +extern void functor_set(vvp_ipoint_t point, unsigned val, + unsigned drive0, unsigned drive1, + bool push=false); +/* + * Read the value of the functor. In fact, only the *value* is read -- + * the strength of that value is stripped off. + */ extern unsigned functor_get(vvp_ipoint_t ptr); /* @@ -222,6 +260,14 @@ extern const unsigned char ft_var[]; /* * $Log: functor.h,v $ + * Revision 1.19 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.18 2001/05/06 03:51:37 steve * Regularize the mode-42 functor handling. * diff --git a/vvp/main.cc b/vvp/main.cc index 6592490f2..5c82af97e 100644 --- a/vvp/main.cc +++ b/vvp/main.cc @@ -17,10 +17,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: main.cc,v 1.8 2001/04/04 04:33:08 steve Exp $" +#ident "$Id: main.cc,v 1.9 2001/05/08 23:32:26 steve Exp $" #endif # include "config.h" +# include "debug.h" # include "parse_misc.h" # include "compile.h" # include "schedule.h" @@ -41,8 +42,12 @@ int main(int argc, char*argv[]) unsigned flag_errors = 0; const char*dump_path = 0; const char*design_path = 0; + bool debug_flag = false; - while ((opt = getopt(argc, argv, "D:M:m:")) != EOF) switch (opt) { + while ((opt = getopt(argc, argv, "D:dM:m:")) != EOF) switch (opt) { + case 'd': + debug_flag = true; + break; case 'D': dump_path = optarg; break; @@ -93,6 +98,9 @@ int main(int argc, char*argv[]) return compile_errors; } + if (debug_flag) + breakpoint(); + schedule_simulate(); return 0; @@ -100,6 +108,14 @@ int main(int argc, char*argv[]) /* * $Log: main.cc,v $ + * Revision 1.9 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.8 2001/04/04 04:33:08 steve * Take vector form as parameters to vpi_call. * diff --git a/vvp/schedule.cc b/vvp/schedule.cc index af0ba7295..30309834e 100644 --- a/vvp/schedule.cc +++ b/vvp/schedule.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: schedule.cc,v 1.8 2001/05/05 23:51:49 steve Exp $" +#ident "$Id: schedule.cc,v 1.9 2001/05/08 23:32:26 steve Exp $" #endif # include "schedule.h" @@ -255,7 +255,7 @@ void schedule_simulate(void) break; case TYPE_ASSIGN: - functor_set(cur->fun, cur->val); + functor_set(cur->fun, cur->val, 6, 6); break; case TYPE_GEN: @@ -271,6 +271,14 @@ void schedule_simulate(void) /* * $Log: schedule.cc,v $ + * Revision 1.9 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.8 2001/05/05 23:51:49 steve * Forward the simulation time for every event. * diff --git a/vvp/vpi_signal.cc b/vvp/vpi_signal.cc index ae8052987..9160a0ad8 100644 --- a/vvp/vpi_signal.cc +++ b/vvp/vpi_signal.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: vpi_signal.cc,v 1.9 2001/04/26 00:01:33 steve Exp $" +#ident "$Id: vpi_signal.cc,v 1.10 2001/05/08 23:32:26 steve Exp $" #endif /* @@ -267,7 +267,8 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, long val = vp->value.integer; for (unsigned idx = 0 ; idx < wid ; idx += 1) { - functor_set(ipoint_index(rfp->bits,idx), val&1, true); + functor_set(ipoint_index(rfp->bits,idx), val&1, + 6, 6, true); val >>= 1; } break; @@ -276,16 +277,16 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, case vpiScalarVal: switch (vp->value.scalar) { case vpi0: - functor_set(rfp->bits, 0, true); + functor_set(rfp->bits, 0, 6, 6, true); break; case vpi1: - functor_set(rfp->bits, 1, true); + functor_set(rfp->bits, 1, 6, 6, true); break; case vpiX: - functor_set(rfp->bits, 2, true); + functor_set(rfp->bits, 2, 6, 6, true); break; case vpiZ: - functor_set(rfp->bits, 3, true); + functor_set(rfp->bits, 3, 6, 6, true); break; default: assert(0); @@ -301,16 +302,20 @@ static vpiHandle signal_put_value(vpiHandle ref, s_vpi_value*vp, int bit = (aval&1) | ((bval<<1)&2); switch (bit) { case 0: /* zero */ - functor_set(ipoint_index(rfp->bits,idx), 0, true); + functor_set(ipoint_index(rfp->bits,idx), + 0, 6, 6, true); break; case 1: /* one */ - functor_set(ipoint_index(rfp->bits,idx), 1, true); + functor_set(ipoint_index(rfp->bits,idx), + 1, 6, 6, true); break; case 2: /* z */ - functor_set(ipoint_index(rfp->bits,idx), 3, true); + functor_set(ipoint_index(rfp->bits,idx), + 3, 6, 6, true); break; case 3: /* x */ - functor_set(ipoint_index(rfp->bits,idx), 2, true); + functor_set(ipoint_index(rfp->bits,idx), + 2, 6, 6, true); break; } aval >>= 1; @@ -394,6 +399,14 @@ vpiHandle vpip_make_net(char*name, int msb, int lsb, bool signed_flag, /* * $Log: vpi_signal.cc,v $ + * Revision 1.10 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.9 2001/04/26 00:01:33 steve * Support $deposit to a wire or reg. * diff --git a/vvp/vthread.cc b/vvp/vthread.cc index 48d67f0cb..63c05396e 100644 --- a/vvp/vthread.cc +++ b/vvp/vthread.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: vthread.cc,v 1.36 2001/05/06 17:42:22 steve Exp $" +#ident "$Id: vthread.cc,v 1.37 2001/05/08 23:32:26 steve Exp $" #endif # include "vthread.h" @@ -830,7 +830,7 @@ bool of_OR(vthread_t thr, vvp_code_t cp) bool of_SET(vthread_t thr, vvp_code_t cp) { unsigned char bit_val = thr_get_bit(thr, cp->bit_idx1); - functor_set(cp->iptr, bit_val, true); + functor_set(cp->iptr, bit_val, 6, 6, true); return true; } @@ -993,6 +993,14 @@ bool of_ZOMBIE(vthread_t thr, vvp_code_t) /* * $Log: vthread.cc,v $ + * Revision 1.37 2001/05/08 23:32:26 steve + * Add to the debugger the ability to view and + * break on functors. + * + * Add strengths to functors at compile time, + * and Make functors pass their strengths as they + * propagate their output. + * * Revision 1.36 2001/05/06 17:42:22 steve * Add the %ix/get instruction. (Stephan Boettcher) *