Powers of two never reach a multiply
Multiplying by a power of two is the same operation as shifting the bits left, and shifting is cheaper, so the compiler never emits a multiply for one. lsl — logical shift left — does the job, and the shift amount is the exponent: lsl #1 doubles, lsl #2 quadruples, lsl #3 multiplies by eight.
Here is a function that returns its first argument times four:
0 lsl r0, #2
2 bx lr
Two-operand form, because the value being shifted is already in the register the result has to end up in. r0 goes in, r0 comes out, nothing else is touched.
Now watch what changes when the value starts somewhere else — this one scales its third argument:
0 lsl r0, r2, #4
2 bx lr
Three operands: read r2, write r0. The compiler needs a shape that can take its input from one register and put its answer in another, and lsl has one. The two forms are the same instruction doing the same job — the operand count is telling you where the value came from.
Your target uses the three-operand form. Read which register it takes its input from and what the shift amount is.
Your task
Write doubleUp, taking two s32s, to reproduce the target assembly.