Compiler explorer is the friend in a such simple cases.
ARMv8-a Clang Assembly with the compiler option -O1 for keeping the recursion:
# Compilation provided by Compiler Explorer at https://godbolt.org/
power(int, int):                             // @power(int, int)
        stp     x29, x30, [sp, #-32]!           // 16-byte Folded Spill
        str     x19, [sp, #16]                  // 8-byte Folded Spill
        mov     x29, sp
        mov     w19, w0
        mov     w0, wzr
        cbz     w19, .LBB0_5
        tbnz    w1, #31, .LBB0_5
        cbz     w1, .LBB0_4
        sub     w1, w1, #1
        mov     w0, w19
        bl      power(int, int)
        mul     w0, w0, w19
        b       .LBB0_5
.LBB0_4:
        mov     w0, #1
.LBB0_5:
        ldr     x19, [sp, #16]                  // 8-byte Folded Reload
        ldp     x29, x30, [sp], #32             // 16-byte Folded Reload
        ret
ARM GCC (linux) Assembly with the compiler option -O1 for keeping the recursion:
# Compilation provided by Compiler Explorer at https://godbolt.org/
power(int, int):
        push    {r4, lr}
        mov     r4, r0
        clz     r0, r0
        lsrs    r0, r0, #5
        orrs    r3, r0, r1, lsr #31
        it      ne
        movne   r0, #0
        beq     .L6
.L1:
        pop     {r4, pc}
.L6:
        movs    r0, #1
        cmp     r1, #0
        beq     .L1
        subs    r1, r1, #1
        mov     r0, r4
        bl      power(int, int)
        mul     r0, r4, r0
        b       .L1
ARM GCC (none) Assembly with the compiler option -O1 for keeping the recursion:
# Compilation provided by Compiler Explorer at https://godbolt.org/
power(int, int):
        push    {r4, lr}
        mov     r4, r0
        rsbs    r0, r0, #1
        movcc   r0, #0
        orrs    r3, r0, r1, lsr #31
        movne   r0, #0
        beq     .L6
.L1:
        pop     {r4, lr}
        bx      lr
.L6:
        cmp     r1, #0
        moveq   r0, #1
        beq     .L1
        sub     r1, r1, #1
        mov     r0, r4
        bl      power(int, int)
        mul     r0, r4, r0
        b       .L1
ARM64 GCC Assembly with the compiler option -O1 for keeping the recursion:
# Compilation provided by Compiler Explorer at https://godbolt.org/
power(int, int):
        cmp     w1, 0
        ccmp    w0, 0, 4, ge
        bne     .L9
        mov     w0, 0
        ret
.L9:
        stp     x29, x30, [sp, -32]!
        mov     x29, sp
        str     x19, [sp, 16]
        mov     w19, w0
        mov     w0, 1
        cbnz    w1, .L10
.L1:
        ldr     x19, [sp, 16]
        ldp     x29, x30, [sp], 32
        ret
.L10:
        sub     w1, w1, #1
        mov     w0, w19
        bl      power(int, int)
        mul     w0, w19, w0
        b       .L1