GCC generates better code when multiplication operations, which require library functions to perform, are caught in early in RTL, rather than leaving the operation to be mapped to a library function later on. When there is hardware multiply support, it is more efficient to perform widening multiplication using the hardware multiplier instead of letting GCC widen the arguments before calling the multiplication routine in the wider mode. Successfully regtested GCC and G++ testsuites for: msp430-sim msp430-sim/-mcpu=msp430 msp430-sim/-mhwmult=f5series msp430-sim/-mhwmult=f5series/-mlarge/-mdata-region=either/-mcode-region=either msp430-sim/-mlarge msp430-sim/-mlarge/-mdata-region=either/-mcode-region=either Additionally regtested GCC execute.exp for: msp430-sim/-mhwmult=16bit msp430-sim/-mhwmult=32bit msp430-sim/-mhwmult=f5series msp430-sim/-mhwmult=none msp430-sim/-mlarge/-mcode-region=either/-mdata-region=either/-mhwmult=16bit msp430-sim/-mlarge/-mcode-region=either/-mdata-region=either/-mhwmult=32bit msp430-sim/-mlarge/-mcode-region=either/-mdata-region=either/-mhwmult=f5series msp430-sim/-mlarge/-mcode-region=either/-mdata-region=either/-mhwmult=none Ok for trunk?