pike.git / src / peep.c

version» Context lines:

pike.git/src/peep.c:8:   #include "main.h"   #include "error.h"   #include "lex.h"   #include "pike_memory.h"   #include "peep.h"   #include "dmalloc.h"   #include "stuff.h"   #include "bignum.h"   #include "opcodes.h"    - RCSID("$Id: peep.c,v 1.37 2000/09/22 12:54:10 grubba Exp $"); + RCSID("$Id: peep.c,v 1.38 2000/11/25 16:54:46 grubba Exp $");      struct p_instr_s   {    short opcode;    short line;    struct pike_string *file;    INT32 arg;    INT32 arg2;   };   
pike.git/src/peep.c:554:    {    p_instr *p;       d=n;    if(d>fifo_len) d=fifo_len;   #ifdef PIKE_DEBUG    if((long)d > (long)instrbuf.s.len / (long)sizeof(p_instr))    fatal("Popping out of instructions.\n");   #endif    +  /* FIXME: It looks like the fifo could be optimized. +  * /grubba 2000-11-21 (in Versailles) +  */ +     p=(p_instr *)low_make_buf_space(0, &instrbuf);    p-=fifo_len;    for(e=0;e<d;e++) free_string(p[e].file);    fifo_len-=d;    if(fifo_len) MEMMOVE(p,p+d,fifo_len*sizeof(p_instr));    n-=d;    low_make_buf_space(-((INT32)sizeof(p_instr))*d, &instrbuf);    }    eye+=n;   }    -  + #define DO_OPTIMIZATION_PREQUEL(topop) do { \ +  struct pike_string *cf; \ +  INT32 cl=instr(0)->line; \ +  \ +  DO_IF_DEBUG( \ +  if(a_flag>5) \ +  { \ +  int e; \ +  fprintf(stderr,"PEEP at %d:",cl); \ +  for(e=0;e<topop;e++) \ +  { \ +  fprintf(stderr," "); \ +  dump_instr(instr(e)); \ +  } \ +  fprintf(stderr," => "); \ +  } \ +  ) \ +  \ +  copy_shared_string(cf,instr(0)->file); \ +  pop_n_opcodes(topop)    -  + #define DO_OPTIMIZATION_POSTQUEL(q) \ +  fifo_len+=q; \ +  free_string(cf); \ +  debug(); \ +  \ +  DO_IF_DEBUG( \ +  if(a_flag>5) \ +  { \ +  int e; \ +  for(e=0;e<q;e++) \ +  { \ +  fprintf(stderr," "); \ +  dump_instr(instr(e)); \ +  } \ +  fprintf(stderr,"\n"); \ +  } \ +  ) \ +  \ +  fifo_len += q + 3; \ +  } while(0) +  +    static void do_optimization(int topop, ...)   {    va_list arglist; -  struct pike_string *cf; +     int q=-1; -  INT32 cl=instr(0)->line; +     - #ifdef PIKE_DEBUG -  if(a_flag>5) -  { -  int e; -  fprintf(stderr,"PEEP at %d:",cl); -  for(e=0;e<topop;e++) -  { -  fprintf(stderr," "); -  dump_instr(instr(e)); -  } -  fprintf(stderr," => "); -  } - #endif +  DO_OPTIMIZATION_PREQUEL(topop);    -  copy_shared_string(cf,instr(0)->file); -  pop_n_opcodes(topop); +     va_start(arglist, topop);       while(1)    {    q++;    switch(va_arg(arglist, int))    {    case 0:    break;    case 1:
pike.git/src/peep.c:624:    int j=va_arg(arglist, int);    int k=va_arg(arglist, int);    insopt2(i,j,k,cl,cf);    continue;    }    }    break;    }       va_end(arglist); -  fifo_len+=q; -  free_string(cf); -  debug(); +     - #ifdef PIKE_DEBUG -  if(a_flag>5) -  { -  int e; -  for(e=0;e<q;e++) -  { -  fprintf(stderr," "); -  dump_instr(instr(e)); +  DO_OPTIMIZATION_POSTQUEL(q);   } -  fprintf(stderr,"\n"); -  } - #endif +     -  fifo_len+=q + 3; - } +     -  +    static void asm_opt(void)   {   #ifdef PIKE_DEBUG    if(a_flag > 3)    {    p_instr *c;    ptrdiff_t e, length;       c=(p_instr *)instrbuf.s.str;    length=instrbuf.s.len / sizeof(p_instr);