Ejemplo n.º 1
0
	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;
		}
	}
Ejemplo n.º 2
0
	void operator()(instruction_operand op)
	{
		switch(op.rel_type())
		{
		case RT_LITERAL:
			op.store_value(next_literal());
			break;
		case RT_XT:
			op.store_value(parent->compute_xt_address(next_literal()));
			break;
		case RT_XT_PIC:
			op.store_value(parent->compute_xt_pic_address(next_literal()));
			break;
		case RT_XT_PIC_TAIL:
			op.store_value(parent->compute_xt_pic_tail_address(next_literal()));
			break;
		case RT_HERE:
			op.store_value(parent->compute_here_address(next_literal(),op.rel_offset(),op.parent_code_block()));
			break;
		case RT_UNTAGGED:
			op.store_value(untag_fixnum(next_literal()));
			break;
		default:
			parent->store_external_address(op);
			break;
		}
	}