static bool has_farith_attr(const ir_node *node)
{
- return is_arm_Dvf(node) || is_arm_Adf(node);
+ return is_arm_Adf(node) || is_arm_Muf(node) || is_arm_Suf(node)
+ || is_arm_Dvf(node) || is_arm_Mvf(node) || is_arm_FltX(node);
}
/**
mode => $mode_fp,
},
+FltX => {
+ irn_flags => "R",
+ reg_req => { in => [ "gp" ], out => [ "fpa" ] },
+ emit => '. flt%AM %D0, %S0',
+ attr_type => "arm_farith_attr_t",
+ attr => "ir_mode *op_mode",
+ mode => $mode_fp,
+},
+
Cmfe => {
irn_flags => "R|F",
mode => $mode_flags,
}
} else {
/* from int to float */
- panic("TODO");
+ if (!mode_is_signed(src_mode)) {
+ panic("TODO");
+ } else {
+ return new_bd_arm_FltX(dbg, block, new_op, dst_mode);
+ }
}
} else if (USE_VFP(env_cg->isa)) {
panic("VFP not supported yet");
}
} else {
return gen_int_binop(node, MATCH_SIZE_NEUTRAL,
- new_bd_arm_Sub_reg, new_bd_arm_Sub_imm);
+ new_bd_arm_Sub_reg, new_bd_arm_Sub_imm);
}
}