diff --git a/src/code/README.txt b/src/code/README.txt index 95f245cf2e091e514d604d222d9059be2d772162..32fd79a8d3a354d054ee62850ebea6150af81e41 100644 --- a/src/code/README.txt +++ b/src/code/README.txt @@ -2,6 +2,9 @@ Code generation templates for Pike. These paired files should all implement the following functions/macros: +PIKE_OPCODE_T + Type with opcode granularity. + void ins_pointer(INT32 ptr); Store a 32bit pointer at the current offset. diff --git a/src/code/bytecode.h b/src/code/bytecode.h index f0f856ab42add1d889af8720e41671ed90e6bd07..a3b372230d256b57a7172196b168856f761b5c8d 100644 --- a/src/code/bytecode.h +++ b/src/code/bytecode.h @@ -1,7 +1,9 @@ /* - * $Id: bytecode.h,v 1.3 2001/07/20 15:49:00 grubba Exp $ + * $Id: bytecode.h,v 1.4 2001/07/20 22:45:15 grubba Exp $ */ +#define PIKE_OPCODE_T unsigned INT8 + #define UPDATE_PC() #define ins_pointer(PTR) ins_int((PTR), (void (*)(char))add_to_program) diff --git a/src/code/computedgoto.h b/src/code/computedgoto.h index 4429db6d1324dbc8e4ec549b6bc350b9065a553d..aede1d71a4c41df87718d088929e2b206dfb3a82 100644 --- a/src/code/computedgoto.h +++ b/src/code/computedgoto.h @@ -1,7 +1,9 @@ /* - * $Id: computedgoto.h,v 1.2 2001/07/20 15:49:00 grubba Exp $ + * $Id: computedgoto.h,v 1.3 2001/07/20 22:45:16 grubba Exp $ */ +#define PIKE_OPCODE_T void * + #define UPDATE_PC() #define READ_INCR_BYTE(PC) ((INT32)(ptrdiff_t)((PC)++)[0]) diff --git a/src/code/ia32.h b/src/code/ia32.h index c1ff811f2e91ee22b614be66fdd9466fac815458..eb5762534755ab154822ecc3a6c5d21bc6af11ec 100644 --- a/src/code/ia32.h +++ b/src/code/ia32.h @@ -1,7 +1,9 @@ /* - * $Id: ia32.h,v 1.4 2001/07/20 18:47:18 grubba Exp $ + * $Id: ia32.h,v 1.5 2001/07/20 22:45:17 grubba Exp $ */ +#define PIKE_OPCODE_T unsigned INT8 + #define ins_pointer(PTR) ins_int((PTR), (void (*)(char))add_to_program) #define read_pointer(OFF) read_int(OFF) #define upd_pointer(OFF, PTR) upd_int(OFF, PTR) diff --git a/src/code/sparc.c b/src/code/sparc.c index c2a0b73e0876529287268bde77eb26fdb71ea8e0..d3aa3de4e7595764533106af197725cfe89eec22 100644 --- a/src/code/sparc.c +++ b/src/code/sparc.c @@ -1,5 +1,5 @@ /* - * $Id: sparc.c,v 1.4 2001/07/20 19:44:59 grubba Exp $ + * $Id: sparc.c,v 1.5 2001/07/20 22:45:19 grubba Exp $ * * Machine code generator for sparc. * @@ -62,7 +62,7 @@ void ins_f_byte(unsigned int opcode) void ins_f_byte_with_arg(unsigned int a,unsigned INT32 b) { - SET_REG(REG_O0, b); + SET_REG(SPARC_REG_O0, b); low_ins_f_byte(a, 1); return; } @@ -71,8 +71,8 @@ void ins_f_byte_with_2_args(unsigned int a, unsigned INT32 c, unsigned INT32 b) { - SET_REG(REG_O0, c); - SET_REG(REG_O1, b); + SET_REG(SPARC_REG_O0, c); + SET_REG(SPARC_REG_O1, b); low_ins_f_byte(a, 1); return; } diff --git a/src/code/sparc.h b/src/code/sparc.h index c71f119f27b7a9d7e497c9384992d3e7e92d0562..e05804f6e3a7b3a0253f00370471c77e4ae441a6 100644 --- a/src/code/sparc.h +++ b/src/code/sparc.h @@ -1,15 +1,17 @@ /* - * $Id: sparc.h,v 1.4 2001/07/20 16:21:32 grubba Exp $ + * $Id: sparc.h,v 1.5 2001/07/20 22:45:20 grubba Exp $ */ -#define REG_O0 8 -#define REG_O1 9 -#define REG_O2 10 -#define REG_O3 11 -#define REG_O4 12 -#define REG_O5 13 -#define REG_O6 14 -#define REG_O7 15 +#define PIKE_OPCODE_T unsigned INT32 + +#define SPARC_REG_O0 8 +#define SPARC_REG_O1 9 +#define SPARC_REG_O2 10 +#define SPARC_REG_O3 11 +#define SPARC_REG_O4 12 +#define SPARC_REG_O5 13 +#define SPARC_REG_O6 14 +#define SPARC_REG_O7 15 #define SET_REG(REG, X) do { \ INT32 val_ = X; \ @@ -33,12 +35,12 @@ #define UPDATE_PC() do { \ INT32 tmp = PC; \ - SET_REG(REG_O3, ((INT32)(&Pike_interpreter.frame_pointer))); \ + SET_REG(SPARC_REG_O3, ((INT32)(&Pike_interpreter.frame_pointer))); \ /* lduw %o3, %o3 */ \ - add_to_program(0xc0000000|(REG_O3<<25)|(REG_O3<<14)); \ - SET_REG(REG_O4, tmp); \ + add_to_program(0xc0000000|(SPARC_REG_O3<<25)|(SPARC_REG_O3<<14)); \ + SET_REG(SPARC_REG_O4, tmp); \ /* stw %o4, yy(%o3) */ \ - add_to_program(0xc0202000|(REG_O4<<25)|(REG_O3<<14)| \ + add_to_program(0xc0202000|(SPARC_REG_O4<<25)|(SPARC_REG_O3<<14)| \ OFFSETOF(pike_frame, pc)); \ } while(0) diff --git a/src/interpret.h b/src/interpret.h index 9dc7a8e15f6b826326f2486910268f4617d44cd2..a766af6b54659bd27e6e84b00c978f522b76a161 100644 --- a/src/interpret.h +++ b/src/interpret.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: interpret.h,v 1.93 2001/07/08 20:52:15 grubba Exp $ + * $Id: interpret.h,v 1.94 2001/07/20 22:45:13 grubba Exp $ */ #ifndef INTERPRET_H #define INTERPRET_H @@ -98,6 +98,14 @@ struct external_variable_context int parent_identifier; }; +#ifdef HAVE_COMPUTED_GOTO +extern PIKE_OPCODE_T *fcode_to_opcode; +extern struct op_2_f { + PIKE_OPCODE_T opcode; + INT32 fcode; +} *opcode_to_fcode; +#endif /* HAVE_COMPUTED_GOTO */ + #ifdef PIKE_DEBUG #define debug_check_stack() do{if(Pike_sp<Pike_interpreter.evaluator_stack)fatal("Stack error.\n");}while(0) #define check__positive(X,Y) if((X)<0) fatal Y diff --git a/src/program.h b/src/program.h index 0957ecd5a00ff2d9356e272cfbb54987df74d9d0..aa901e1dc692d4a4e76da00632049424c6661c18 100644 --- a/src/program.h +++ b/src/program.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: program.h,v 1.140 2001/07/17 22:03:33 grubba Exp $ + * $Id: program.h,v 1.141 2001/07/20 22:45:13 grubba Exp $ */ #ifndef PROGRAM_H #define PROGRAM_H @@ -17,6 +17,7 @@ #include "svalue.h" #include "time_stuff.h" #include "program_id.h" +#include "pikecode.h" #define STRUCT #include "compilation.h" @@ -27,25 +28,6 @@ /* Needed to support dynamic loading on NT */ PMOD_PROTO extern struct program_state * Pike_compiler; -#if defined(PIKE_USE_MACHINE_CODE) && defined(sparc) -#define PIKE_OPCODE_T unsigned INT32 -#else /* !(PIKE_USE_MACHINE_CODE && sparc) */ -#ifdef HAVE_COMPUTED_GOTO -#define PIKE_OPCODE_T void * -extern PIKE_OPCODE_T *fcode_to_opcode; -extern struct op_2_f { - PIKE_OPCODE_T opcode; - INT32 fcode; -} *opcode_to_fcode; -#else /* !HAVE_COMPUTED_GOTO */ -#ifdef SHORT_PIKE_OPCODE -#define PIKE_OPCODE_T unsigned INT16 -#else /* !SHORT_PIKE_OPCODE */ -#define PIKE_OPCODE_T unsigned INT8 -#endif /* SHORT_PIKE_OPCODE */ -#endif /* HAVE_COMPUTED_GOTO */ -#endif /* PIKE_USE_MACHINE_CODE && sparc */ - #ifdef PIKE_DEBUG #define PROGRAM_LINE_ARGS int line, char *file #else