-void set_ia32_Immop_attr(ir_node *node, ir_node *cnst) {
- ia32_attr_t *na = get_ia32_attr(node);
- ia32_attr_t *ca = get_ia32_attr(cnst);
-
- switch(get_ia32_Const_type(cnst)) {
- case ia32_Const:
- na->cnst_val.tv = ca->cnst_val.tv;
- na->cnst = ca->cnst;
- set_ia32_immop_type(node, ia32_ImmConst);
- break;
- case ia32_SymConst:
- na->cnst_val.sc = ca->cnst_val.sc;
- na->cnst = na->cnst_val.sc;
- set_ia32_immop_type(node, ia32_ImmSymConst);
- break;
- default:
- assert(0 && "Need ia32_Const to set Immop attr");
- }
-}
-
-/**
- * Copy the attributes from Immop to an Immop
- */
-void copy_ia32_Immop_attr(ir_node *dst, ir_node *src) {
- ia32_attr_t *da = get_ia32_attr(dst);
- ia32_attr_t *sa = get_ia32_attr(src);
-
- switch(get_ia32_immop_type(src)) {
- case ia32_ImmConst:
- da->cnst_val.tv = sa->cnst_val.tv;
- da->cnst = sa->cnst;
- set_ia32_immop_type(dst, ia32_ImmConst);
- break;
- case ia32_ImmSymConst:
- da->cnst_val.sc = sa->cnst_val.sc;
- da->cnst = sa->cnst;
- set_ia32_immop_type(dst, ia32_ImmSymConst);
- break;
- default:
- assert(0 && "Need Immop to copy Immop attr");
+void copy_ia32_Immop_attr(ir_node *node, ir_node *from) {
+ ia32_immop_type_t immop_type = get_ia32_immop_type(from);
+
+ if(immop_type == ia32_ImmConst) {
+ set_ia32_Immop_tarval(node, get_ia32_Immop_tarval(from));
+ } else if(immop_type == ia32_ImmSymConst) {
+ set_ia32_Immop_symconst(node, get_ia32_Immop_symconst(from));
+ } else {
+ ia32_attr_t *attr = get_ia32_attr(node);
+ assert(immop_type == ia32_ImmNone);
+ attr->data.imm_tp = ia32_ImmNone;