// (top-level-begin 0 21100005) mov x10, x8 mov x4, 62949 movk x4, 321, lsl 16 mov x4, x4, lsl 2 add x3, x10, x4 // (call __main) bl __main // (exit) b _cleanup __put4chars: // (function-proc-begin 1 2 1) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 4 add x3, x10, 12 add x0, x10, 4 str x1, [x0] // (expr #f 0 #f (putchar (shr x 24))) // (imm) // (push 24) mov w5, 24 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (shr) ldr w7, [x3, -4]! ldr w5, [x3, -4] asr w4, w7, w5 str w4, [x3, -4] // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (putchar (bitwise-and (shr x 16) 255))) // (imm) // (push 255) mov w5, 255 str w5, [x3], 4 // (imm) // (push 16) mov w5, 16 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (shr) ldr w7, [x3, -4]! ldr w5, [x3, -4] asr w4, w7, w5 str w4, [x3, -4] // (bitand) ldr w7, [x3, -4]! ldr w5, [x3, -4] and w4, w7, w5 str w4, [x3, -4] // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (putchar (bitwise-and (shr x 8) 255))) // (imm) // (push 255) mov w5, 255 str w5, [x3], 4 // (imm) // (push 8) mov w5, 8 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (shr) ldr w7, [x3, -4]! ldr w5, [x3, -4] asr w4, w7, w5 str w4, [x3, -4] // (bitand) ldr w7, [x3, -4]! ldr w5, [x3, -4] and w4, w7, w5 str w4, [x3, -4] // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (putchar (bitwise-and x 255))) // (imm) // (push 255) mov w5, 255 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (bitand) ldr w7, [x3, -4]! ldr w5, [x3, -4] and w4, w7, w5 str w4, [x3, -4] // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg __write_int_digit: // (function-proc-begin 1 2 1) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 4 add x3, x10, 12 add x0, x10, 4 str x1, [x0] // (expr #t 2 > (> n 0)) // (imm) // (push 0) // (stack-ref-n 0) ldr w2, [x10] // (gt) // * use immediate constant 0 cmp w2, 0 // (bfl l0) ble .l0 // (expr #f 0 #f (__write_int_digit (quotient n 10))) // (push 10) mov w5, 10 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (div) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_quotient str w0, [x3, -4] // (call __write_int_digit) bl __write_int_digit // (expr #f 0 #f (putchar (+ (remainder n 10) 48))) // (imm) // (push 48) mov w5, 48 str w5, [x3], 4 // (push 10) mov w5, 10 str w5, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (mod) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_remainder str w0, [x3, -4] // (add) ldr w7, [x3, -4]! ldr w5, [x3, -4] add w4, w7, w5 str w4, [x3, -4] // (write-char) ldr w2, [x3, -4]! bl _print_character .l0: // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg __write_integer: // (function-proc-begin 1 2 1) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 4 add x3, x10, 12 add x0, x10, 4 str x1, [x0] // (expr #t 2 = (= n 0)) // (imm) // (push 0) // (stack-ref-n 0) ldr w2, [x10] // (eq) // * use immediate constant 0 cmp w2, 0 // (bfl l1) bne .l1 // (expr #f 0 #f (putchar 48)) // (push 48) mov w5, 48 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg .l1: // (expr #t 2 < (< n 0)) // (imm) // (push 0) // (stack-ref-n 0) ldr w2, [x10] // (lt) // * use immediate constant 0 cmp w2, 0 // (bfl l2) bge .l2 // (expr #f 0 #f (putchar 45)) // (push 45) mov w5, 45 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #t 4 #f (&& (= (bitwise-and n 65535) 0) (= (shr n 16) (- 32768)))) // (push 32768) mov w0, 32768 // (negate) mov w1, 0 sub w0, w1, w0 // (imm) // (push 16) // (stack-ref-n 0) ldr w4, [x10] // (shr) // * use immediate constant 16 asr w2, w4, 16 // (eq) cmp w2, w0 cset w0, eq // (imm) // (push 0) // (push 65535) mov w4, 1 mov w4, w4, lsl 16 sub w4, w4, 1 // (stack-ref-n 0) ldr w5, [x10] // (bitand) and w4, w5, w4 // (eq) // * use immediate constant 0 cmp w4, 0 cset w2, eq // (and) and w0, w2, w0 // (bfl l4) cmp w0, 0 beq .l4 // (expr #f 0 #f (__put4chars 842085431)) // (push 842085431) mov w5, 13367 movk w5, 12849, lsl 16 str w5, [x3], 4 // (call __put4chars) bl __put4chars // (expr #f 0 #f (__put4chars 876098358)) // (push 876098358) mov w5, 13110 movk w5, 13368, lsl 16 str w5, [x3], 4 // (call __put4chars) bl __put4chars // (expr #f 0 #f (putchar 52)) // (push 52) mov w5, 52 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (putchar 56)) // (push 56) mov w5, 56 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg .l4: // (expr #f 0 #f (__write_int_digit (- n))) // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (negate) sub x4, x3, 4 ldr w5, [x4] mov w0, 0 sub w5, w0, w5 str w5, [x4] // (call __write_int_digit) bl __write_int_digit // (br l3) b .l3 .ltorg .l2: // (expr #f 0 #f (__write_int_digit n)) // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (call __write_int_digit) bl __write_int_digit .l3: // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg __mult: // (function-proc-begin 2 4 3) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 8 add x3, x10, 20 add x0, x10, 12 str x1, [x0] // (expr #t 2 #f (return (* x y))) // (stack-ref-n 1) ldr w0, [x10, 4] // (stack-ref-n 0) ldr w2, [x10] // (mul) mul w0, w2, w0 // (stack-set-n 0) str w0, [x10] // (function-end 3) add x3, x10, 4 ldr x10, [x10, 12] // (return) ldr x30, [sp], 16 ret .ltorg __div: // (function-proc-begin 2 4 3) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 8 add x3, x10, 20 add x0, x10, 12 str x1, [x0] // (expr #f 0 #f (return (quotient x y))) // (stack-ref-n 1) ldr w0, [x10, 4] str w0, [x3], 4 // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (div) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_quotient str w0, [x3, -4] // (stack-set-n 0) ldr w0, [x3, -4]! str w0, [x10] // (function-end 3) add x3, x10, 4 ldr x10, [x10, 12] // (return) ldr x30, [sp], 16 ret .ltorg my_putchar: // (function-proc-begin 1 2 1) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 4 add x3, x10, 12 add x0, x10, 4 str x1, [x0] // (expr #f 0 #f (putchar ch)) // (stack-ref-n 0) ldr w0, [x10] str w0, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (return-from-procedure)) // (proc-end 1) mov x3, x10 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg my_fgetc: // (function-proc-begin 0 2 1) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 0 add x3, x10, 12 add x0, x10, 4 str x1, [x0] // (expr #f 0 #f (return (getchar))) // (read-char) bl _read_char str w0, [x3], 4 // (stack-set-n 0) ldr w0, [x3, -4]! str w0, [x10] // (function-end 1) add x3, x10, 4 ldr x10, [x10, 4] // (return) ldr x30, [sp], 16 ret .ltorg read_char_: // (function-proc-begin 0 1 0) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 0 add x3, x10, 8 add x0, x10, 0 str x1, [x0] // (expr #t 2 = (= ch (- 1))) // (push 1) mov w0, 1 // (negate) mov w1, 0 sub w0, w1, w0 // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (eq) cmp w2, w0 // (bfl l5) bne .l5 // (expr #f 0 #f (return-from-procedure)) // (proc-end 0) mov x3, x10 ldr x10, [x10] // (return) ldr x30, [sp], 16 ret .ltorg .l5: // (expr #f 0 #f (set! ch (getchar))) // (read-char) bl _read_char str w0, [x3], 4 // (push 21100000) mov w5, 62944 movk w5, 321, lsl 16 str w5, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (expr #f 0 #f (return-from-procedure)) // (proc-end 0) mov x3, x10 ldr x10, [x10] // (return) ldr x30, [sp], 16 ret .ltorg .l6: skip_blanks: // (function-proc-begin 0 1 0) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 0 add x3, x10, 8 add x0, x10, 0 str x1, [x0] .l7: // (expr #t 4 #f ($$ ($$ (= ch 32) (= ch 10)) (= ch 13))) // (imm) // (push 13) // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (eq) // * use immediate constant 13 cmp w2, 13 cset w0, eq // (imm) // (push 10) // (push 21100000) mov w4, 62944 movk w4, 321, lsl 16 // (stack-ref) lsl w4, w4, 2 ldr w4, [x8, x4] // (eq) // * use immediate constant 10 cmp w4, 10 cset w2, eq // (imm) // (push 32) // (push 21100000) mov w5, 62944 movk w5, 321, lsl 16 // (stack-ref) lsl w5, w5, 2 ldr w5, [x8, x5] // (eq) // * use immediate constant 32 cmp w5, 32 cset w4, eq // (or) orr w2, w4, w2 // (or) orr w0, w2, w0 // (bfl l8) cmp w0, 0 beq .l8 // (expr #f 0 #f (set! ch (getchar))) // (read-char) bl _read_char str w0, [x3], 4 // (push 21100000) mov w5, 62944 movk w5, 321, lsl 16 str w5, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (br l7) b .l7 .ltorg .l8: // (expr #f 0 #f (return-from-procedure)) // (proc-end 0) mov x3, x10 ldr x10, [x10] // (return) ldr x30, [sp], 16 ret .ltorg my_scan_int: // (function-proc-begin 0 4 3) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 0 add x3, x10, 20 add x0, x10, 12 str x1, [x0] // (expr #t 1 #f (set! sum 0)) // (push 0) mov w0, 0 // (stack-set-n 0) str w0, [x10] // (expr #t 1 #f (set! negative 0)) // (push 0) mov w0, 0 // (stack-set-n 1) str w0, [x10, 4] // (expr #f 0 #f (skip_blanks)) // (call skip_blanks) bl skip_blanks // (expr #t 2 = (= ch 45)) // (imm) // (push 45) // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (eq) // * use immediate constant 45 cmp w2, 45 // (bfl l9) bne .l9 // (expr #t 1 #f (set! negative 1)) // (push 1) mov w0, 1 // (stack-set-n 1) str w0, [x10, 4] // (expr #f 0 #f (read_char_)) // (call read_char_) bl read_char_ .l9: .l10: // (expr #t 3 #f (&& (>= ch 48) (<= ch 57))) // (imm) // (push 57) // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (le) // * use immediate constant 57 cmp w2, 57 cset w0, le // (imm) // (push 48) // (push 21100000) mov w4, 62944 movk w4, 321, lsl 16 // (stack-ref) lsl w4, w4, 2 ldr w4, [x8, x4] // (ge) // * use immediate constant 48 cmp w4, 48 cset w2, ge // (and) and w0, w2, w0 // (bfl l11) cmp w0, 0 beq .l11 // (expr #t 4 #f (set! sum (- (+ (* sum 10) ch) 48))) // (imm) // (push 48) // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (push 10) mov w4, 10 // (stack-ref-n 0) ldr w5, [x10] // (mul) mul w4, w5, w4 // (add) add w2, w4, w2 // (sub) // * use immediate constant 48 sub w0, w2, 48 // (stack-set-n 0) str w0, [x10] // (expr #f 0 #f (read_char_)) // (call read_char_) bl read_char_ // (br l10) b .l10 .ltorg .l11: // (expr #t 2 = (= negative 1)) // (imm) // (push 1) // (stack-ref-n 1) ldr w2, [x10, 4] // (eq) // * use immediate constant 1 cmp w2, 1 // (bfl l12) bne .l12 // (expr #t 1 #f (set! sum (- sum))) // (stack-ref-n 0) ldr w0, [x10] // (negate) mov w1, 0 sub w0, w1, w0 // (stack-set-n 0) str w0, [x10] .l12: // (expr #f 0 #f (return sum)) // (function-end 3) add x3, x10, 4 ldr x10, [x10, 12] // (return) ldr x30, [sp], 16 ret .ltorg __main: // (function-proc-begin 0 20 19) str x30, [sp, -16]! mov x1, x10 sub x10, x3, 0 add x3, x10, 84 add x0, x10, 76 str x1, [x0] // (expr #t 2 #f (set! ch 32)) // (push 32) mov w0, 32 // (push 21100000) mov w2, 62944 movk w2, 321, lsl 16 // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx 1)) // (push 1) mov w0, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 1 #f (set! return_stack_idx 0)) // (push 0) mov w0, 0 // (stack-set-n 6) str w0, [x10, 24] // (expr #t 1 #f (set! eof_reached 0)) // (push 0) mov w0, 0 // (stack-set-n 17) str w0, [x10, 68] // (expr #t 1 #f (set! frame_start 0)) // (push 0) mov w0, 0 // (stack-set-n 5) str w0, [x10, 20] // (expr #f 0 #f (set! temp (my_scan_int))) // (call my_scan_int) bl my_scan_int // (stack-set-n 13) ldr w0, [x3, -4]! str w0, [x10, 52] // (expr #t 1 #f (set! idx 0)) // (push 0) mov w0, 0 // (stack-set-n 0) str w0, [x10] .l13: // (expr #t 2 < (< idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref-n 0) ldr w2, [x10] // (lt) cmp w2, w0 // (bfl l14) bge .l14 // (expr #f 0 #f (set! word (my_scan_int))) // (call my_scan_int) bl my_scan_int // (stack-set-n 1) ldr w0, [x3, -4]! str w0, [x10, 4] // (expr #t 3 #f (vector-set! code idx word)) // (stack-ref-n 1) ldr w0, [x10, 4] // (stack-ref-n 0) ldr w2, [x10] // (push 21000000) mov w4, 28480 movk w4, 320, lsl 16 // (add) add w2, w4, w2 // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! idx (+ idx 1))) // (imm) // (push 1) // (stack-ref-n 0) ldr w2, [x10] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 0) str w0, [x10] // (br l13) b .l13 .ltorg .l14: // (expr #t 1 #f (set! pc 0)) // (push 0) mov w0, 0 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] .l15: // (expr #f 0 #f opcode) // (stack-ref-n 3) ldr w0, [x10, 12] str w0, [x3], 4 // (br l17) b .l17 .ltorg .l19: // (expr #t 2 #f (set! frame_start (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 5) str w0, [x10, 20] // (expr #t 2 #f (set! stack_idx (+ frame_start (vector-ref code (+ pc 2))))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 3))) // (imm) // (push 3) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 3 add w0, w2, 3 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l20: // (expr #t 2 #f (set! formals_offset (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 10) str w0, [x10, 40] // (expr #t 2 #f (set! all_vars_size (vector-ref code (+ pc 2)))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 11) str w0, [x10, 44] // (expr #t 2 #f (set! dynamic_link (vector-ref code (+ pc 3)))) // (imm) // (push 3) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 3 add w0, w2, 3 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 12) str w0, [x10, 48] // (expr #t 1 #f (set! temp frame_start)) // (stack-ref-n 5) ldr w0, [x10, 20] // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! frame_start (- stack_idx formals_offset))) // (stack-ref-n 10) ldr w0, [x10, 40] // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) sub w0, w2, w0 // (stack-set-n 5) str w0, [x10, 20] // (expr #t 2 #f (set! stack_idx (+ frame_start all_vars_size))) // (stack-ref-n 11) ldr w0, [x10, 44] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 3 #f (vector-set! stack (+ frame_start dynamic_link) temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref-n 12) ldr w2, [x10, 48] // (stack-ref-n 5) ldr w4, [x10, 20] // (add) add w2, w4, w2 // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (+ pc 4))) // (imm) // (push 4) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 4 add w0, w2, 4 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l21: // (expr #t 2 #f (set! dynamic_link (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 12) str w0, [x10, 48] // (expr #t 1 #f (set! temp (vector-ref stack frame_start))) // (stack-ref-n 5) ldr w0, [x10, 20] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 13) str w0, [x10, 52] // (expr #t 1 #f (set! stack_idx frame_start)) // (stack-ref-n 5) ldr w0, [x10, 20] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! frame_start (vector-ref stack (+ frame_start dynamic_link)))) // (stack-ref-n 12) ldr w0, [x10, 48] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 5) str w0, [x10, 20] // (expr #t 2 #f (vector-set! stack stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l22: // (expr #t 2 #f (set! dynamic_link (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 12) str w0, [x10, 48] // (expr #t 1 #f (set! stack_idx frame_start)) // (stack-ref-n 5) ldr w0, [x10, 20] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! frame_start (vector-ref stack (+ frame_start dynamic_link)))) // (stack-ref-n 12) ldr w0, [x10, 48] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 5) str w0, [x10, 20] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l23: // (expr #t 2 #f (vector-set! stack stack_idx (+ frame_start (vector-ref code (+ pc 1))))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l24: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (vector-set! stack temp (vector-ref stack (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l25: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 3 #f (vector-set! stack (vector-ref stack (- stack_idx 1)) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (imm) // (push 1) // (stack-ref-n 4) ldr w4, [x10, 16] // (sub) // * use immediate constant 1 sub w2, w4, 1 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l26: // (expr #t 2 #f (vector-set! stack stack_idx (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l27: // (expr #t 2 #f (set! stack_idx (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l28: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (+ (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (add) add w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l29: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (- (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (sub) sub w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l30: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (* (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (mul) mul w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l31: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #f 0 #f (vector-set! stack temp (quotient (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (stack-ref-n 14) ldr w0, [x10, 56] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (div) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_quotient str w0, [x3, -4] // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l32: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #f 0 #f (vector-set! stack temp (remainder (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (stack-ref-n 14) ldr w0, [x10, 56] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (mod) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_remainder str w0, [x3, -4] // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l33: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #f 0 #f (vector-set! stack temp (abs (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (abs) sub x4, x3, 4 ldr w5, [x4] cmp w5, 0 bge .l104 mov w0, 0 sub w5, w0, w5 str w5, [x4] .l104: // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l34: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (vector-set! stack temp (- (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (negate) mov w1, 0 sub w0, w1, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l35: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (shl (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (shl) lsl w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l36: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (shr (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (shr) asr w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l37: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (bitwise-ior (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitor) orr w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l38: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (bitwise-and (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitand) and w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l39: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (vector-set! stack temp (bitwise-not (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (bitnot) mvn w0, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l40: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 1 #f (set! cc (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 8) str w0, [x10, 32] // (expr #t 1 #f (set! stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 != (!= cc 0)) // (imm) // (push 0) // (stack-ref-n 8) ldr w2, [x10, 32] // (ne) // * use immediate constant 0 cmp w2, 0 // (bfl l68) beq .l68 // (expr #t 2 #f (set! pc (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (br l69) b .l69 .ltorg .l68: // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] .l69: // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l41: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 1 #f (set! cc (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 8) str w0, [x10, 32] // (expr #t 1 #f (set! stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 = (= cc 0)) // (imm) // (push 0) // (stack-ref-n 8) ldr w2, [x10, 32] // (eq) // * use immediate constant 0 cmp w2, 0 // (bfl l70) bne .l70 // (expr #t 2 #f (set! pc (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (br l71) b .l71 .ltorg .l70: // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] .l71: // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l42: // (expr #t 2 #f (set! pc (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l43: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 = (= (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (eq) cmp w2, w0 // (bfl l72) bne .l72 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l73) b .l73 .ltorg .l72: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l73: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l44: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 < (< (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (lt) cmp w2, w0 // (bfl l74) bge .l74 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l75) b .l75 .ltorg .l74: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l75: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l45: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 > (> (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (gt) cmp w2, w0 // (bfl l76) ble .l76 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l77) b .l77 .ltorg .l76: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l77: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l46: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 <= (<= (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (le) cmp w2, w0 // (bfl l79) bgt .l79 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l80) b .l80 .ltorg .l79: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l80: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l47: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 >= (>= (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (ge) cmp w2, w0 // (bfl l81) blt .l81 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l82) b .l82 .ltorg .l81: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l82: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l48: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 != (!= (vector-ref stack temp2) (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (ne) cmp w2, w0 // (bfl l83) beq .l83 // (expr #t 2 #f (vector-set! stack temp 1)) // (push 1) mov w0, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l84) b .l84 .ltorg .l83: // (expr #t 2 #f (vector-set! stack temp 0)) // (push 0) mov w0, 0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l84: // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l49: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (vector-set! stack temp (bitwise-and (bitwise-not (vector-ref stack temp)) 1))) // (imm) // (push 1) // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitnot) mvn w2, w2 // (bitand) // * use immediate constant 1 and w0, w2, 1 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l50: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (bitwise-and (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitand) and w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l51: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (bitwise-ior (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitor) orr w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l52: // (expr #t 3 #f (vector-set! return_stack return_stack_idx (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-ref-n 6) ldr w2, [x10, 24] // (push 21050000) mov w4, 12944 movk w4, 321, lsl 16 // (add) add w2, w4, w2 // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! pc (vector-ref code (+ pc 1)))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! return_stack_idx (+ return_stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 6) ldr w2, [x10, 24] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 6) str w0, [x10, 24] // (expr #t 2 = (= return_stack_idx 50000)) // (push 50000) mov w0, 50000 // (stack-ref-n 6) ldr w2, [x10, 24] // (eq) cmp w2, w0 // (bfl l86) bne .l86 // (expr #f 0 #f (__put4chars 1937006947)) // (push 1937006947) mov w5, 24931 movk w5, 29556, lsl 16 str w5, [x3], 4 // (call __put4chars) bl __put4chars // (expr #f 0 #f (__put4chars 1797287798)) // (push 1797287798) mov w5, 28534 movk w5, 27424, lsl 16 str w5, [x3], 4 // (call __put4chars) bl __put4chars // (expr #f 0 #f (__put4chars 1701996140)) // (push 1701996140) mov w5, 26220 movk w5, 25970, lsl 16 str w5, [x3], 4 // (call __put4chars) bl __put4chars // (expr #f 0 #f (putchar 111)) // (push 111) mov w5, 111 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (putchar 119)) // (push 119) mov w5, 119 str w5, [x3], 4 // (write-char) ldr w2, [x3, -4]! bl _print_character // (expr #f 0 #f (my_putchar 10)) // (push 10) mov w5, 10 str w5, [x3], 4 // (call my_putchar) bl my_putchar // (expr #f 0 #f (exit 0)) // (push 0) mov w5, 0 str w5, [x3], 4 // (exit) b _cleanup .l86: // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l53: // (expr #t 2 #f (set! pc (vector-ref return_stack (- return_stack_idx 1)))) // (imm) // (push 1) // (stack-ref-n 6) ldr w2, [x10, 24] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (push 21050000) mov w2, 12944 movk w2, 321, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! return_stack_idx (- return_stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 6) ldr w2, [x10, 24] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 6) str w0, [x10, 24] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l54: // (expr #t 1 #f (set! val_ 0)) // (push 0) mov w0, 0 // (stack-set-n 7) str w0, [x10, 28] // (expr #t 2 = (= eof_reached 0)) // (imm) // (push 0) // (stack-ref-n 17) ldr w2, [x10, 68] // (eq) // * use immediate constant 0 cmp w2, 0 // (bfl l87) bne .l87 // (expr #f 0 #f (set! val_ (getchar))) // (read-char) bl _read_char str w0, [x3], 4 // (stack-set-n 7) ldr w0, [x3, -4]! str w0, [x10, 28] // (expr #t 2 = (= val_ (- 1))) // (push 1) mov w0, 1 // (negate) mov w1, 0 sub w0, w1, w0 // (stack-ref-n 7) ldr w2, [x10, 28] // (eq) cmp w2, w0 // (bfl l88) bne .l88 // (expr #t 1 #f (set! eof_reached 1)) // (push 1) mov w0, 1 // (stack-set-n 17) str w0, [x10, 68] // (br l89) b .l89 .ltorg .l88: // (expr #t 2 #f (set! val_ (bitwise-and val_ 255))) // (imm) // (push 255) // (stack-ref-n 7) ldr w2, [x10, 28] // (bitand) // * use immediate constant 255 and w0, w2, 255 // (stack-set-n 7) str w0, [x10, 28] .l89: .l87: // (expr #t 2 #f (vector-set! stack stack_idx val_)) // (stack-ref-n 7) ldr w0, [x10, 28] // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l55: // (expr #t 2 = (= eof_reached 1)) // (imm) // (push 1) // (stack-ref-n 17) ldr w2, [x10, 68] // (eq) // * use immediate constant 1 cmp w2, 1 // (bfl l90) bne .l90 // (expr #t 2 #f (vector-set! stack stack_idx 1)) // (push 1) mov w0, 1 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (br l91) b .l91 .ltorg .l90: // (expr #t 2 #f (vector-set! stack stack_idx 0)) // (push 0) mov w0, 0 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] .l91: // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l56: // (expr #t 2 #f (set! temp (vector-ref stack (- stack_idx 1)))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 13) str w0, [x10, 52] // (expr #t 1 #f (set! done_displaying_int 0)) // (push 0) mov w0, 0 // (stack-set-n 16) str w0, [x10, 64] // (expr #t 2 < (< temp 0)) // (imm) // (push 0) // (stack-ref-n 13) ldr w2, [x10, 52] // (lt) // * use immediate constant 0 cmp w2, 0 // (bfl l92) bge .l92 // (expr #f 0 #f (my_putchar 45)) // (push 45) mov w5, 45 str w5, [x3], 4 // (call my_putchar) bl my_putchar // (expr #t 4 #f (&& (= (bitwise-and temp 65535) 0) (= (shr temp 16) (- 32768)))) // (push 32768) mov w0, 32768 // (negate) mov w1, 0 sub w0, w1, w0 // (imm) // (push 16) // (stack-ref-n 13) ldr w4, [x10, 52] // (shr) // * use immediate constant 16 asr w2, w4, 16 // (eq) cmp w2, w0 cset w0, eq // (imm) // (push 0) // (push 65535) mov w4, 1 mov w4, w4, lsl 16 sub w4, w4, 1 // (stack-ref-n 13) ldr w5, [x10, 52] // (bitand) and w4, w5, w4 // (eq) // * use immediate constant 0 cmp w4, 0 cset w2, eq // (and) and w0, w2, w0 // (bfl l93) cmp w0, 0 beq .l93 // (expr #t 2 #f (vector-set! stack stack_idx 56)) // (push 56) mov w0, 56 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 52)) // (push 52) mov w0, 52 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 54)) // (push 54) mov w0, 54 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 51)) // (push 51) mov w0, 51 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 56)) // (push 56) mov w0, 56 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 52)) // (push 52) mov w0, 52 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 55)) // (push 55) mov w0, 55 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 52)) // (push 52) mov w0, 52 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 49)) // (push 49) mov w0, 49 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (vector-set! stack stack_idx 50)) // (push 50) mov w0, 50 // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 1 #f (set! count 10)) // (push 10) mov w0, 10 // (stack-set-n 15) str w0, [x10, 60] // (expr #t 1 #f (set! temp 0)) // (push 0) mov w0, 0 // (stack-set-n 13) str w0, [x10, 52] .l95: // (expr #f 0 #f (my_putchar (vector-ref stack (- stack_idx 1)))) // (imm) // (push 1) mov w5, 1 str w5, [x3], 4 // (stack-ref-n 4) ldr w0, [x10, 16] str w0, [x3], 4 // (sub) ldr w7, [x3, -4]! ldr w5, [x3, -4] sub w4, w7, w5 str w4, [x3, -4] // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (call my_putchar) bl my_putchar // (expr #t 2 #f (set! stack_idx (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! temp (+ temp 1))) // (imm) // (push 1) // (stack-ref-n 13) ldr w2, [x10, 52] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 < (< temp count)) // (stack-ref-n 15) ldr w0, [x10, 60] // (stack-ref-n 13) ldr w2, [x10, 52] // (lt) cmp w2, w0 // (bfl l96) bge .l96 // (br l95) b .l95 .ltorg .l96: // (expr #t 1 #f (set! done_displaying_int 1)) // (push 1) mov w0, 1 // (stack-set-n 16) str w0, [x10, 64] .l93: // (expr #t 1 #f (! done_displaying_int)) // (stack-ref-n 16) ldr w0, [x10, 64] // (not) cmp w0, 0 cset w0, eq // (bfl l97) cmp w0, 0 beq .l97 // (expr #t 1 #f (set! temp (- temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (negate) mov w1, 0 sub w0, w1, w0 // (stack-set-n 13) str w0, [x10, 52] .l97: .l92: // (expr #t 1 #f (! done_displaying_int)) // (stack-ref-n 16) ldr w0, [x10, 64] // (not) cmp w0, 0 cset w0, eq // (bfl l98) cmp w0, 0 beq .l98 // (expr #t 1 #f (set! count 0)) // (push 0) mov w0, 0 // (stack-set-n 15) str w0, [x10, 60] .l99: // (expr #f 0 #f (vector-set! stack stack_idx (+ (remainder temp 10) 48))) // (imm) // (push 48) mov w5, 48 str w5, [x3], 4 // (push 10) mov w5, 10 str w5, [x3], 4 // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (mod) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_remainder str w0, [x3, -4] // (add) ldr w7, [x3, -4]! ldr w5, [x3, -4] add w4, w7, w5 str w4, [x3, -4] // (stack-ref-n 4) ldr w0, [x10, 16] str w0, [x3], 4 // (stack-set) ldr w4, [x3, -8]! ldr w6, [x3, 4] lsl w6, w6, 2 str w4, [x8, x6] // (expr #f 0 #f (set! temp (quotient temp 10))) // (push 10) mov w5, 10 str w5, [x3], 4 // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (div) ldr w0, [x3, -4]! ldr w1, [x3, -4] bl signed_quotient str w0, [x3, -4] // (stack-set-n 13) ldr w0, [x3, -4]! str w0, [x10, 52] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! count (+ count 1))) // (imm) // (push 1) // (stack-ref-n 15) ldr w2, [x10, 60] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 15) str w0, [x10, 60] // (expr #t 2 != (!= temp 0)) // (imm) // (push 0) // (stack-ref-n 13) ldr w2, [x10, 52] // (ne) // * use immediate constant 0 cmp w2, 0 // (bfl l100) beq .l100 // (br l99) b .l99 .ltorg .l100: // (expr #t 1 #f (set! temp 0)) // (push 0) mov w0, 0 // (stack-set-n 13) str w0, [x10, 52] .l101: // (expr #f 0 #f (my_putchar (vector-ref stack (- stack_idx 1)))) // (imm) // (push 1) mov w5, 1 str w5, [x3], 4 // (stack-ref-n 4) ldr w0, [x10, 16] str w0, [x3], 4 // (sub) ldr w7, [x3, -4]! ldr w5, [x3, -4] sub w4, w7, w5 str w4, [x3, -4] // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (call my_putchar) bl my_putchar // (expr #t 2 #f (set! stack_idx (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! temp (+ temp 1))) // (imm) // (push 1) // (stack-ref-n 13) ldr w2, [x10, 52] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 < (< temp count)) // (stack-ref-n 15) ldr w0, [x10, 60] // (stack-ref-n 13) ldr w2, [x10, 52] // (lt) cmp w2, w0 // (bfl l102) bge .l102 // (br l101) b .l101 .ltorg .l102: .l98: // (expr #t 2 #f (set! stack_idx (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l57: // (expr #f 0 #f (my_putchar 10)) // (push 10) mov w5, 10 str w5, [x3], 4 // (call my_putchar) bl my_putchar // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l58: // (expr #f 0 #f (exit 0)) // (push 0) mov w5, 0 str w5, [x3], 4 // (exit) b _cleanup // (br l15) b .l15 .ltorg .l59: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #f 0 #f (my_putchar (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] str w0, [x3], 4 // (stack-ref) sub x0, x3, 4 ldr w5, [x0] lsl w5, w5, 2 ldr w6, [x8, x5] str w6, [x0] // (call my_putchar) bl my_putchar // (expr #t 1 #f (set! stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l60: // (expr #t 2 #f (set! temp (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 1 #f (set! n (vector-ref stack temp))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 9) str w0, [x10, 36] // (expr #t 1 #f (set! stack_idx temp)) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 3 #f (set! pc (vector-ref code (+ (+ pc n) 1)))) // (imm) // (push 1) // (stack-ref-n 9) ldr w2, [x10, 36] // (stack-ref-n 2) ldr w4, [x10, 8] // (add) add w2, w4, w2 // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l61: // (expr #t 2 #f (vector-set! stack stack_idx (vector-ref stack (+ frame_start (vector-ref code (+ pc 1)))))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 5) ldr w2, [x10, 20] // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 4) ldr w2, [x10, 16] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (+ stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l62: // (expr #t 3 #f (vector-set! stack (+ frame_start (vector-ref code (+ pc 1))) (vector-ref stack (- stack_idx 1)))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (imm) // (push 1) // (stack-ref-n 2) ldr w4, [x10, 8] // (add) // * use immediate constant 1 add w2, w4, 1 // (push 21000000) mov w4, 28480 movk w4, 320, lsl 16 // (add) add w2, w4, w2 // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (stack-ref-n 5) ldr w4, [x10, 20] // (add) add w2, w4, w2 // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 2 #f (set! stack_idx (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 2))) // (imm) // (push 2) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 2 add w0, w2, 2 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l63: // (expr #f 0 #f (exit 0)) // (push 0) mov w5, 0 str w5, [x3], 4 // (exit) b _cleanup // (br l15) b .l15 .ltorg .l64: // (expr #t 2 #f (set! temp (- stack_idx 2))) // (imm) // (push 2) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 2 sub w0, w2, 2 // (stack-set-n 13) str w0, [x10, 52] // (expr #t 2 #f (set! temp2 (- stack_idx 1))) // (imm) // (push 1) // (stack-ref-n 4) ldr w2, [x10, 16] // (sub) // * use immediate constant 1 sub w0, w2, 1 // (stack-set-n 14) str w0, [x10, 56] // (expr #t 2 #f (vector-set! stack temp (bitwise-xor (vector-ref stack temp2) (vector-ref stack temp)))) // (stack-ref-n 13) ldr w0, [x10, 52] // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-ref-n 14) ldr w2, [x10, 56] // (stack-ref) lsl w2, w2, 2 ldr w2, [x8, x2] // (bitxor) eor w0, w2, w0 // (stack-ref-n 13) ldr w2, [x10, 52] // (stack-set) lsl w2, w2, 2 str w0, [x8, x2] // (expr #t 1 #f (set! stack_idx temp2)) // (stack-ref-n 14) ldr w0, [x10, 56] // (stack-set-n 4) str w0, [x10, 16] // (expr #t 2 #f (set! pc (+ pc 1))) // (imm) // (push 1) // (stack-ref-n 2) ldr w2, [x10, 8] // (add) // * use immediate constant 1 add w0, w2, 1 // (stack-set-n 2) str w0, [x10, 8] // (expr #t 2 #f (set! opcode (vector-ref code pc))) // (stack-ref-n 2) ldr w0, [x10, 8] // (push 21000000) mov w2, 28480 movk w2, 320, lsl 16 // (add) add w0, w2, w0 // (stack-ref) lsl w0, w0, 2 ldr w0, [x8, x0] // (stack-set-n 3) str w0, [x10, 12] // (br l15) b .l15 .ltorg .l17: // (brtable (0 l19) (1 l20) (2 l21) (3 l22) (4 l23) (5 l24) (6 l25) (7 l26) (8 l27) (9 l28) (10 l29) (11 l30) (12 l31) (13 l32) (14 l33) (15 l34) (16 l35) (17 l36) (18 l37) (19 l38) (20 l39) (21 l40) (22 l41) (23 l42) (24 l43) (25 l44) (26 l45) (27 l46) (28 l47) (29 l48) (30 l49) (31 l50) (32 l51) (33 l52) (34 l53) (35 l54) (36 l55) (37 l56) (38 l57) (39 l58) (40 l59) (41 l60) (42 l61) (43 l62) (44 l63) (45 l64)) ldr w0, [x3, -4]! adr x1, .l105 add x1, x1, x0, lsl 2 br x1 .l105: b .l19 b .l20 b .l21 b .l22 b .l23 b .l24 b .l25 b .l26 b .l27 b .l28 b .l29 b .l30 b .l31 b .l32 b .l33 b .l34 b .l35 b .l36 b .l37 b .l38 b .l39 b .l40 b .l41 b .l42 b .l43 b .l44 b .l45 b .l46 b .l47 b .l48 b .l49 b .l50 b .l51 b .l52 b .l53 b .l54 b .l55 b .l56 b .l57 b .l58 b .l59 b .l60 b .l61 b .l62 b .l63 b .l64 .l18: // (br l15) b .l15 .ltorg // (expr #t 1 #f (return 0)) // (push 0) mov w0, 0 // (stack-set-n 0) str w0, [x10] // (function-end 19) add x3, x10, 4 ldr x10, [x10, 76] // (return) ldr x30, [sp], 16 ret .ltorg