(C) 1998 AROS - The Amiga Research OS
LONG a = 352543; LONG b = -52464; LONG c = SMult32(a,b); c == -1315946768
The utility.library math functions are unlike all other utility functions in that they don't require the library base to be loaded in register A6, and they also save the values of the address registers A0/A1.
This function is mainly to support assembly programers, and is probably of limited use to higher-level language programmers.
For emulation we are performing the operation:
(2^16 * a + b) * (2^16 * c + d) = 2^32 * ab + 2^16 * ad + 2^16 * bc + bd = 2^32 * ab + 2^16 ( ad + bc ) + bd
Now since the result is a 32-bit number, the 2^32 term will have no effect. (Since 2^32 > max (32-bit number)), as will the high part of ad + bc.
Therefore: product = 2^16( ad + bc ) + bd
Renamed utility_intern.h to intern.h.