# New Ticket Created by  Leopold Toetsch 
# Please include the string:  [perl #17455]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=17455 >


This patch changes the register and constant table addressing in the 
produced core_ops*.c (and native .c) files to be much more readable[1].

Please apply,
leo

[1] e.g.:

static opcode_t *
Parrot_add_p_p_i (opcode_t *cur_opcode, struct Parrot_Interp * 
interpreter) {
#line 1369 "core.ops"
   PREG(2)->vtable->add_int(interpreter, PREG(2), IREG(3), PREG(1));
   return (opcode_t *)cur_opcode + 4;
}


-- attachment  1 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/38173/31021/fb2e94/optrans.patch

--- parrot/lib/Parrot/OpTrans/C.pm      Tue Aug 20 07:06:11 2002
+++ parrot-leo/lib/Parrot/OpTrans/C.pm  Fri Sep 20 15:12:29 2002
@@ -23,6 +23,11 @@
   return <<END;
 #define REL_PC     ((size_t)(cur_opcode - interpreter->code->byte_code))
 #define CUR_OPCODE cur_opcode
+#define IREG(i) interpreter->ctx.int_reg.registers[cur_opcode[i]]
+#define NREG(i) interpreter->ctx.num_reg.registers[cur_opcode[i]]
+#define PREG(i) interpreter->ctx.pmc_reg.registers[cur_opcode[i]]
+#define SREG(i) interpreter->ctx.string_reg.registers[cur_opcode[i]]
+#define CONST(i) interpreter->code->const_table->constants[cur_opcode[i]]
 END
 }
 
@@ -53,18 +58,18 @@
 %arg_maps = (
   'op' => "cur_opcode[%ld]",
 
-  'i'  => "interpreter->ctx.int_reg.registers[cur_opcode[%ld]]",
-  'n'  => "interpreter->ctx.num_reg.registers[cur_opcode[%ld]]",
-  'p'  => "interpreter->ctx.pmc_reg.registers[cur_opcode[%ld]]",
-  's'  => "interpreter->ctx.string_reg.registers[cur_opcode[%ld]]",
-  'k'  => "interpreter->ctx.pmc_reg.registers[cur_opcode[%ld]]",
-  'ki'  => "interpreter->ctx.int_reg.registers[cur_opcode[%ld]]",
+  'i'  => "IREG(%ld)",
+  'n'  => "NREG(%ld)",
+  'p'  => "PREG(%ld)",
+  's'  => "SREG(%ld)",
+  'k'  => "PREG(%ld)",
+  'ki' => "IREG(%ld)",
   
   'ic' => "cur_opcode[%ld]",
-  'nc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->number",
+  'nc' => "CONST(%ld)->number",
   'pc' => "%ld /* ERROR: Don't know how to handle PMC constants yet! */",
-  'sc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->string",
-  'kc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->key",
+  'sc' => "CONST(%ld)->string",
+  'kc' => "CONST(%ld)->key",
   'kic' => "cur_opcode[%ld]"
 );
 
--- parrot/lib/Parrot/OpTrans/CGoto.pm  Tue Aug 20 07:06:11 2002
+++ parrot-leo/lib/Parrot/OpTrans/CGoto.pm      Fri Sep 20 15:20:47 2002
@@ -18,6 +18,11 @@
   return <<END;
 #define REL_PC     ((size_t)(cur_opcode - interpreter->code->byte_code))
 #define CUR_OPCODE cur_opcode
+#define IREG(i) interpreter->ctx.int_reg.registers[cur_opcode[i]]
+#define NREG(i) interpreter->ctx.num_reg.registers[cur_opcode[i]]
+#define PREG(i) interpreter->ctx.pmc_reg.registers[cur_opcode[i]]
+#define SREG(i) interpreter->ctx.string_reg.registers[cur_opcode[i]]
+#define CONST(i) interpreter->code->const_table->constants[cur_opcode[i]]
 END
 }
 
@@ -117,18 +122,18 @@
 my %arg_maps = (
   'op' => "cur_opcode[%ld]",
 
-  'i'  => "interpreter->ctx.int_reg.registers[cur_opcode[%ld]]",
-  'n'  => "interpreter->ctx.num_reg.registers[cur_opcode[%ld]]",
-  'p'  => "interpreter->ctx.pmc_reg.registers[cur_opcode[%ld]]",
-  's'  => "interpreter->ctx.string_reg.registers[cur_opcode[%ld]]",
-  'k'  => "interpreter->ctx.pmc_reg.registers[cur_opcode[%ld]]",
-  'ki'  => "interpreter->ctx.int_reg.registers[cur_opcode[%ld]]",
+  'i'  => "IREG(%ld)",
+  'n'  => "NREG(%ld)",
+  'p'  => "PREG(%ld)",
+  's'  => "SREG(%ld)",
+  'k'  => "PREG(%ld)",
+  'ki' => "IREG(%ld)",
 
   'ic' => "cur_opcode[%ld]",
-  'nc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->number",
+  'nc' => "CONST(%ld)->number",
   'pc' => "%ld /* ERROR: Don't know how to handle PMC constants yet! */",
-  'sc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->string",
-  'kc' => "interpreter->code->const_table->constants[cur_opcode[%ld]]->key",
+  'sc' => "CONST(%ld)->string",
+  'kc' => "CONST(%ld)->key",
   'kic' => "cur_opcode[%ld]"
 );
 
--- parrot/lib/Parrot/OpTrans/Compiled.pm       Tue Aug 20 07:06:11 2002
+++ parrot-leo/lib/Parrot/OpTrans/Compiled.pm   Fri Sep 20 15:26:04 2002
@@ -17,6 +17,11 @@
 {
   return <<END;
 #define CUR_OPCODE cur_opcode
+#define IREG(i) interpreter->ctx.int_reg.registers[i]
+#define NREG(i) interpreter->ctx.num_reg.registers[i]
+#define PREG(i) interpreter->ctx.pmc_reg.registers[i]
+#define SREG(i) interpreter->ctx.string_reg.registers[i]
+#define CONST(i) interpreter->code->const_table->constants[i]
 END
 }
 
@@ -115,18 +120,18 @@
 #
 
 my %arg_maps = (
-  'i'  => "interpreter->ctx.int_reg.registers[%ld]",
-  'n'  => "interpreter->ctx.num_reg.registers[%ld]",
-  'p'  => "interpreter->ctx.pmc_reg.registers[%ld]",
-  's'  => "interpreter->ctx.string_reg.registers[%ld]",
-  'k'  => "interpreter->ctx.pmc_reg.registers[%ld]",
-  'ki'  => "interpreter->ctx.int_reg.registers[%ld]",
+  'i'  => "IREG(%ld)",
+  'n'  => "NREG(%ld)",
+  'p'  => "PREG(%ld)",
+  's'  => "SREG(%ld)",
+  'k'  => "PREG(%ld)",
+  'ki' => "IREG(%ld)",
 
   'ic' => "%ld",
-  'nc' => "interpreter->code->const_table->constants[%ld]->number",
+  'nc' => "CONST(%ld)->number",
   'pc' => "%ld /* ERROR: Don't know how to handle PMC constants yet! */",
-  'sc' => "interpreter->code->const_table->constants[%ld]->string",
-  'kc' => "interpreter->code->const_table->constants[%ld]->key",
+  'sc' => "CONST(%ld)->string",
+  'kc' => "CONST(%ld)->key",
   'kic' => "%ld",
 );
 

Reply via email to