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