예제 #1
0
ia32_copyb_attr_t *get_ia32_copyb_attr(ir_node *node)
{
	ia32_attr_t       *attr       = get_ia32_attr(node);
	ia32_copyb_attr_t *copyb_attr = CAST_IA32_ATTR(ia32_copyb_attr_t, attr);

	return copyb_attr;
}
예제 #2
0
ia32_climbframe_attr_t *get_ia32_climbframe_attr(ir_node *node)
{
	ia32_attr_t            *attr            = get_ia32_attr(node);
	ia32_climbframe_attr_t *climbframe_attr = CAST_IA32_ATTR(ia32_climbframe_attr_t, attr);

	return climbframe_attr;
}
예제 #3
0
void set_ia32_exc_label_id(ir_node *node, ir_label_t id)
{
	ia32_attr_t *attr = get_ia32_attr(node);

	assert(attr->has_except_label);
	attr->exc_label = id;
}
예제 #4
0
ia32_immediate_attr_t *get_ia32_immediate_attr(ir_node *node)
{
	ia32_attr_t           *attr      = get_ia32_attr(node);
	ia32_immediate_attr_t *imm_attr  = CAST_IA32_ATTR(ia32_immediate_attr_t, attr);

	return imm_attr;
}
예제 #5
0
ia32_condcode_attr_t *get_ia32_condcode_attr(ir_node *node)
{
	assert(has_ia32_condcode_attr(node));
	ia32_attr_t          *attr    = get_ia32_attr(node);
	ia32_condcode_attr_t *cc_attr = CAST_IA32_ATTR(ia32_condcode_attr_t, attr);

	return cc_attr;
}
예제 #6
0
void init_ia32_x87_attributes(ir_node *res)
{
#ifndef NDEBUG
	ia32_attr_t *attr = get_ia32_attr(res);
	attr->attr_type |= IA32_ATTR_ia32_x87_attr_t;
#endif
	ir_graph *const irg = get_irn_irg(res);
	ia32_request_x87_sim(irg);
}
예제 #7
0
static void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags,
                                 const arch_register_req_t **in_reqs,
                                 int n_res)
{
	be_info_init_irn(node, flags, in_reqs, n_res);

#ifndef NDEBUG
	ia32_attr_t *attr  = get_ia32_attr(node);
	attr->attr_type   |= IA32_ATTR_ia32_attr_t;
#endif
}
예제 #8
0
void ia32_swap_left_right(ir_node *node)
{
	ia32_attr_t *attr  = get_ia32_attr(node);
	ir_node     *left  = get_irn_n(node, n_ia32_binary_left);
	ir_node     *right = get_irn_n(node, n_ia32_binary_right);

	assert(is_ia32_commutative(node));
	attr->ins_permuted = !attr->ins_permuted;
	set_irn_n(node, n_ia32_binary_left,  right);
	set_irn_n(node, n_ia32_binary_right, left);
}
예제 #9
0
void ia32_copy_am_attrs(ir_node *to, const ir_node *from)
{
	ia32_attr_t const *const from_attr = get_ia32_attr_const(from);
	ia32_attr_t       *const to_attr   = get_ia32_attr(to);
	to_attr->addr      = from_attr->addr;
	to_attr->frame_use = from_attr->frame_use;
	to_attr->size      = from_attr->size;

#ifndef NDEBUG
	to_attr->old_frame_ent = from_attr->old_frame_ent;
#endif
}
예제 #10
0
void init_ia32_attributes(ir_node *node, x86_insn_size_t const size)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->size             = size;
	attr->addr.base_input  = n_ia32_base;
	attr->addr.index_input = n_ia32_index;
	attr->addr.mem_input   = n_ia32_mem;

#ifndef NDEBUG
	attr->attr_type |= IA32_ATTR_ia32_attr_t;
#endif
}
예제 #11
0
void ia32_copy_am_attrs(ir_node *to, const ir_node *from)
{
	ia32_attr_t const *const from_attr = get_ia32_attr_const(from);
	ia32_attr_t       *const to_attr   = get_ia32_attr(to);
	to_attr->am_imm = from_attr->am_imm;
	to_attr->frame_use = from_attr->frame_use;

	set_ia32_ls_mode(to, get_ia32_ls_mode(from));
	set_ia32_am_scale(to, get_ia32_am_scale(from));
#ifndef NDEBUG
	to_attr->old_frame_ent = from_attr->old_frame_ent;
#endif
}
예제 #12
0
void set_ia32_am_support(ir_node *node, ia32_am_type_t arity)
{
	ia32_attr_t *const attr = get_ia32_attr(node);
	attr->am_arity = arity;
}
예제 #13
0
ia32_switch_attr_t *get_ia32_switch_attr(ir_node *node)
{
	ia32_attr_t        *attr        = get_ia32_attr(node);
	ia32_switch_attr_t *switch_attr = CAST_IA32_ATTR(ia32_switch_attr_t, attr);
	return switch_attr;
}
예제 #14
0
void set_ia32_exc_label(ir_node *node, unsigned flag)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->has_except_label = flag;
}
예제 #15
0
void set_ia32_is_remat(ir_node *node)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->is_remat = 1;
}
예제 #16
0
void set_ia32_is_spill(ir_node *node)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->is_spill = 1;
}
예제 #17
0
void set_ia32_is_reload(ir_node *node)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->is_reload = 1;
}
예제 #18
0
void set_ia32_commutative(ir_node *node)
{
	ia32_attr_t *const attr = get_ia32_attr(node);
	attr->is_commutative = 1;
}
예제 #19
0
void set_ia32_am_ent(ir_node *node, ir_entity *entity)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->am_imm.entity = entity;
}
예제 #20
0
void set_ia32_op_type(ir_node *node, ia32_op_type_t tp)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->tp = tp;
}
예제 #21
0
ia32_return_attr_t *get_ia32_return_attr(ir_node *node)
{
	ia32_attr_t        *attr        = get_ia32_attr(node);
	ia32_return_attr_t *return_attr = CAST_IA32_ATTR(ia32_return_attr_t, attr);
	return return_attr;
}
예제 #22
0
void set_ia32_am_tls_segment(ir_node *node, bool value)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->am_tls_segment = value;
}
예제 #23
0
void set_ia32_orig_node(ir_node *node, const ir_node *old)
{
	const char  *name = ia32_get_old_node_name(old);
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->orig_node   = name;
}
예제 #24
0
void set_ia32_am_scale(ir_node *node, unsigned scale)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	assert(scale <= 3 && "AM scale out of range [0 ... 3]");
	attr->am_scale = scale;
}
예제 #25
0
ia32_copyb_attr_t *get_ia32_copyb_attr(ir_node *node)
{
	ia32_attr_t *const attr = get_ia32_attr(node);
	return CAST_IA32_ATTR(ia32_copyb_attr_t, attr);
}
예제 #26
0
void add_ia32_am_offs_int(ir_node *node, int32_t offset)
{
	ia32_attr_t *attr = get_ia32_attr(node);
	attr->am_imm.offset += offset;
}