int gcd(int lh, int rh){

return rh > 0 ? gcd(rh, lh % rh) : lh; }

gcd:

  cmp   r1, #0 ; r1 == 0?

  bxle  lr   ; if r1 <= 0 return lh

 push  r1  ; push rh

bl __aeabi_idivmod  ; lh / rh

              ; quotient in r0

               ; remainder in r1

  pop    r0       ; r0 = rh

; now rh in r0, lh % rh in r1

  bl     gcd ; call gcd

 bx     lr ; return


레지스터 2개 인정?