e576bb | 2002-10-11 | Martin Nilsson | |
|
795194 | 2000-04-20 | Fredrik Hübinette (Hubbe) | |
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #undef LOW_GET_ARG
#undef LOW_GET_JUMP
#undef LOW_SKIPJUMP
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | #undef GET_ARG
#undef GET_ARG2
|
388f0d | 2001-01-31 | Martin Stjernholm | | #undef GET_JUMP
#undef SKIPJUMP
|
68296f | 2001-07-07 | Henrik Grubbström (Grubba) | | #undef DOJUMP
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #undef CASE
#undef BREAK
#undef DONE
#ifdef HAVE_COMPUTED_GOTO
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | #define CASE(OP) PIKE_CONCAT(LABEL_,OP): FETCH
|
f82226 | 2001-07-16 | Fredrik Hübinette (Hubbe) | | #define FETCH (instr = PROG_COUNTER[0])
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
#define DONE continue
#else /* !PIKE_DEBUG */
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | #define DONE do { \
|
f82226 | 2001-07-16 | Fredrik Hübinette (Hubbe) | | Pike_fp->pc = PROG_COUNTER++; \
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | goto *instr; \
} while(0)
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #endif /* PIKE_DEBUG */
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
|
f82226 | 2001-07-16 | Fredrik Hübinette (Hubbe) | | #define LOW_GET_ARG() ((INT32)(ptrdiff_t)(*(PROG_COUNTER++)))
#define LOW_GET_JUMP() ((INT32)(ptrdiff_t)(*(PROG_COUNTER)))
#define LOW_SKIPJUMP() (instr = (++PROG_COUNTER)[0])
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #define GET_ARG() LOW_GET_ARG()
#define GET_ARG2() LOW_GET_ARG()
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #else /* !HAVE_COMPUTED_GOTO */
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | #define CASE(X) case (X)-F_OFFSET:
#define DONE break
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | #define FETCH
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
|
f82226 | 2001-07-16 | Fredrik Hübinette (Hubbe) | | #define LOW_GET_ARG() ((PROG_COUNTER++)[0])
|
98a775 | 2002-04-08 | Martin Stjernholm | | #if PIKE_BYTECODE_METHOD == PIKE_BYTECODE_SPARC
|
c69624 | 2001-07-18 | Henrik Grubbström (Grubba) | | #define LOW_GET_JUMP() (PROG_COUNTER[0])
#define LOW_SKIPJUMP() (++PROG_COUNTER)
|
98a775 | 2002-04-08 | Martin Stjernholm | | #else /* PIKE_BYTECODE_METHOD != PIKE_BYTECODE_SPARC */
|
f82226 | 2001-07-16 | Fredrik Hübinette (Hubbe) | | #define LOW_GET_JUMP() EXTRACT_INT(PROG_COUNTER)
#define LOW_SKIPJUMP() (PROG_COUNTER += sizeof(INT32))
|
98a775 | 2002-04-08 | Martin Stjernholm | | #endif /* PIKE_BYTECODE_METHOD */
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
#ifdef PIKE_DEBUG
#define GET_ARG() (backlog[backlogp].arg=(\
instr=prefix,\
prefix=0,\
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | instr += LOW_GET_ARG(),\
(t_flag>3 ? sprintf(trace_buffer, "- Arg = %ld\n", \
(long)instr), \
write_to_stderr(trace_buffer,strlen(trace_buffer)) : 0),\
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | instr))
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | |
|
c7ef07 | 2000-04-21 | Fredrik Hübinette (Hubbe) | | #define GET_ARG2() (backlog[backlogp].arg2=(\
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | instr=prefix2,\
prefix2=0,\
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | instr += LOW_GET_ARG(),\
(t_flag>3 ? sprintf(trace_buffer, "- Arg2 = %ld\n", \
(long)instr), \
write_to_stderr(trace_buffer,strlen(trace_buffer)) : 0),\
|
c7ef07 | 2000-04-21 | Fredrik Hübinette (Hubbe) | | instr))
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #else /* !PIKE_DEBUG */
#define GET_ARG() (instr=prefix,prefix=0,instr+LOW_GET_ARG())
#define GET_ARG2() (instr=prefix2,prefix2=0,instr+LOW_GET_ARG())
#endif /* PIKE_DEBUG */
#endif /* HAVE_COMPUTED_GOTO */
|
d49add | 2001-04-25 | Fredrik Hübinette (Hubbe) | | #ifndef STEP_BREAK_LINE
#define STEP_BREAK_LINE
#endif
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | static int eval_instruction(PIKE_OPCODE_T *pc)
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | {
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | static void *strap = &&init_strap;
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | void *instr = NULL;
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #else /* !HAVE_COMPUTED_GOTO */
|
afea00 | 2001-07-12 | Per Hedbor | | unsigned INT32 prefix2=0,prefix=0;
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | unsigned INT32 instr;
#endif /* HAVE_COMPUTED_GOTO */
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
goto *strap;
normal_strap:
#endif /* HAVE_COMPUTED_GOTO */
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(Pike_fp);
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | while(1)
{
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | instr = pc[0];
Pike_fp->pc = pc++;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
d49add | 2001-04-25 | Fredrik Hübinette (Hubbe) | | STEP_BREAK_LINE
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | |
|
388f0d | 2001-01-31 | Martin Stjernholm | | if(t_flag > 2)
{
char *file, *f;
|
50edc8 | 2001-07-13 | Henrik Grubbström (Grubba) | | struct pike_string *filep;
|
388f0d | 2001-01-31 | Martin Stjernholm | | INT32 linep;
|
50edc8 | 2001-07-13 | Henrik Grubbström (Grubba) | | filep = get_line(pc-1,Pike_fp->context.prog,&linep);
file = filep->str;
while((f=STRCHR(file,'/')))
file=f+1;
|
388f0d | 2001-01-31 | Martin Stjernholm | | fprintf(stderr,"- %s:%4ld:(%lx): %-25s %4ld %4ld\n",
file,(long)linep,
DO_NOT_WARN((long)(pc-Pike_fp->context.prog->program-1)),
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
|
afa1c6 | 2001-07-09 | Henrik Grubbström (Grubba) | | get_opcode_name(instr),
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #else /* !HAVE_COMPUTED_GOTO */
|
388f0d | 2001-01-31 | Martin Stjernholm | | get_f_name(instr + F_OFFSET),
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #endif /* HAVE_COMPUTED_GOTO */
|
388f0d | 2001-01-31 | Martin Stjernholm | | DO_NOT_WARN((long)(Pike_sp-Pike_interpreter.evaluator_stack)),
DO_NOT_WARN((long)(Pike_mark_sp-Pike_interpreter.mark_stack)));
|
50edc8 | 2001-07-13 | Henrik Grubbström (Grubba) | | free_string(filep);
|
388f0d | 2001-01-31 | Martin Stjernholm | | }
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
|
afa1c6 | 2001-07-09 | Henrik Grubbström (Grubba) | | if (instr)
ADD_RUNNED(instr);
|
d7ec82 | 2001-07-09 | Henrik Grubbström (Grubba) | | else
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("NULL Instruction!\n");
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #else /* !HAVE_COMPUTED_GOTO */
|
388f0d | 2001-01-31 | Martin Stjernholm | | if(instr + F_OFFSET < F_MAX_OPCODE)
ADD_RUNNED(instr + F_OFFSET);
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #endif /* HAVE_COMPUTED_GOTO */
|
388f0d | 2001-01-31 | Martin Stjernholm | |
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | if(d_flag)
{
|
388f0d | 2001-01-31 | Martin Stjernholm | | backlogp++;
if(backlogp >= BACKLOG) backlogp=0;
if(backlog[backlogp].program)
free_program(backlog[backlogp].program);
backlog[backlogp].program=Pike_fp->context.prog;
add_ref(Pike_fp->context.prog);
backlog[backlogp].instruction=instr;
backlog[backlogp].pc=pc;
backlog[backlogp].stack = Pike_sp - Pike_interpreter.evaluator_stack;
backlog[backlogp].mark_stack = Pike_mark_sp - Pike_interpreter.mark_stack;
#ifdef _REENTRANT
backlog[backlogp].thread_id=Pike_interpreter.thread_id;
#endif
|
dcbfa7 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #ifdef _REENTRANT
|
c91f89 | 2000-04-19 | Martin Stjernholm | | CHECK_INTERPRETER_LOCK();
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | if(OBJ2THREAD(Pike_interpreter.thread_id)->state.thread_id !=
Pike_interpreter.thread_id)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Arglebargle glop glyf, thread swap problem!\n");
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | |
if(d_flag>1 && thread_for_id(th_self()) != Pike_interpreter.thread_id)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("thread_for_id() (or Pike_interpreter.thread_id) failed in interpreter.h! %p != %p\n",thread_for_id(th_self()),Pike_interpreter.thread_id);
|
dcbfa7 | 1999-05-07 | Fredrik Hübinette (Hubbe) | | #endif
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | Pike_sp[0].type=99;
Pike_sp[1].type=99;
Pike_sp[2].type=99;
Pike_sp[3].type=99;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | if(Pike_sp<Pike_interpreter.evaluator_stack ||
Pike_mark_sp < Pike_interpreter.mark_stack || Pike_fp->locals>Pike_sp)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Stack error (generic) sp=%p/%p mark_sp=%p/%p locals=%p.\n",
|
c7ef07 | 2000-04-21 | Fredrik Hübinette (Hubbe) | | Pike_sp,
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.evaluator_stack,
|
17f08c | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_mark_sp,
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.mark_stack,
|
c7ef07 | 2000-04-21 | Fredrik Hübinette (Hubbe) | | Pike_fp->locals);
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
17f08c | 2000-07-06 | Fredrik Hübinette (Hubbe) | | if(Pike_mark_sp > Pike_interpreter.mark_stack+Pike_stack_size)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Mark Stack error (overflow).\n");
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | |
|
17f08c | 2000-07-06 | Fredrik Hübinette (Hubbe) | | if(Pike_mark_sp < Pike_interpreter.mark_stack)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Mark Stack error (underflow).\n");
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | |
if(Pike_sp > Pike_interpreter.evaluator_stack+Pike_stack_size)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("stack error (overflow).\n");
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | if( Pike_fp->current_object->prog &&
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | Pike_fp->locals+Pike_fp->num_locals > Pike_sp)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Stack error (stupid!).\n");
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | if(Pike_interpreter.recoveries &&
(Pike_sp-Pike_interpreter.evaluator_stack <
Pike_interpreter.recoveries->stack_pointer))
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Stack error (underflow).\n");
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | if(Pike_mark_sp > Pike_interpreter.mark_stack &&
Pike_mark_sp[-1] > Pike_sp)
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Stack error (underflow?)\n");
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
if(d_flag > 9) do_debug();
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(Pike_fp->current_object);
|
b040a2 | 1999-09-14 | Fredrik Hübinette (Hubbe) | | switch(d_flag)
{
default:
case 3:
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | check_object(Pike_fp->current_object);
|
8f29a3 | 1999-09-15 | Fredrik Hübinette (Hubbe) | |
|
b040a2 | 1999-09-14 | Fredrik Hübinette (Hubbe) | |
case 2:
|
a2ad15 | 2000-02-16 | Fredrik Hübinette (Hubbe) | | check_object_context(Pike_fp->current_object,
Pike_fp->context.prog,
|
e82404 | 2001-09-04 | Fredrik Hübinette (Hubbe) | | Pike_fp->current_object->storage+
Pike_fp->context.storage_offset);
|
b040a2 | 1999-09-14 | Fredrik Hübinette (Hubbe) | | case 1:
case 0:
break;
}
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | }
#endif
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #ifdef HAVE_COMPUTED_GOTO
goto *instr;
#else /* !HAVE_COMPUTED_GOTO */
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | switch(instr)
{
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | |
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | CASE(F_PREFIX_256); prefix+=256; DONE;
CASE(F_PREFIX_512); prefix+=512; DONE;
CASE(F_PREFIX_768); prefix+=768; DONE;
CASE(F_PREFIX_1024); prefix+=1024; DONE;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX_24BITX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix += (pc++)[0]<<24;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX_WORDX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix += (pc++)[0]<<16;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX_CHARX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix += (pc++)[0]<<8;
DONE;
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | |
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | CASE(F_PREFIX2_256); prefix2+=256; DONE;
CASE(F_PREFIX2_512); prefix2+=512; DONE;
CASE(F_PREFIX2_768); prefix2+=768; DONE;
CASE(F_PREFIX2_1024); prefix2+=1024; DONE;
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX2_24BITX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix2 += (pc++)[0]<<24;
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX2_WORDX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix2 += (pc++)[0]<<16;
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | CASE(F_PREFIX2_CHARX256);
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | prefix2 += (pc++)[0]<<8;
DONE;
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #endif /* HAVE_COMPUTED_GOTO */
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
87c759 | 2000-04-18 | Fredrik Hübinette (Hubbe) | | #define INTERPRETER
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE0(OP, DESC, FLAGS, CODE) CASE(OP); CODE; DONE
#define OPCODE1(OP, DESC, FLAGS, CODE) CASE(OP); { \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | INT32 arg1=GET_ARG(); \
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | FETCH; \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | CODE; \
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | } DONE
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE2(OP, DESC, FLAGS, CODE) CASE(OP); { \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | INT32 arg1=GET_ARG(); \
INT32 arg2=GET_ARG2(); \
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | FETCH; \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | CODE; \
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | } DONE
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE0_TAIL(OP, DESC, FLAGS, CODE) CASE(OP); CODE
#define OPCODE1_TAIL(OP, DESC, FLAGS, CODE) CASE(OP); CODE
#define OPCODE2_TAIL(OP, DESC, FLAGS, CODE) CASE(OP); CODE
|
795194 | 2000-04-20 | Fredrik Hübinette (Hubbe) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE0_RETURN(OP, DESC, FLAGS, CODE) OPCODE0(OP, DESC, FLAGS, CODE)
#define OPCODE1_RETURN(OP, DESC, FLAGS, CODE) OPCODE1(OP, DESC, FLAGS, CODE)
#define OPCODE2_RETURN(OP, DESC, FLAGS, CODE) OPCODE2(OP, DESC, FLAGS, CODE)
#define OPCODE0_TAILRETURN(OP, DESC, FLAGS, CODE) OPCODE0_TAIL(OP, DESC, FLAGS, CODE)
#define OPCODE1_TAILRETURN(OP, DESC, FLAGS, CODE) OPCODE1_TAIL(OP, DESC, FLAGS, CODE)
#define OPCODE2_TAILRETURN(OP, DESC, FLAGS, CODE) OPCODE2_TAIL(OP, DESC, FLAGS, CODE)
|
799753 | 2001-07-27 | Henrik Grubbström (Grubba) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE0_JUMP(OP, DESC, FLAGS, CODE) CASE(OP); CODE; DONE
#define OPCODE0_TAILJUMP(OP, DESC, FLAGS, CODE) CASE(OP); CODE
|
795194 | 2000-04-20 | Fredrik Hübinette (Hubbe) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE1_JUMP(OP, DESC, FLAGS, CODE) CASE(OP); { \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | INT32 arg1=GET_ARG(); \
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | FETCH; \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | CODE; \
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | } DONE
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE2_JUMP(OP, DESC, FLAGS, CODE) CASE(OP); { \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | INT32 arg1=GET_ARG(); \
INT32 arg2=GET_ARG2(); \
|
245475 | 2001-07-10 | Henrik Grubbström (Grubba) | | FETCH; \
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | | CODE; \
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | } DONE
|
610d05 | 2001-07-06 | Henrik Grubbström (Grubba) | |
|
2bcc0d | 2002-05-11 | Martin Stjernholm | | #define OPCODE1_TAILJUMP(OP, DESC, FLAGS, CODE) CASE(OP); CODE
#define OPCODE2_TAILJUMP(OP, DESC, FLAGS, CODE) CASE(OP); CODE
|
795194 | 2000-04-20 | Fredrik Hübinette (Hubbe) | |
|
87c759 | 2000-04-18 | Fredrik Hübinette (Hubbe) | | #include "interpret_functions.h"
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | |
#ifndef HAVE_COMPUTED_GOTO
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | default:
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Strange instruction %ld\n",(long)instr);
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | }
|
61e983 | 2001-07-08 | Henrik Grubbström (Grubba) | | #endif /* !HAVE_COMPUTED_GOTO */
|
7d7d7e | 1999-01-31 | Fredrik Hübinette (Hubbe) | | }
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | |
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
#ifdef HAVE_COMPUTED_GOTO
#undef OPCODE0
#undef OPCODE1
#undef OPCODE2
#undef OPCODE0_TAIL
#undef OPCODE1_TAIL
#undef OPCODE2_TAIL
#undef OPCODE0_JUMP
#undef OPCODE1_JUMP
#undef OPCODE2_JUMP
#undef OPCODE0_TAILJUMP
#undef OPCODE1_TAILJUMP
#undef OPCODE2_TAILJUMP
#undef LABEL
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | #define LABEL(OP) &&PIKE_CONCAT(LABEL_,OP)
#define NULL_LABEL(OP) NULL
#define OPCODE0(OP,DESC) LABEL(OP),
#define OPCODE1(OP,DESC) LABEL(OP),
#define OPCODE2(OP,DESC) LABEL(OP),
#define OPCODE0_TAIL(OP,DESC) LABEL(OP),
#define OPCODE1_TAIL(OP,DESC) LABEL(OP),
#define OPCODE2_TAIL(OP,DESC) LABEL(OP),
#define OPCODE0_JUMP(OP,DESC) LABEL(OP),
#define OPCODE1_JUMP(OP,DESC) LABEL(OP),
#define OPCODE2_JUMP(OP,DESC) LABEL(OP),
#define OPCODE0_TAILJUMP(OP,DESC) LABEL(OP),
#define OPCODE1_TAILJUMP(OP,DESC) LABEL(OP),
#define OPCODE2_TAILJUMP(OP,DESC) LABEL(OP),
|
799753 | 2001-07-27 | Henrik Grubbström (Grubba) | | #define OPCODE0_RETURN(OP,DESC) LABEL(OP),
#define OPCODE1_RETURN(OP,DESC) LABEL(OP),
#define OPCODE2_RETURN(OP,DESC) LABEL(OP),
#define OPCODE0_TAILRETURN(OP,DESC) LABEL(OP),
#define OPCODE1_TAILRETURN(OP,DESC) LABEL(OP),
#define OPCODE2_TAILRETURN(OP,DESC) LABEL(OP),
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
init_strap:
strap = &&normal_strap;
{
static void *table[] = {
|
c9745c | 2001-07-09 | Henrik Grubbström (Grubba) | | NULL_LABEL(F_OFFSET),
|
eff621 | 2001-07-09 | Henrik Grubbström (Grubba) | | NULL_LABEL(F_PREFIX_256),
NULL_LABEL(F_PREFIX_512),
NULL_LABEL(F_PREFIX_768),
NULL_LABEL(F_PREFIX_1024),
NULL_LABEL(F_PREFIX_CHARX256),
NULL_LABEL(F_PREFIX_WORDX256),
NULL_LABEL(F_PREFIX_24BITX256),
NULL_LABEL(F_PREFIX2_256),
NULL_LABEL(F_PREFIX2_512),
NULL_LABEL(F_PREFIX2_768),
NULL_LABEL(F_PREFIX2_1024),
NULL_LABEL(F_PREFIX2_CHARX256),
NULL_LABEL(F_PREFIX2_WORDX256),
NULL_LABEL(F_PREFIX2_24BITX256),
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | |
|
afa1c6 | 2001-07-09 | Henrik Grubbström (Grubba) | | #include "interpret_protos.h"
};
static struct op_2_f lookup[] = {
#undef LABEL
#define LABEL(OP) { &&PIKE_CONCAT(LABEL_, OP), OP }
#undef NULL_LABEL
#define NULL_LABEL(OP) { NULL, OP }
NULL_LABEL(F_OFFSET),
NULL_LABEL(F_PREFIX_256),
NULL_LABEL(F_PREFIX_512),
NULL_LABEL(F_PREFIX_768),
NULL_LABEL(F_PREFIX_1024),
NULL_LABEL(F_PREFIX_CHARX256),
NULL_LABEL(F_PREFIX_WORDX256),
NULL_LABEL(F_PREFIX_24BITX256),
NULL_LABEL(F_PREFIX2_256),
NULL_LABEL(F_PREFIX2_512),
NULL_LABEL(F_PREFIX2_768),
NULL_LABEL(F_PREFIX2_1024),
NULL_LABEL(F_PREFIX2_CHARX256),
NULL_LABEL(F_PREFIX2_WORDX256),
NULL_LABEL(F_PREFIX2_24BITX256),
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | #include "interpret_protos.h"
};
#ifdef PIKE_DEBUG
|
c9745c | 2001-07-09 | Henrik Grubbström (Grubba) | | if (sizeof(table) != (F_MAX_OPCODE-F_OFFSET)*sizeof(void *))
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("opcode_to_label out of sync: 0x%08lx != 0x%08lx\n",
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | DO_NOT_WARN((long)sizeof(table)),
|
c9745c | 2001-07-09 | Henrik Grubbström (Grubba) | | DO_NOT_WARN((long)((F_MAX_OPCODE-F_OFFSET)*sizeof(void *))));
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | #endif /* PIKE_DEBUG */
fcode_to_opcode = table;
|
afa1c6 | 2001-07-09 | Henrik Grubbström (Grubba) | | opcode_to_fcode = lookup;
qsort(lookup, F_MAX_OPCODE-F_OFFSET, sizeof(struct op_2_f),
lookup_sort_fun);
|
88149c | 2001-07-08 | Henrik Grubbström (Grubba) | | return 0;
}
#endif /* HAVE_COMPUTED_GOTO */
}
|