/* if long / int mult or divide or mod */
if (ic->op == '*' || ic->op == '/' || ic->op == '%')
{
- sym_link *type = operandType (IC_LEFT (ic));
- if (IS_INTEGRAL (type) && getSize (type) > port->support.muldiv)
+ sym_link *leftType = operandType (IC_LEFT (ic));
+
+ if (IS_INTEGRAL (leftType) && getSize (leftType) > port->support.muldiv)
{
- convilong (ic, ebbs[i], type, ic->op);
+ sym_link *rightType = operandType (IC_RIGHT (ic));
+
+ if (port->hasNativeMulFor != NULL &&
+ port->hasNativeMulFor (ic, leftType, rightType))
+ {
+ /* Leave as native */
+ }
+ else
+ {
+ convilong (ic, ebbs[i], leftType, ic->op);
+ }
}
}
if (options.cyclomatic)
printCyclomatic (ebbs, saveCount);
-
/* convert operations with support routines
written in C to function calls : Iam doing
this at this point since I want all the
operations to be as they are for optimzations */
convertToFcall (ebbs, count);
-
/* compute the live ranges */
computeLiveRanges (ebbs, count);
setToNull ((void **) &graphEdges);
ebbs = NULL;
-
return NULL;
}