# 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",
);