When it really is a divide
When the divisor is a variable, none of the shift tricks apply. The compiler has to fall back on real hardware division, divw rD, rA, rB (signed divide word):
divw r3, r3, r4
blr
Swap to unsigned operands and you'd get divwu instead. Nothing in the source picks between them except the C types, which is one more case of types decide the instruction.
Your task
Write div2 for signed ints to match the target.