2001-07-09
2001-07-09 11:37:21 by Henrik Grubbström (Grubba) <grubba@grubba.org>
-
eff6217781f1e16683e53c0617017691828ba5f8
(86 lines)
(+52/-34)
[
Show
| Annotate
]
Branch: 7.9
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);