Here is a patch that fixes prederef with respect to bsr.
-- Jason
Index: interpreter.c =================================================================== RCS file: /home/perlcvs/parrot/interpreter.c,v retrieving revision 1.57 diff -u -r1.57 interpreter.c --- interpreter.c 12 Jan 2002 15:33:08 -0000 1.57 +++ interpreter.c 13 Jan 2002 01:00:05 -0000 @@ -257,7 +257,7 @@ break; case PARROT_ARG_IC: - pc_prederef[i] = (void *)pc[i]; + pc_prederef[i] = (void *)&pc[i]; break; case PARROT_ARG_NC: Index: Parrot/OpTrans/CPrederef.pm =================================================================== RCS file: /home/perlcvs/parrot/Parrot/OpTrans/CPrederef.pm,v retrieving revision 1.3 diff -u -r1.3 CPrederef.pm --- Parrot/OpTrans/CPrederef.pm 1 Jan 2002 03:43:12 -0000 1.3 +++ Parrot/OpTrans/CPrederef.pm 13 Jan 2002 01:00:05 -0000 @@ -66,7 +66,7 @@ sub goto_pop { my ($self) = @_; - return "return pop_dest(interpreter)"; + return "return (((opcode_t *)pop_dest(interpreter) - (opcode_t +*)interpreter->code->byte_code) + interpreter->prederef_code)"; } @@ -86,7 +86,7 @@ 'p' => "(*(PMC **)cur_opcode[%ld])", 's' => "(*(STRING **)cur_opcode[%ld])", - 'ic' => "(*(INTVAL *)&cur_opcode[%ld])", + 'ic' => "(*(INTVAL *)cur_opcode[%ld])", 'nc' => "(*(FLOATVAL *)cur_opcode[%ld])", 'pc' => "%ld /* ERROR: Don't know how to handle PMC constants yet! */", 'sc' => "(*(STRING **)cur_opcode[%ld])",