

===================== parser output ===============================

let rec gcd  m n = 
   if (m = 0)
   then n
   else 
      if (m <= n)
      then (gcd m (n - m))
      else (gcd n (m - n))
in (print_int (gcd 21600 337500))

===================== typing output ===============================

let rec gcd  : (int, int) -> int m : int n : int = 
   if (m = 0)
   then n
   else 
      if (m <= n)
      then (gcd m (n - m))
      else (gcd n (m - n))
in (print_int (gcd 21600 337500))

===================== knormal output ===============================

let gcd  : (int, int) -> intm : int n : int = 
   let Ti4  : int = 0 in
   
   if m = Ti4 
   then n
   else 
      if m <= n 
      then 
         let Ti5  : int = (n - m) in
         (gcd m Ti5)
      else 
         let Ti6  : int = (m - n) in
         (gcd n Ti6)
in 
   let Ti3  : int = let Ti1  : int = 21600 in
   
   let Ti2  : int = 337500 in
   (gcd Ti1 Ti2) in
   EXTERN(print_int Ti3)

===================== alpha output ===============================

let gcd_7  : (int, int) -> intm_8 : int n_9 : int = 
   let Ti4_13  : int = 0 in
   
   if m_8 = Ti4_13 
   then n_9
   else 
      if m_8 <= n_9 
      then 
         let Ti5_15  : int = (n_9 - m_8) in
         (gcd_7 m_8 Ti5_15)
      else 
         let Ti6_14  : int = (m_8 - n_9) in
         (gcd_7 n_9 Ti6_14)
in 
   let Ti3_10  : int = let Ti1_11  : int = 21600 in
   
   let Ti2_12  : int = 337500 in
   (gcd_7 Ti1_11 Ti2_12) in
   EXTERN(print_int Ti3_10)

===================== simplify output ===============================

let gcd_7  : (int, int) -> intm_8 : int n_9 : int = 
   let Ti4_13  : int = 0 in
   
   if m_8 = Ti4_13 
   then n_9
   else 
      if m_8 <= n_9 
      then 
         let Ti5_15  : int = (n_9 - m_8) in
         (gcd_7 m_8 Ti5_15)
      else 
         let Ti6_14  : int = (m_8 - n_9) in
         (gcd_7 n_9 Ti6_14)
in 
   let Ti1_11  : int = 21600 in
   
   let Ti2_12  : int = 337500 in
   
   let Ti3_10  : int = (gcd_7 Ti1_11 Ti2_12) in
   EXTERN(print_int Ti3_10)

===================== closure output ===============================
let LABEL(gcd_7) [] m_8 : int, n_9 : int = 
   let Ti4_13  : int = 0 in
   
   if m_8 = Ti4_13 
   then n_9
   else 
      if m_8 <= n_9 
      then 
         let Ti5_15  : int = (n_9 - m_8) in
         APPLY_DIRECT(LABEL(gcd_7) m_8 Ti5_15)
      else 
         let Ti6_14  : int = (m_8 - n_9) in
         APPLY_DIRECT(LABEL(gcd_7) n_9 Ti6_14)
in

let Ti1_11  : int = 21600 in

let Ti2_12  : int = 337500 in

let Ti3_10  : int = APPLY_DIRECT(LABEL(gcd_7) Ti1_11 Ti2_12) in
APPLY_DIRECT(LABEL(min_caml_print_int) Ti3_10)

===================== virtual  output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(gcd_7) (arg=(m_8, n_9), farg=())

LET(Ti4_13, set(0), 
   ANSWER(
      IfEq(m_8, Ti4_13, 
         ANSWER(mov(n_9)), 
         ANSWER(
            IfLE(m_8, n_9, 
               LET(Ti5_15, sub(n_9, m_8), 
                  ANSWER(CallDirect(LABEL(gcd_7), args=(m_8, Ti5_15), farg=()))), 
               LET(Ti6_14, sub(m_8, n_9), 
                  ANSWER(CallDirect(LABEL(gcd_7), args=(n_9, Ti6_14), farg=()))))))))
==== Expression =======

LET(Ti1_11, set(21600), 
   LET(Ti2_12, set(337500), 
      LET(Ti3_10, CallDirect(LABEL(gcd_7), args=(Ti1_11, Ti2_12), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(Ti3_10), farg=())))))


=====================  simm13  output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(gcd_7) (arg=(m_8, n_9), farg=())

ANSWER(
   IfEq(m_8, 0, 
      ANSWER(mov(n_9)), 
      ANSWER(
         IfLE(m_8, n_9, 
            LET(Ti5_15, sub(n_9, m_8), 
               ANSWER(CallDirect(LABEL(gcd_7), args=(m_8, Ti5_15), farg=()))), 
            LET(Ti6_14, sub(m_8, n_9), 
               ANSWER(CallDirect(LABEL(gcd_7), args=(n_9, Ti6_14), farg=())))))))
==== Expression =======

LET(Ti1_11, set(21600), 
   LET(Ti2_12, set(337500), 
      LET(Ti3_10, CallDirect(LABEL(gcd_7), args=(Ti1_11, Ti2_12), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(Ti3_10), farg=())))))


===================== RegAlloc output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(gcd_7) (arg=(%i2, %i3), farg=())

ANSWER(
   IfEq(%i2, 0, 
      ANSWER(mov(%i3)), 
      ANSWER(
         IfLE(%i2, %i3, 
            LET(%i3, sub(%i3, %i2), 
               ANSWER(CallDirect(LABEL(gcd_7), args=(%i2, %i3), farg=()))), 
            LET(%i2, sub(%i2, %i3), 
               ANSWER(CallDirect(LABEL(gcd_7), args=(%i3, %i2), farg=())))))))
==== Expression =======

LET(%i2, set(21600), 
   LET(%i3, set(337500), 
      LET(%i2, CallDirect(LABEL(gcd_7), args=(%i2, %i3), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(%i2), farg=())))))


===================== Emit output ===============================
.section	".rodata"
.align	8
.section	".text"
gcd_7:
	cmp	%i2, 0
	bne	be_else_19
	nop
	mov	%i3, %i2
	retl
	nop
be_else_19:
	cmp	%i2, %i3
	bg	ble_else_20
	nop
	sub	%i3, %i2, %i3
	b	gcd_7
	nop
ble_else_20:
	sub	%i2, %i3, %i2
	mov	%i3, %o4
	mov	%i2, %i3
	mov	%o4, %i2
	b	gcd_7
	nop
.global	min_caml_start
min_caml_start:
	save	%sp, -112, %sp
	set	21600, %i2
	set	337500, %i3
	st	%o7, [%i0 + 4]
	call	gcd_7
	add	%i0, 8, %i0	! delay slot
	sub	%i0, 8, %i0
	ld	[%i0 + 4], %o7
	st	%o7, [%i0 + 4]
	call	min_caml_print_int
	add	%i0, 8, %i0	! delay slot
	sub	%i0, 8, %i0
	ld	[%i0 + 4], %o7
	ret
	restore
