Branch: Tag:

2001-07-09

2001-07-09 11:37:21 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Yet another batch of computed goto cleanups.

Rev: src/interpret.c:1.217
Rev: src/interpret_functions.h:1.72
Rev: src/interpreter.h:1.62
Rev: src/lex.c:1.95
Rev: src/lex.h:1.17
Rev: src/program.c:1.350
Rev: src/program.h:1.135

1:   /* -  * $Id: interpret_functions.h,v 1.71 2001/07/08 19:35:37 grubba Exp $ +  * $Id: interpret_functions.h,v 1.72 2001/07/09 11:37:20 grubba Exp $    *    * Opcode definitions for the interpreter.    */
20:   #define DO_IF_BIGNUM(CODE)   #endif /* AUTO_BIGNUM */    + #undef DO_IF_ELSE_COMPUTED_GOTO + #ifdef HAVE_COMPUTED_GOTO + #define DO_IF_ELSE_COMPUTED_GOTO(A, B) (A) + #else /* !HAVE_COMPUTED_GOTO */ + #define DO_IF_ELSE_COMPUTED_GOTO(A, B) (B) + #endif /* HAVE_COMPUTED_GOTO */ +    #ifdef GEN_PROTOS   /* Used to generate the interpret_protos.h file. */   #define OPCODE0(A, B, C) OPCODE0(A, B) C
572:    )    )    { -  instr=++ u->integer; +  INT32 val = ++u->integer;    pop_n_elems(2); -  push_int(instr); +  push_int(val);    } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    push_int(1);
592:    )    )    { -  instr=-- u->integer; +  INT32 val = --u->integer;    pop_n_elems(2); -  push_int(instr); +  push_int(val);    } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    push_int(1);
612:    )   )    { -  -- u->integer; +  --u->integer;    pop_n_elems(2);    }else{    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;
631:    )    )    { -  instr=++ u->integer; +  ++u->integer;    pop_n_elems(2);    } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;
650:    )    )    { -  instr=u->integer ++; +  INT32 val = u->integer++;    pop_n_elems(2); -  push_int(instr); +  push_int(val);    } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    stack_dup();
673:    )    )    { -  instr=u->integer --; +  INT32 val = u->integer--;    pop_n_elems(2); -  push_int(instr); +  push_int(val);    } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    stack_dup();
988:   });      OPCODE0_JUMP(F_CATCH, "catch", { -  switch (o_catch(pc+sizeof(INT32))) { +  switch (o_catch(pc+DO_IF_ELSE_COMPUTED_GOTO(1, sizeof(INT32)))) +  {    case 1:    /* There was a return inside the evaluated code */    goto do_dumb_return;
996:    pc = Pike_fp->pc;    break;    default: -  pc+=GET_JUMP(); +  pc += GET_JUMP();    }   });   
1014:    INT32 tmp;    tmp=switch_lookup(Pike_fp->context.prog->    constants[arg1].sval.u.array,Pike_sp-1); -  pc=(unsigned char *)DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32))); -  pc+=(tmp>=0 ? 1+tmp*2 : 2*~tmp) * sizeof(INT32); +  pc = DO_IF_ELSE_COMPUTED_GOTO(pc, (PIKE_OPCODE_T *) +  DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32)))); +  pc += (tmp>=0 ? 1+tmp*2 : 2*~tmp) * +  DO_IF_ELSE_COMPUTED_GOTO(1, sizeof(INT32));    if(*(INT32*)pc < 0) fast_check_threads_etc(7); -  pc+=*(INT32*)pc; +  pc += *(INT32*)pc;    pop_stack();   });   
1030:    tmp=switch_lookup(Pike_fp->context.prog->    constants[arg1].sval.u.array,Pike_sp-1);    pop_n_elems(3); -  pc=(unsigned char *)DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32))); -  pc+=(tmp>=0 ? 1+tmp*2 : 2*~tmp) * sizeof(INT32); +  pc = DO_IF_ELSE_COMPUTED_GOTO(pc, (PIKE_OPCODE_T *) +  DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32)))); +  pc += (tmp>=0 ? 1+tmp*2 : 2*~tmp) * +  DO_IF_ELSE_COMPUTED_GOTO(1, sizeof(INT32));    if(*(INT32*)pc < 0) fast_check_threads_etc(7);    pc+=*(INT32*)pc;   });
1040:    INT32 tmp;    tmp=switch_lookup(Pike_fp->context.prog->    constants[arg2].sval.u.array,Pike_fp->locals + arg1); -  pc=(unsigned char *)DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32))); -  pc+=(tmp>=0 ? 1+tmp*2 : 2*~tmp) * sizeof(INT32); +  pc = DO_IF_ELSE_COMPUTED_GOTO(pc, (PIKE_OPCODE_T *) +  DO_ALIGN(pc,((ptrdiff_t)sizeof(INT32)))); +  pc += (tmp>=0 ? 1+tmp*2 : 2*~tmp) * +  DO_IF_ELSE_COMPUTED_GOTO(1, sizeof(INT32));    if(*(INT32*)pc < 0) fast_check_threads_etc(7);    pc+=*(INT32*)pc;   });
1148:          CASE(F_RETURN_LOCAL); -  instr=GET_ARG(); +  { +  INT32 val = GET_ARG();   #if defined(PIKE_DEBUG) && defined(GC2)    /* special case! Pike_interpreter.mark_stack may be invalid at the time we    * call return -1, so we must call the callbacks here to
1158: Inside #if defined(PIKE_DEBUG) && defined(GC2)
   if(d_flag>4) do_debug();    check_threads_etc();   #endif -  if(Pike_fp->expendible <= Pike_fp->locals+instr) +  if(Pike_fp->expendible <= Pike_fp->locals + val)    { -  pop_n_elems(Pike_sp-1 - (Pike_fp->locals+instr)); +  pop_n_elems(Pike_sp-1 - (Pike_fp->locals + val));    }else{ -  push_svalue(Pike_fp->locals+instr); +  push_svalue(Pike_fp->locals + val);    }    print_return_value();    goto do_dumb_return; -  +  }       CASE(F_RETURN_IF_TRUE);    if(!IS_ZERO(Pike_sp-1)) goto do_return;
1264:      #define COMPARISON(ID,DESC,EXPR) \    OPCODE0(ID, DESC, { \ -  instr = EXPR; \ +  INT32 val = EXPR; \    pop_n_elems(2); \ -  push_int(instr); \ +  push_int(val); \    })      COMPARISON(F_EQ, "==", is_eq(Pike_sp-2,Pike_sp-1));
1586:   });      OPCODE0(F_SIZEOF, "sizeof", { -  instr=pike_sizeof(Pike_sp-1); +  INT32 val = pike_sizeof(Pike_sp-1);    pop_stack(); -  push_int(instr); +  push_int(val);   });      OPCODE1(F_SIZEOF_LOCAL, "sizeof local", {
1765:    */    if(Pike_fp->current_object->prog != Pike_fp->context.prog)    { -  pc+=sizeof(INT32); +  pc += sizeof(INT32)/sizeof(PIKE_OPCODE_T);    if(low_mega_apply(APPLY_LOW,    DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),    Pike_fp->current_object,
1784:    /* FIXME: Use new recursion stuff */    OPCODE0_TAILJUMP(F_RECUR, "recur", {    OPCODE0_TAILJUMP(F_RECUR_AND_POP, "recur & pop", { -  int opcode = instr; -  unsigned char *addr; +  PIKE_OPCODE_T opcode = instr; +  PIKE_OPCODE_T *addr;    struct pike_frame *new_frame;       fast_check_threads_etc(6);
1830:    Pike_fp=new_frame;    pc=addr;    new_frame->flags=PIKE_FRAME_RETURN_INTERNAL; -  if (opcode == F_RECUR_AND_POP-F_OFFSET) +  if (opcode == DO_IF_ELSE_COMPUTED_GOTO(&&LABEL_F_RECUR_AND_POP, +  F_RECUR_AND_POP-F_OFFSET))    new_frame->flags|=PIKE_FRAME_RETURN_POP;    });    });
1841:   OPCODE0_JUMP(F_TAIL_RECUR, "tail recursion", {    int x;    INT32 num_locals; -  unsigned char *addr; +  PIKE_OPCODE_T *addr;    INT32 args = DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp));       fast_check_threads_etc(6);