Author: kjs Date: Tue Jan 20 15:03:08 2009 New Revision: 35842 Modified: trunk/compilers/pirc/src/bcgen.c trunk/compilers/pirc/src/bcgen.h
Log: [pirc] fix debug segment stuff. + add JIT segment code from IMCC, to be converted in PIRC-compatible code. Modified: trunk/compilers/pirc/src/bcgen.c ============================================================================== --- trunk/compilers/pirc/src/bcgen.c (original) +++ trunk/compilers/pirc/src/bcgen.c Tue Jan 20 15:03:08 2009 @@ -429,7 +429,7 @@ /* =item C<void -create_debugsegment(bytecode * const bc, size_t size, int sourceline, char const * const file)> +create_debugsegment(bytecode * const bc, size_t size, char const * const file)> Create a debug segment of size C<size>. @@ -437,11 +437,11 @@ */ void -create_debugsegment(bytecode * const bc, size_t size, int sourceline, char const * const file) { +create_debugsegment(bytecode * const bc, size_t size, char const * const file) { bc->debug_seg = Parrot_new_debug_seg(bc->interp, bc->interp->code, size); - Parrot_debug_add_mapping(bc->interp, bc->debug_seg, sourceline, file); + Parrot_debug_add_mapping(bc->interp, bc->debug_seg, bc->instr_counter, file); } /* @@ -928,6 +928,48 @@ } +#if 0 + +PARROT_WARN_UNUSED_RESULT +PARROT_CANNOT_RETURN_NULL +opcode_t * +make_jit_info(PARROT_INTERP, ARGIN(const IMC_Unit *unit)) +{ + const size_t old = old_blocks(interp); + const size_t size = unit->n_basic_blocks + old; + + if (!IMCC_INFO(interp)->globals->cs->jit_info) { + const size_t len = + strlen(IMCC_INFO(interp)->globals->cs->seg->base.name) + 5; + char * const name = mem_allocate_n_typed(len, char); + + snprintf(name, len, "%s_JIT", + IMCC_INFO(interp)->globals->cs->seg->base.name); + + IMCC_INFO(interp)->globals->cs->jit_info = + PackFile_Segment_new_seg(interp, + interp->code->base.dir, PF_UNKNOWN_SEG, name, 1); + + mem_sys_free(name); + } + + /* store current size */ + IMCC_INFO(interp)->globals->cs->subs->n_basic_blocks = unit->n_basic_blocks; + + /* offset of block start and end, 4 * registers_used */ + IMCC_INFO(interp)->globals->cs->jit_info->data = + mem_realloc_n_typed(IMCC_INFO(interp)->globals->cs->jit_info->data, + size * 4, opcode_t); + + IMCC_INFO(interp)->globals->cs->jit_info->size = size * 4; + + return IMCC_INFO(interp)->globals->cs->jit_info->data + old * 4; +} + +#endif /* HAS_JIT */ + + + /* =item C<void Modified: trunk/compilers/pirc/src/bcgen.h ============================================================================== --- trunk/compilers/pirc/src/bcgen.h (original) +++ trunk/compilers/pirc/src/bcgen.h Tue Jan 20 15:03:08 2009 @@ -82,7 +82,7 @@ void destroy_bytecode(bytecode * bc); void create_codesegment(bytecode * const bc, int codesize); -void create_debugsegment(bytecode * const bc, size_t size, int sourceline, char const * const file); +void create_debugsegment(bytecode * const bc, size_t size, char const * const file); void emit_debug_info(bytecode * const bc, int sourceline); void create_annotations_segment(bytecode * const bc, char const * const name);