opts = the_opts;
}
+/* check, wheater a mode allows a Mulh instruction */
+static int allow_Mulh(ir_mode *mode)
+{
+ if (get_mode_size_bits(mode) > params->max_bits_for_mulh)
+ return 0;
+ return (mode_is_signed(mode) && params->allow_mulhs) || (!mode_is_signed(mode) && params->allow_mulhu);
+}
+
ir_node *arch_dep_replace_mul_with_shifts(ir_node *irn)
{
ir_node *res = irn;
}
else {
/* other constant */
- if ((mode_is_signed(mode) && params->allow_mulhs) ||
- (!mode_is_signed(mode) && params->allow_mulhu))
+ if (allow_Mulh(mode))
res = replace_div_by_mulh(irn, tv);
}
}
}
else {
/* other constant */
- if ((mode_is_signed(mode) && params->allow_mulhs) ||
- (!mode_is_signed(mode) && params->allow_mulhu)) {
+ if (allow_Mulh(mode)) {
res = replace_div_by_mulh(irn, tv);
res = new_rd_Mul(dbg, current_ir_graph, block, res, c, mode);
}
else {
/* other constant */
- if ((mode_is_signed(mode) && params->allow_mulhs) ||
- (!mode_is_signed(mode) && params->allow_mulhu)) {
+ if (allow_Mulh(mode)) {
ir_node *t;
*div = replace_div_by_mulh(irn, tv);