From: Armin R. <ar...@us...> - 2003-01-31 13:46:54
|
Update of /cvsroot/psyco/psyco/c In directory sc8-pr-cvs1:/tmp/cvs-serv13751/c Modified Files: dispatcher.c dispatcher.h processor.c psyco.h psyfunc.c vcompiler.c vcompiler.h Log Message: getting closer to something stable... Index: dispatcher.c =================================================================== RCS file: /cvsroot/psyco/psyco/c/dispatcher.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** dispatcher.c 30 Jan 2003 18:41:47 -0000 1.25 --- dispatcher.c 31 Jan 2003 13:46:51 -0000 1.26 *************** *** 1853,1857 **** DEFINEFN ! bool psyco_forking(PsycoObject* po, vinfo_array_t* array) { /* Some virtual-time objects cannot remain virtualized across calls, --- 1853,1857 ---- DEFINEFN ! bool psyco_forking(PsycoObject* po, vinfo_array_t* array, bool force) { /* Some virtual-time objects cannot remain virtualized across calls, *************** *** 1868,1877 **** if (is_virtualtime(vi->source)) { ! if (!VirtualTime_Get(vi->source)->compute_fn(po, vi, true)) return false; /* vi->array may be modified by compute_fn() */ } if (vi->array != NullArray) ! if (!psyco_forking(po, vi->array)) return false; } --- 1868,1877 ---- if (is_virtualtime(vi->source)) { ! if (!VirtualTime_Get(vi->source)->compute_fn(po, vi, force)) return false; /* vi->array may be modified by compute_fn() */ } if (vi->array != NullArray) ! if (!psyco_forking(po, vi->array, force)) return false; } Index: dispatcher.h =================================================================== RCS file: /cvsroot/psyco/psyco/c/dispatcher.h,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** dispatcher.h 30 Jan 2003 18:41:48 -0000 1.14 --- dispatcher.h 31 Jan 2003 13:46:51 -0000 1.15 *************** *** 174,178 **** /* Emit the code to prepare for Psyco code calling Psyco code in a compiled function call */ ! EXTERNFN bool psyco_forking(PsycoObject* po, vinfo_array_t* array); /*****************************************************************/ --- 174,178 ---- /* Emit the code to prepare for Psyco code calling Psyco code in a compiled function call */ ! EXTERNFN bool psyco_forking(PsycoObject* po, vinfo_array_t* array, bool force); /*****************************************************************/ Index: processor.c =================================================================== RCS file: /cvsroot/psyco/psyco/c/processor.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** processor.c 17 Jan 2003 14:41:08 -0000 1.19 --- processor.c 31 Jan 2003 13:46:51 -0000 1.20 *************** *** 718,728 **** } ! static bool generic_computed_cc(PsycoObject* po, vinfo_t* v, bool forking) { ! if (forking) return true; extra_assert(po->ccreg == v); ! BEGIN_CODE code = psyco_compute_cc(po, code, REG_NONE); ! END_CODE return true; } --- 718,730 ---- } ! static bool generic_computed_cc(PsycoObject* po, vinfo_t* v, bool force) { ! /* also upon forking, because the condition codes cannot be ! sent as arguments (function calls typically require adds ! and subs to adjust the stack). */ extra_assert(po->ccreg == v); ! BEGIN_CODE code = psyco_compute_cc(po, code, REG_NONE); ! END_CODE return true; } *************** *** 793,797 **** ! static bool computed_promotion(PsycoObject* po, vinfo_t* v, bool forking); /* forward */ --- 795,799 ---- ! static bool computed_promotion(PsycoObject* po, vinfo_t* v, bool force); /* forward */ *************** *** 829,837 **** /*** run-time switches ***/ ! static bool computed_promotion(PsycoObject* po, vinfo_t* v, bool forking) { /* uncomputable, but still use the address of computed_promotion() as a tag to figure out if a virtual source is a c_promotion_s structure. */ ! return psyco_vsource_not_important.compute_fn(po, v, forking); } --- 831,839 ---- /*** run-time switches ***/ ! static bool computed_promotion(PsycoObject* po, vinfo_t* v, bool force) { /* uncomputable, but still use the address of computed_promotion() as a tag to figure out if a virtual source is a c_promotion_s structure. */ ! return psyco_vsource_not_important.compute_fn(po, v, force); } Index: psyco.h =================================================================== RCS file: /cvsroot/psyco/psyco/c/psyco.h,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** psyco.h 17 Jan 2003 14:41:11 -0000 1.25 --- psyco.h 31 Jan 2003 13:46:51 -0000 1.26 *************** *** 231,235 **** /* moved here from vcompiler.h because needed by numerous header files */ ! typedef bool (*compute_fn_t)(PsycoObject* po, vinfo_t* vi, bool forking); typedef struct { compute_fn_t compute_fn; --- 231,235 ---- /* moved here from vcompiler.h because needed by numerous header files */ ! typedef bool (*compute_fn_t)(PsycoObject* po, vinfo_t* vi, bool force); typedef struct { compute_fn_t compute_fn; Index: psyfunc.c =================================================================== RCS file: /cvsroot/psyco/psyco/c/psyfunc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** psyfunc.c 30 Jan 2003 18:41:48 -0000 1.4 --- psyfunc.c 31 Jan 2003 13:46:51 -0000 1.5 *************** *** 263,276 **** revert to the default behaviour */ ! /* Force mutable arguments out of virtual-time */ /* This is expected to have already been done on default arguments; see PsycoFunction_New() */ ! if (!psyco_forking(po, arg_tuple->array)) return NULL; - - /* the processor condition codes will be messed up soon */ - BEGIN_CODE - NEED_CC(); - END_CODE /* prepare a frame */ --- 263,272 ---- revert to the default behaviour */ ! /* Force mutable arguments out of virtual-time, ! including the processor condition codes */ /* This is expected to have already been done on default arguments; see PsycoFunction_New() */ ! if (!psyco_forking(po, arg_tuple->array, false)) return NULL; /* prepare a frame */ Index: vcompiler.c =================================================================== RCS file: /cvsroot/psyco/psyco/c/vcompiler.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** vcompiler.c 17 Jan 2003 14:41:14 -0000 1.18 --- vcompiler.c 31 Jan 2003 13:46:51 -0000 1.19 *************** *** 893,899 **** /*****************************************************************/ ! static bool computed_do_not_use(PsycoObject* po, vinfo_t* vi, bool forking) { ! if (forking) return true; fprintf(stderr, "psyco: internal error (computed_do_not_use)\n"); extra_assert(0); /* stop if debugging */ --- 893,899 ---- /*****************************************************************/ ! static bool computed_do_not_use(PsycoObject* po, vinfo_t* vi, bool force) { ! if (!force) return true; fprintf(stderr, "psyco: internal error (computed_do_not_use)\n"); extra_assert(0); /* stop if debugging */ Index: vcompiler.h =================================================================== RCS file: /cvsroot/psyco/psyco/c/vcompiler.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** vcompiler.h 17 Jan 2003 14:41:14 -0000 1.11 --- vcompiler.h 31 Jan 2003 13:46:51 -0000 1.12 *************** *** 298,302 **** inline NonVirtualSource vinfo_compute(vinfo_t* vi, PsycoObject* po) { if (is_virtualtime(vi->source)) { ! if (!VirtualTime_Get(vi->source)->compute_fn(po, vi, false)) return SOURCE_ERROR; extra_assert(!is_virtualtime(vi->source)); --- 298,302 ---- inline NonVirtualSource vinfo_compute(vinfo_t* vi, PsycoObject* po) { if (is_virtualtime(vi->source)) { ! if (!VirtualTime_Get(vi->source)->compute_fn(po, vi, true)) return SOURCE_ERROR; extra_assert(!is_virtualtime(vi->source)); |