pike.git / src / peep.c

version» Context lines:

pike.git/src/peep.c:17:    short line;    struct pike_string *file;    INT32 arg;   };      typedef struct p_instr_s p_instr;   static void asm_opt(void);      dynamic_buffer instrbuf;    - static int hasarg(int opcode) { return instrs[opcode-F_OFFSET].hasarg; } + static int hasarg(int opcode) + { +  return instrs[opcode-F_OFFSET].flags & I_HASARG; + }      void init_bytecode()   {    low_reinit_buf(&instrbuf);   }      void exit_bytecode()   {    INT32 e,length;    p_instr *c;
pike.git/src/peep.c:131:    ins_f_byte(F_PREFIX_24BITX256);    ins_byte(b >> 24, A_PROGRAM);    ins_byte(b >> 16, A_PROGRAM);    ins_byte(b >> 8, A_PROGRAM);    }    }    ins_f_byte(a);    ins_byte(b, A_PROGRAM);   }    - #define BRANCH_CASES \ -  F_BRANCH_WHEN_EQ: \ -  case F_BRANCH_WHEN_NE: \ -  case F_BRANCH_WHEN_LT: \ -  case F_BRANCH_WHEN_LE: \ -  case F_BRANCH_WHEN_GT: \ -  case F_BRANCH_WHEN_GE: \ -  case F_BRANCH_WHEN_ZERO: \ -  case F_BRANCH_WHEN_NON_ZERO: \ -  case F_BRANCH: \ -  case F_INC_LOOP: \ -  case F_DEC_LOOP: \ -  case F_INC_NEQ_LOOP: \ -  case F_DEC_NEQ_LOOP: \ -  case F_LAND: \ -  case F_LOR: \ -  case F_EQ_OR: \ -  case F_CATCH: \ -  case F_FOREACH -  -  +    void assemble(void)   {    INT32 e,d,length,max_label,tmp;    INT32 *labels, *jumps, *uses;    p_instr *c;       c=(p_instr *)instrbuf.s.str;    length=instrbuf.s.len / sizeof(p_instr);       max_label=-1;
pike.git/src/peep.c:186:    uses[e]=0;    }       c=(p_instr *)instrbuf.s.str;    for(e=0;e<length;e++)    if(c[e].opcode == F_LABEL)    labels[c[e].arg]=e;       for(e=0;e<length;e++)    { -  switch(c[e].opcode) +  if(instrs[c[e].opcode-F_OFFSET].flags & I_POINTER)    { -  case BRANCH_CASES: -  case F_POINTER: +     while(1)    {    int tmp,tmp2;    tmp=labels[c[e].arg];       while(c[tmp].opcode == F_LABEL ||    c[tmp].opcode == F_NOP) tmp++;       if(c[tmp].opcode==F_BRANCH)    {
pike.git/src/peep.c:275: Inside #if defined(DEBUG)
  #ifdef DEBUG    if(c->arg > max_label || c->arg < 0)    fatal("max_label calculation failed!\n");       if(labels[c->arg] != -1)    fatal("Duplicate label!\n");   #endif    labels[c->arg]=PC;    break;    -  case BRANCH_CASES: +  default: +  switch(instrs[c->opcode - F_OFFSET].flags) +  { +  case I_ISJUMP:    ins_f_byte(c->opcode); -  -  case F_POINTER: +  case I_ISPOINTER:   #ifdef DEBUG    if(c->arg > max_label || c->arg < 0) fatal("Jump to unknown label?\n");   #endif    tmp=PC;    ins_int(jumps[c->arg],A_PROGRAM);    jumps[c->arg]=tmp;    break;    -  default: -  if(hasarg(c->opcode)) +  case I_HASARG:    ins_f_byte_with_arg(c->opcode, c->arg); -  else +  break; +  +  case 0:    ins_f_byte(c->opcode);    break; -  +  + #ifdef DEBUG +  default: +  fatal("Unknown instruction type.\n"); + #endif    } -  +  }       c++;    }       for(e=0;e<=max_label;e++)    {    int tmp2=labels[e];       while(jumps[e]!=-1)    {