void operator()(instruction_operand op) { switch(op.rel_type()) { case RT_XT: { code_block *compiled = op.load_code_block(); cell owner = compiled->owner; if(to_boolean(owner)) op.store_value(parent->compute_xt_address(owner)); break; } case RT_XT_PIC: { code_block *compiled = op.load_code_block(); cell owner = parent->code_block_owner(compiled); if(to_boolean(owner)) op.store_value(parent->compute_xt_pic_address(owner)); break; } case RT_XT_PIC_TAIL: { code_block *compiled = op.load_code_block(); cell owner = parent->code_block_owner(compiled); if(to_boolean(owner)) op.store_value(parent->compute_xt_pic_tail_address(owner)); break; } default: break; } }
void operator()(instruction_operand op) { switch(op.rel_type()) { case RT_ENTRY_POINT: { code_block *compiled = op.load_code_block(); cell owner = compiled->owner; if(to_boolean(owner)) op.store_value(parent->compute_entry_point_address(owner)); break; } case RT_ENTRY_POINT_PIC: { code_block *compiled = op.load_code_block(); if(reset_inline_caches || !compiled->pic_p()) { cell owner = parent->code_block_owner(compiled); if(to_boolean(owner)) op.store_value(parent->compute_entry_point_pic_address(owner)); } break; } case RT_ENTRY_POINT_PIC_TAIL: { code_block *compiled = op.load_code_block(); if(reset_inline_caches || !compiled->pic_p()) { cell owner = parent->code_block_owner(compiled); if(to_boolean(owner)) op.store_value(parent->compute_entry_point_pic_tail_address(owner)); } break; } default: break; } }