pike.git / src / peep.c

version» Context lines:

pike.git/src/peep.c:5:   #include "program.h"   #include "las.h"   #include "docode.h"   #include "main.h"   #include "error.h"   #include "lex.h"   #include "pike_memory.h"   #include "peep.h"   #include "dmalloc.h"    - RCSID("$Id: peep.c,v 1.21 1998/04/01 00:47:48 hubbe Exp $"); + RCSID("$Id: peep.c,v 1.22 1998/04/27 09:54:16 hubbe Exp $");      struct p_instr_s   {    short opcode;    short line;    struct pike_string *file;    INT32 arg;   };      typedef struct p_instr_s p_instr;
pike.git/src/peep.c:366:      int insopt2(int f, int cl, struct pike_string *cf)   {   #ifdef DEBUG    if(hasarg(f))    fatal("hasarg(%d) is wrong!\n",f);   #endif    return insopt(f,0,cl, cf);   }    -  +    static void debug(void)   {    if(fifo_len > (long)instrbuf.s.len / (long)sizeof(p_instr))    fifo_len=(long)instrbuf.s.len / (long)sizeof(p_instr);   #ifdef DEBUG    if(eye < 0)    fatal("Popped beyond start of code.\n");       if(instrbuf.s.len)    {    p_instr *p;    p=(p_instr *)low_make_buf_space(0, &instrbuf);    if(!p[-1].file)    fatal("No file name on last instruction!\n");    }   #endif   }       - static p_instr *instr(int offset) + static INLINE p_instr *instr(int offset)   {    p_instr *p;       debug();       if(offset < fifo_len)    {    p=(p_instr *)low_make_buf_space(0, &instrbuf);    p-=fifo_len;    p+=offset;    if(((char *)p)<instrbuf.s.str) return 0;    return p;    }else{    offset-=fifo_len;    offset+=eye;    if(offset >= len) return 0;    return instructions+offset;    }   }    - static int opcode(int offset) + static INLINE int opcode(int offset)   {    p_instr *a;    a=instr(offset);    if(a) return a->opcode;    return -1;   }    - static int argument(int offset) + static INLINE int argument(int offset)   {    p_instr *a;    a=instr(offset);    if(a) return a->arg;    return -1;   }      static void advance(void)   {    if(fifo_len)
pike.git/src/peep.c:462:    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;   }    + static void do_optimization(int topop, ...) + { +  va_list arglist; +  struct pike_string *cf; +  int q=-1; +  INT32 cl=instr(0)->line; +  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: +  { +  int i=va_arg(arglist, int); +  insopt2(i,cl,cf); +  continue; +  } +  case 2: +  { +  int i=va_arg(arglist, int); +  int j=va_arg(arglist, int); +  insopt(i,j,cl,cf); +  continue; +  } +  } +  break; +  } +  +  va_end(arglist); +  fifo_len+=q; +  free_string(cf); +  debug(); +  fifo_len+=q + 3; + } +  +    static void asm_opt(void)   {   #ifdef DEBUG    if(a_flag > 3)    {    p_instr *c;    INT32 e,length;    c=(p_instr *)instrbuf.s.str;    length=instrbuf.s.len / sizeof(p_instr);