You can replace the "slwi" and "or" at the end with a rlwimi (if
you put the result of the mullhw immediately in result instead of
in hi_prod), but I doubt it will make that much of a difference
(majority of the time is spent multiplying). Something like (untested)
mullhw result, x, y
rlwimi result, lo_prod, 1, 0, 30
Still not tested, but definitely more correct than the above:
mullw lo_prod, x, y
srwi result, lo_prod, 31
mulhw hi_prod, x, y
rlwimi result, hi_prod, 1, 0, 30