Branch: Tag:

2001-07-27

2001-07-27 15:02:05 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Added OPCODE[0-2]_{,TAIL}RETURN() to simplify JIT handling.

Rev: src/interpret.c:1.236
Rev: src/interpret_functions.h:1.84
Rev: src/interpreter.h:1.72
Rev: src/lex.c:1.100
Rev: src/opcodes.h:1.23

1:   /* -  * $Id: interpret_functions.h,v 1.83 2001/07/27 08:32:03 hubbe Exp $ +  * $Id: interpret_functions.h,v 1.84 2001/07/27 15:02:04 grubba Exp $    *    * Opcode definitions for the interpreter.    */
41:   #define OPCODE0_TAILJUMP(A, B, C) OPCODE0_TAILJUMP(A, B) C   #define OPCODE1_TAILJUMP(A, B, C) OPCODE1_TAILJUMP(A, B) C   #define OPCODE2_TAILJUMP(A, B, C) OPCODE2_TAILJUMP(A, B) C + #define OPCODE0_RETURN(A, B, C) OPCODE0_RETURN(A, B) C + #define OPCODE1_RETURN(A, B, C) OPCODE1_RETURN(A, B) C + #define OPCODE2_RETURN(A, B, C) OPCODE2_RETURN(A, B) C + #define OPCODE0_TAILRETURN(A, B, C) OPCODE0_TAILRETURN(A, B) C + #define OPCODE1_TAILRETURN(A, B, C) OPCODE1_TAILRETURN(A, B) C + #define OPCODE2_TAILRETURN(A, B, C) OPCODE2_TAILRETURN(A, B) C   #endif /* GEN_PROTOS */      
1117:    /* NOT_REACHED */   });    - OPCODE0(F_ESCAPE_CATCH, "escape catch", { + OPCODE0_RETURN(F_ESCAPE_CATCH, "escape catch", {    Pike_fp->pc = PROG_COUNTER;    INTER_ESCAPE_CATCH;   });
1267:   });       - OPCODE1(F_RETURN_LOCAL,"return local",{ + OPCODE1_RETURN(F_RETURN_LOCAL,"return local",{    DO_IF_DEBUG(    /* special case! Pike_interpreter.mark_stack may be invalid at the time we    * call return -1, so we must call the callbacks here to
1288:   });       - OPCODE0(F_RETURN_IF_TRUE,"return if true",{ + OPCODE0_RETURN(F_RETURN_IF_TRUE,"return if true",{    if(!IS_ZERO(Pike_sp-1)) DO_RETURN;    pop_stack();   });    - OPCODE0(F_RETURN_1,"return 1",{ + OPCODE0_RETURN(F_RETURN_1,"return 1",{    push_int(1);    DO_RETURN;   });    - OPCODE0(F_RETURN_0,"return 0",{ + OPCODE0_RETURN(F_RETURN_0,"return 0",{    push_int(0);    DO_RETURN;   });    - OPCODE0(F_RETURN, "return", { + OPCODE0_RETURN(F_RETURN, "return", {    DO_RETURN;   });    - OPCODE0(F_DUMB_RETURN,"dumb return", { + OPCODE0_RETURN(F_DUMB_RETURN,"dumb return", {    DO_DUMB_RETURN;   });   
1725:    } \   }); \    \ - OP(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN),NAME " & return", { \ + PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN), \ +  NAME " & return", { \    if(low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \    ARG2,ARG3)) \    { \
1760:    } \   }); \    \ - OP(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_RETURN),"mark, " NAME " & return", { \ + PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_RETURN), \ +  "mark, " NAME " & return", { \    if(low_mega_apply(TYPE,0, \    ARG2,ARG3)) \    { \
1831:    pop_stack();   });    - OPCODE1(F_CALL_BUILTIN_AND_RETURN,"call builtin & return", { + OPCODE1_RETURN(F_CALL_BUILTIN_AND_RETURN,"call builtin & return", {    DO_CALL_BUILTIN(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)));    DO_DUMB_RETURN;   });
1846:    pop_stack();   });    - OPCODE1(F_MARK_CALL_BUILTIN_AND_RETURN, "mark, call builtin & return", { + OPCODE1_RETURN(F_MARK_CALL_BUILTIN_AND_RETURN, "mark, call builtin & return", {    DO_CALL_BUILTIN(0);    DO_DUMB_RETURN;   });