A shift inside a mixed chain
This time the constant multiply lives partway down a longer chain. A × 2ⁿ strength-reduces to slwi, so the opening instruction is a shift even though the C says multiply. Everything past it is the same add/subtract threading you've been doing all along.
Take offset(p, q, r) — scale the first argument by a power of two, add the second, subtract the third:
slwi r0, r3, 5 # r0 = p << 5 = p * 32
add r0, r4, r0 # r0 = q + (p * 32)
subf r3, r5, r0 # r3 = r0 - r5
blr
Read the slwi as a multiply: shifting by 5 is × 32. It leaves the scaled value in r0, and add then subf carry the total down to r3. The shift only looks unusual — it's just the first arithmetic step.
Same shape in your target, different shift amount. Turn the count back into its multiplier, then trace the two operations that follow.
Your task
Write func_800c0dbc to reproduce the assembly above.