cvsuser     03/12/27 04:28:10

  Modified:    include/parrot interpreter.h packfile.h
               lib/Parrot/OpTrans CGP.pm CPrederef.pm CSwitch.pm
               src      exceptions.c interpreter.c packfile.c
  Log:
  event-handling-11
  * data structures for event handling of prederefed run cores
  * init, copy, and cleanup these in packfile
  
  Revision  Changes    Path
  1.112     +15 -2     parrot/include/parrot/interpreter.h
  
  Index: interpreter.h
  ===================================================================
  RCS file: /cvs/public/parrot/include/parrot/interpreter.h,v
  retrieving revision 1.111
  retrieving revision 1.112
  diff -u -w -r1.111 -r1.112
  --- interpreter.h     26 Dec 2003 12:49:53 -0000      1.111
  +++ interpreter.h     27 Dec 2003 12:27:54 -0000      1.112
  @@ -1,7 +1,7 @@
   /* interpreter.h
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: interpreter.h,v 1.111 2003/12/26 12:49:53 leo Exp $
  + *     $Id: interpreter.h,v 1.112 2003/12/27 12:27:54 leo Exp $
    *  Overview:
    *     The interpreter api handles running the operations
    *  Data Structure and Algorithms:
  @@ -144,6 +144,18 @@
   
   struct _Thread_data;    /* in thread.h */
   
  +typedef struct _Prederef_branch {       /* item for recording branches */
  +    size_t offs;                        /* offset in code */
  +    void  *op;                          /* opcode at that position */
  +} Prederef_branch;
  +
  +typedef struct _Prederef {
  +    void **code;                        /* prederefed code */
  +    Prederef_branch *branches;          /* list of branches in code */
  +    size_t n_branches;                  /* entries in that list */
  +    size_t n_allocated;                 /* allocated size of it */
  +} Prederef;
  +
   /*
    * TODO: Parrot_Interp can use a Parrot_Context inline and we
    * can save/restore context with a single memcpy
  @@ -193,8 +205,9 @@
       struct PackFile *code;      /* The code we are executing */
       /* the next items point to the real thngs, which are
        * in the byte_code_segment, that is currently executed */
  -    void **prederef_code;       /* The predereferenced code */
  +    struct _Prederef prederef;  /* The predereferenced code and info */
       void *jit_info;             /* JITs data */
  +
       struct _imc_info_t *imc_info;   /* imcc data */
       size_t current_line;        /* Which line we're executing in the
                                    * source */
  
  
  
  1.55      +2 -2      parrot/include/parrot/packfile.h
  
  Index: packfile.h
  ===================================================================
  RCS file: /cvs/public/parrot/include/parrot/packfile.h,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -w -r1.54 -r1.55
  --- packfile.h        22 Nov 2003 12:13:02 -0000      1.54
  +++ packfile.h        27 Dec 2003 12:27:54 -0000      1.55
  @@ -1,6 +1,6 @@
   /* packfile.h
   *
  -* $Id: packfile.h,v 1.54 2003/11/22 12:13:02 leo Exp $
  +* $Id: packfile.h,v 1.55 2003/12/27 12:27:54 leo Exp $
   *
   * History:
   *  Rework by Melvin; new bytecode format, make bytecode portable.
  @@ -160,7 +160,7 @@
   
   struct PackFile_ByteCode {
       struct PackFile_Segment     base;
  -    void **prederef_code;       /* The predereferenced code */
  +    Prederef prederef;          /* The predereferenced code and info */
       void *jit_info;             /* JITs data */
       struct PackFile_ByteCode  * prev;   /* was executed previous */
       struct PackFile_Debug     * debugs;
  
  
  
  1.8       +3 -3      parrot/lib/Parrot/OpTrans/CGP.pm
  
  Index: CGP.pm
  ===================================================================
  RCS file: /cvs/public/parrot/lib/Parrot/OpTrans/CGP.pm,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -w -r1.7 -r1.8
  --- CGP.pm    28 Oct 2003 16:22:33 -0000      1.7
  +++ CGP.pm    27 Dec 2003 12:28:02 -0000      1.8
  @@ -6,7 +6,7 @@
   #
   # Author: leo
   #
  -# $Id: CGP.pm,v 1.7 2003/10/28 16:22:33 leo Exp $
  +# $Id: CGP.pm,v 1.8 2003/12/27 12:28:02 leo Exp $
   #
   
   use strict;
  @@ -41,7 +41,7 @@
   sub defines
   {
     return <<END;
  -#define REL_PC ((size_t)((opcode_t*)cur_opcode - 
(opcode_t*)interpreter->prederef_code))
  +#define REL_PC ((size_t)((opcode_t*)cur_opcode - 
(opcode_t*)interpreter->prederef.code))
   #define CUR_OPCODE (interpreter->code->byte_code + REL_PC)
   
   
  @@ -49,7 +49,7 @@
   opcode_to_prederef(struct Parrot_Interp* interpreter,
                                           opcode_t* opcode_addr)
   {
  -    return interpreter->prederef_code +
  +    return interpreter->prederef.code +
           (opcode_addr - (opcode_t*) interpreter->code->byte_code);
   }
   
  
  
  
  1.21      +3 -3      parrot/lib/Parrot/OpTrans/CPrederef.pm
  
  Index: CPrederef.pm
  ===================================================================
  RCS file: /cvs/public/parrot/lib/Parrot/OpTrans/CPrederef.pm,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -w -r1.20 -r1.21
  --- CPrederef.pm      17 Oct 2003 10:06:25 -0000      1.20
  +++ CPrederef.pm      27 Dec 2003 12:28:02 -0000      1.21
  @@ -27,7 +27,7 @@
   sub defines
   {
     return <<END;
  -#define REL_PC ((size_t)(cur_opcode - interpreter->prederef_code))
  +#define REL_PC ((size_t)(cur_opcode - interpreter->prederef.code))
   #define CUR_OPCODE (interpreter->code->byte_code + REL_PC)
   
   static opcode_t* prederef_to_opcode(struct Parrot_Interp* interpreter,
  @@ -35,7 +35,7 @@
   {
       INTVAL offset_in_ops;
       if (prederef_addr == NULL) return NULL;
  -    offset_in_ops = prederef_addr - interpreter->prederef_code;
  +    offset_in_ops = prederef_addr - interpreter->prederef.code;
       return (opcode_t*) interpreter->code->byte_code + offset_in_ops;
   }
   
  @@ -45,7 +45,7 @@
       INTVAL offset_in_ops;
       if (opcode_addr == NULL) return NULL;
       offset_in_ops = opcode_addr - (opcode_t*) interpreter->code->byte_code;
  -    return interpreter->prederef_code + offset_in_ops;
  +    return interpreter->prederef.code + offset_in_ops;
   }
   
   END
  
  
  
  1.8       +3 -3      parrot/lib/Parrot/OpTrans/CSwitch.pm
  
  Index: CSwitch.pm
  ===================================================================
  RCS file: /cvs/public/parrot/lib/Parrot/OpTrans/CSwitch.pm,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -w -r1.7 -r1.8
  --- CSwitch.pm        18 Dec 2003 16:15:03 -0000      1.7
  +++ CSwitch.pm        27 Dec 2003 12:28:02 -0000      1.8
  @@ -6,7 +6,7 @@
   #
   # Author: leo
   #
  -# $Id: CSwitch.pm,v 1.7 2003/12/18 16:15:03 leo Exp $
  +# $Id: CSwitch.pm,v 1.8 2003/12/27 12:28:02 leo Exp $
   #
   
   use strict;
  @@ -37,7 +37,7 @@
   sub defines
   {
     return <<END;
  -#define REL_PC ((size_t)((opcode_t*)cur_opcode - 
(opcode_t*)interpreter->prederef_code))
  +#define REL_PC ((size_t)((opcode_t*)cur_opcode - 
(opcode_t*)interpreter->prederef.code))
   #define CUR_OPCODE (interpreter->code->byte_code + REL_PC)
   
   
  @@ -47,7 +47,7 @@
       INTVAL offset_in_ops;
       if (opcode_addr == NULL) return NULL;
       offset_in_ops = opcode_addr - (opcode_t*) interpreter->code->byte_code;
  -    return interpreter->prederef_code + offset_in_ops;
  +    return interpreter->prederef.code + offset_in_ops;
   }
   
   END
  
  
  
  1.46      +2 -2      parrot/src/exceptions.c
  
  Index: exceptions.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/exceptions.c,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -w -r1.45 -r1.46
  --- exceptions.c      14 Dec 2003 12:55:26 -0000      1.45
  +++ exceptions.c      27 Dec 2003 12:28:09 -0000      1.46
  @@ -1,7 +1,7 @@
   /* exceptions.c
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: exceptions.c,v 1.45 2003/12/14 12:55:26 leo Exp $
  + *     $Id: exceptions.c,v 1.46 2003/12/27 12:28:09 leo Exp $
    *  Overview:
    *     define the internal interpreter exceptions
    *  Data Structure and Algorithms:
  @@ -273,7 +273,7 @@
           case PARROT_PREDEREF_CORE:
           case PARROT_SWITCH_CORE:
           case PARROT_CGP_CORE:
  -            offset = (void **)dest - interpreter->prederef_code;
  +            offset = (void **)dest - interpreter->prederef.code;
           default:
               offset = dest - interpreter->code->byte_code;
       }
  
  
  
  1.248     +14 -13    parrot/src/interpreter.c
  
  Index: interpreter.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/interpreter.c,v
  retrieving revision 1.247
  retrieving revision 1.248
  diff -u -w -r1.247 -r1.248
  --- interpreter.c     27 Dec 2003 11:40:55 -0000      1.247
  +++ interpreter.c     27 Dec 2003 12:28:09 -0000      1.248
  @@ -1,7 +1,7 @@
   /* interpreter.c
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: interpreter.c,v 1.247 2003/12/27 11:40:55 leo Exp $
  + *     $Id: interpreter.c,v 1.248 2003/12/27 12:28:09 leo Exp $
    *  Overview:
    *     The interpreter api handles running the operations
    *  Data Structure and Algorithms:
  @@ -150,7 +150,7 @@
   void
   do_prederef(void **pc_prederef, Parrot_Interp interpreter, int type)
   {
  -    size_t offset = pc_prederef - interpreter->prederef_code;
  +    size_t offset = pc_prederef - interpreter->prederef.code;
       opcode_t *pc = ((opcode_t *)interpreter->code->byte_code) + offset;
       op_func_t *prederef_op_func = interpreter->op_lib->op_func_table;
   
  @@ -234,14 +234,14 @@
   
   /*=for api interpreter init_prederef
    *
  - * initialize: load prederef func_table, file prederef_code
  + * initialize: load prederef func_table, file prederef.code
    *
    */
   static void
   init_prederef(struct Parrot_Interp *interpreter, int which)
   {
       load_prederef(interpreter, which);
  -    if (!interpreter->prederef_code) {
  +    if (!interpreter->prederef.code) {
           size_t N = interpreter->code->cur_cs->base.size;
           size_t i;
           void *pred_func;
  @@ -263,8 +263,8 @@
               temp[i] = pred_func;
           }
   
  -        interpreter->prederef_code = temp;
  -        interpreter->code->cur_cs->prederef_code = temp;
  +        interpreter->prederef.code = temp;
  +        interpreter->code->cur_cs->prederef.code = temp;
   
       }
   }
  @@ -294,15 +294,15 @@
   {
       load_prederef(interpreter, PARROT_CGP_CORE);
   
  -    if (!interpreter->prederef_code) {
  +    if (!interpreter->prederef.code) {
           size_t N = interpreter->code->cur_cs->base.size;
           size_t i;
           size_t n;
           void **temp = prederef_arena;
           opcode_t *pc = interpreter->code->cur_cs->base.data;
   
  -        interpreter->prederef_code = temp;
  -        interpreter->code->cur_cs->prederef_code = temp;
  +        interpreter->prederef.code = temp;
  +        interpreter->code->cur_cs->prederef.code = temp;
           /* TODO */
       }
   }
  @@ -426,7 +426,7 @@
       void **pc_prederef;
   
       init_prederef(interpreter, PARROT_PREDEREF_CORE);
  -    pc_prederef = interpreter->prederef_code + (pc - code_start);
  +    pc_prederef = interpreter->prederef.code + (pc - code_start);
   
       while (pc_prederef) {
           pc_prederef =
  @@ -445,7 +445,7 @@
       opcode_t *code_start = (opcode_t *)interpreter->code->byte_code;
       void **pc_prederef;
       init_prederef(interpreter, PARROT_CGP_CORE);
  -    pc_prederef = interpreter->prederef_code + (pc - code_start);
  +    pc_prederef = interpreter->prederef.code + (pc - code_start);
       pc = cgp_core((opcode_t*)pc_prederef, interpreter);
       return pc;
   #else
  @@ -462,7 +462,7 @@
       opcode_t *code_start = (opcode_t *)interpreter->code->byte_code;
       void **pc_prederef;
       init_prederef(interpreter, PARROT_SWITCH_CORE);
  -    pc_prederef = interpreter->prederef_code + (pc - code_start);
  +    pc_prederef = interpreter->prederef.code + (pc - code_start);
       pc = switch_core((opcode_t*)pc_prederef, interpreter);
       return pc;
   }
  @@ -992,7 +992,8 @@
       SET_NULL_P(interpreter->profile, ProfData *);
   
       /* next two are pointers to the real thing in the current code seg */
  -    SET_NULL_P(interpreter->prederef_code, void **);
  +    SET_NULL_P(interpreter->prederef.code, void **);
  +    SET_NULL_P(interpreter->prederef.branches, Prederef_btanch*);
       SET_NULL(interpreter->jit_info);
   
       /* register assembler/compilers */
  
  
  
  1.127     +13 -5     parrot/src/packfile.c
  
  Index: packfile.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/packfile.c,v
  retrieving revision 1.126
  retrieving revision 1.127
  diff -u -w -r1.126 -r1.127
  --- packfile.c        25 Nov 2003 00:31:13 -0000      1.126
  +++ packfile.c        27 Dec 2003 12:28:09 -0000      1.127
  @@ -7,7 +7,7 @@
   ** This program is free software. It is subject to the same
   ** license as Parrot itself.
   **
  -** $Id: packfile.c,v 1.126 2003/11/25 00:31:13 mrjoltcola Exp $
  +** $Id: packfile.c,v 1.127 2003/12/27 12:28:09 leo Exp $
   **
   ** History:
   **  Rework by Melvin; new bytecode format, make bytecode portable.
  @@ -1146,8 +1146,11 @@
   #ifdef HAS_JIT
       Parrot_destroy_jit(byte_code->jit_info);
   #endif
  -    if (byte_code->prederef_code)
  -        free(byte_code->prederef_code);
  +    if (byte_code->prederef.code) {
  +        mem_sys_free(byte_code->prederef.code);
  +        if (byte_code->prederef.branches)
  +            mem_sys_free(byte_code->prederef.branches);
  +    }
   }
   
   static struct PackFile_Segment *
  @@ -1157,7 +1160,9 @@
   
       byte_code = mem_sys_allocate(sizeof(struct PackFile_ByteCode));
   
  -    byte_code->prederef_code = NULL;
  +    byte_code->prederef.code = NULL;
  +    byte_code->prederef.branches = NULL;
  +    byte_code->prederef.n_allocated = 0;
       byte_code->jit_info = NULL;
       byte_code->prev = NULL;
       byte_code->debugs = NULL;
  @@ -1306,7 +1311,10 @@
       interpreter->code->cur_cs = new_cs;
       new_cs->prev = cur_cs;
       interpreter->code->byte_code = new_cs->base.data;
  -    interpreter->prederef_code = new_cs->prederef_code;
  +    interpreter->prederef.code       = new_cs->prederef.code;
  +    interpreter->prederef.branches   = new_cs->prederef.branches;
  +    interpreter->prederef.n_branches = new_cs->prederef.n_branches;
  +    interpreter->prederef.n_allocated= new_cs->prederef.n_allocated;
       interpreter->jit_info = new_cs->jit_info;
       prepare_for_run(interpreter);
       return cur_cs;
  
  
  

Reply via email to