On another forum there was someone who said, the unsigned-ALUs can be used without any modification for signed parameters and give valid results.
To understand this contradiction we should keep in mind that a number (here a decimal number) has "implicit" digits at the left and the right:
12345 = 00...0000000012345.000000000...00
The same is true for positive and unsigned binary numbers; the implicit digits are 0 in this case:
01110100 = 00...0000000001110100.0000...00
For negative numbers stored as two's complement the implicit digits on the left side however are ones, not zeroes:
10110100 = 11...1111111110110100.0000...00
Whenever one of the "implicit" digits on the left side influences the result of an operation we need an unsigned and a signed variant of an operation:
Shift
Shifting left the implicit digit on the right side (after the decimal dot) will influence the result; this is always 0.
However shifting right the first implicit digit on the left side will influence the result; and indeed there are two "shift right" operations: "SRL" (unsigned) and "SRA" (signed).
Addition, subtraction and multiplication
In these cases the results will also differ:
1111 + 0011 = 11111 + 00011 = 00010 (signed)
1111 + 0011 = 01111 + 00011 = 10010 (unsigned)
However most CPUs provide operations that will only return as many bits as the input data had: If you are adding two 8-bit numbers you'll get only the lower 8 bits of the result, not the whole 9 bits. And the lower 8 bits do not differ between signed and unsigned operation.
If there is a CPU which can add two 8-bit numbers returning a 16-bit result this CPU requires an "unsigned add" and a "signed add" instruction!
The same is true for the multiplication. However a lot of (most) CPUs work like this: They multiply two 32-bit numbers and the result is not the low 32 bits but the full 64 bits - so a "signed multiply" and an "unsigned multiply" instruction are required.
There are however few CPUs that multiply two 32-bit numbers returning only the low 32 bits of the result. These CPUs will only need one "multiply" instruction.
Division
Dividing by 8 is the same operation as shifting right by three bits.
This means that three implicit digits from the left side will be shifted in which means that the implicit digits on the left side have an influence on the result.
Therefore you'll always need an "unsigned divide" and a "signed divide" operation.