You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2180 lines
38 KiB

.data
.globl TOKEN_NUM
.p2align 2
TOKEN_NUM:
.word 0
.globl TOKEN_OTHER
.p2align 2
TOKEN_OTHER:
.word 1
.globl last_char
.p2align 2
last_char:
.word 32
.globl num
.p2align 2
num:
.word 0
.globl other
.p2align 2
other:
.word 0
.globl cur_token
.p2align 2
cur_token:
.word 0
.text
.globl next_char
.p2align 2
next_char:
.L.next_char.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
bl getch
mov w8, w0
adrp x13, last_char
str w8, [x13, #:lo12:last_char]
adrp x13, last_char
ldr w8, [x13, #:lo12:last_char]
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl is_space
.p2align 2
is_space:
.L.is_space.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, w0
mov w9, #32
cmp w8, w9
b.eq .L.is_space.1
b .L.is_space.3
.L.is_space.1:
mov w8, #1
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.is_space.2:
mov w8, #0
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.is_space.3:
mov w9, #10
cmp w8, w9
b.eq .L.is_space.1
b .L.is_space.2
.text
.globl is_num
.p2align 2
is_num:
.L.is_num.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, w0
mov w9, #48
cmp w8, w9
b.ge .L.is_num.3
b .L.is_num.2
.L.is_num.1:
mov w8, #1
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.is_num.2:
mov w8, #0
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.is_num.3:
mov w9, #57
cmp w8, w9
b.le .L.is_num.1
b .L.is_num.2
.text
.globl next_token
.p2align 2
next_token:
.L.next_token.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
b .L.next_token.1
.L.next_token.1:
adrp x13, last_char
ldr w8, [x13, #:lo12:last_char]
mov w0, w8
bl is_space
mov w9, w0
mov w8, #0
cmp w9, w8
b.ne .L.next_token.2
b .L.next_token.3
.L.next_token.2:
bl next_char
mov w8, w0
b .L.next_token.1
.L.next_token.3:
adrp x13, last_char
ldr w8, [x13, #:lo12:last_char]
mov w0, w8
bl is_num
mov w9, w0
mov w8, #0
cmp w9, w8
b.ne .L.next_token.4
b .L.next_token.5
.L.next_token.4:
adrp x13, last_char
ldr w9, [x13, #:lo12:last_char]
mov w8, #48
sub w8, w9, w8
adrp x13, num
str w8, [x13, #:lo12:num]
b .L.next_token.7
.L.next_token.5:
adrp x13, last_char
ldr w8, [x13, #:lo12:last_char]
adrp x13, other
str w8, [x13, #:lo12:other]
bl next_char
mov w8, w0
mov w8, #1
adrp x13, cur_token
str w8, [x13, #:lo12:cur_token]
b .L.next_token.6
.L.next_token.6:
adrp x13, cur_token
ldr w8, [x13, #:lo12:cur_token]
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.next_token.7:
bl next_char
mov w8, w0
mov w0, w8
bl is_num
mov w9, w0
mov w8, #0
cmp w9, w8
b.ne .L.next_token.8
b .L.next_token.9
.L.next_token.8:
adrp x13, num
ldr w9, [x13, #:lo12:num]
mov w8, #10
mul w9, w9, w8
adrp x13, last_char
ldr w8, [x13, #:lo12:last_char]
add w9, w9, w8
mov w8, #48
sub w8, w9, w8
adrp x13, num
str w8, [x13, #:lo12:num]
b .L.next_token.7
.L.next_token.9:
mov w8, #0
adrp x13, cur_token
str w8, [x13, #:lo12:cur_token]
b .L.next_token.6
.text
.globl panic
.p2align 2
panic:
.L.panic.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, #112
mov w0, w8
bl putch
mov w8, #97
mov w0, w8
bl putch
mov w8, #110
mov w0, w8
bl putch
mov w8, #105
mov w0, w8
bl putch
mov w8, #99
mov w0, w8
bl putch
mov w8, #33
mov w0, w8
bl putch
mov w8, #10
mov w0, w8
bl putch
mov w8, #-1
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl get_op_prec
.p2align 2
get_op_prec:
.L.get_op_prec.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, w0
mov w9, #43
cmp w8, w9
b.eq .L.get_op_prec.1
b .L.get_op_prec.3
.L.get_op_prec.1:
mov w8, #10
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.get_op_prec.2:
mov w9, #42
cmp w8, w9
b.eq .L.get_op_prec.4
b .L.get_op_prec.7
.L.get_op_prec.3:
mov w9, #45
cmp w8, w9
b.eq .L.get_op_prec.1
b .L.get_op_prec.2
.L.get_op_prec.4:
mov w8, #20
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.get_op_prec.5:
mov w8, #0
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.get_op_prec.6:
mov w9, #37
cmp w8, w9
b.eq .L.get_op_prec.4
b .L.get_op_prec.5
.L.get_op_prec.7:
mov w9, #47
cmp w8, w9
b.eq .L.get_op_prec.4
b .L.get_op_prec.6
.text
.globl stack_push
.p2align 2
stack_push:
.L.stack_push.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov x8, x0
mov w9, w1
ldr w10, [x8]
mov w11, #1
add w10, w10, w11
str w10, [x8]
ldr w10, [x8]
sxtw x10, w10
lsl x10, x10, #2
add x8, x8, x10
str w9, [x8]
ldp x29, x30, [sp], #16
ret
.text
.globl stack_pop
.p2align 2
stack_pop:
.L.stack_pop.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov x8, x0
ldr w9, [x8]
sxtw x9, w9
lsl x9, x9, #2
add x9, x8, x9
ldr w9, [x9]
ldr w10, [x8]
mov w11, #1
sub w10, w10, w11
str w10, [x8]
mov w0, w9
ldp x29, x30, [sp], #16
ret
.text
.globl stack_peek
.p2align 2
stack_peek:
.L.stack_peek.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov x8, x0
ldr w9, [x8]
sxtw x9, w9
lsl x9, x9, #2
add x8, x8, x9
ldr w8, [x8]
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl stack_size
.p2align 2
stack_size:
.L.stack_size.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov x8, x0
ldr w8, [x8]
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl eval_op
.p2align 2
eval_op:
.L.eval_op.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
mov w8, w0
mov w9, w1
mov w10, w2
mov w11, #43
cmp w8, w11
b.eq .L.eval_op.1
b .L.eval_op.2
.L.eval_op.1:
add w8, w9, w10
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.eval_op.2:
mov w11, #45
cmp w8, w11
b.eq .L.eval_op.3
b .L.eval_op.4
.L.eval_op.3:
sub w8, w9, w10
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.eval_op.4:
mov w11, #42
cmp w8, w11
b.eq .L.eval_op.5
b .L.eval_op.6
.L.eval_op.5:
mul w8, w9, w10
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.eval_op.6:
mov w11, #47
cmp w8, w11
b.eq .L.eval_op.7
b .L.eval_op.8
.L.eval_op.7:
sdiv w8, w9, w10
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.eval_op.8:
mov w11, #37
cmp w8, w11
b.eq .L.eval_op.9
b .L.eval_op.10
.L.eval_op.9:
sdiv w14, w9, w10
msub w8, w14, w10, w9
mov w0, w8
ldp x29, x30, [sp], #16
ret
.L.eval_op.10:
mov w8, #0
mov w0, w8
ldp x29, x30, [sp], #16
ret
.text
.globl eval
.p2align 2
eval:
.L.eval.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #2096
str x22, [sp, #0]
str x21, [sp, #8]
str x19, [sp, #16]
str x20, [sp, #24]
mov x10, x29
sub x10, x10, #1024
mov w9, #0
str w9, [x10]
mov x8, #4
add x8, x10, x8
str w9, [x8]
mov x8, #8
add x8, x10, x8
str w9, [x8]
mov x8, #12
add x8, x10, x8
str w9, [x8]
mov x8, #16
add x8, x10, x8
str w9, [x8]
mov x8, #20
add x8, x10, x8
str w9, [x8]
mov x8, #24
add x8, x10, x8
str w9, [x8]
mov x8, #28
add x8, x10, x8
str w9, [x8]
mov x8, #32
add x8, x10, x8
str w9, [x8]
mov x8, #36
add x8, x10, x8
str w9, [x8]
mov x8, #40
add x8, x10, x8
str w9, [x8]
mov x8, #44
add x8, x10, x8
str w9, [x8]
mov x8, #48
add x8, x10, x8
str w9, [x8]
mov x8, #52
add x8, x10, x8
str w9, [x8]
mov x8, #56
add x8, x10, x8
str w9, [x8]
mov x8, #60
add x8, x10, x8
str w9, [x8]
mov x8, #64
add x8, x10, x8
str w9, [x8]
mov x8, #68
add x8, x10, x8
str w9, [x8]
mov x8, #72
add x8, x10, x8
str w9, [x8]
mov x8, #76
add x8, x10, x8
str w9, [x8]
mov x8, #80
add x8, x10, x8
str w9, [x8]
mov x8, #84
add x8, x10, x8
str w9, [x8]
mov x8, #88
add x8, x10, x8
str w9, [x8]
mov x8, #92
add x8, x10, x8
str w9, [x8]
mov x8, #96
add x8, x10, x8
str w9, [x8]
mov x8, #100
add x8, x10, x8
str w9, [x8]
mov x8, #104
add x8, x10, x8
str w9, [x8]
mov x8, #108
add x8, x10, x8
str w9, [x8]
mov x8, #112
add x8, x10, x8
str w9, [x8]
mov x8, #116
add x8, x10, x8
str w9, [x8]
mov x8, #120
add x8, x10, x8
str w9, [x8]
mov x8, #124
add x8, x10, x8
str w9, [x8]
mov x8, #128
add x8, x10, x8
str w9, [x8]
mov x8, #132
add x8, x10, x8
str w9, [x8]
mov x8, #136
add x8, x10, x8
str w9, [x8]
mov x8, #140
add x8, x10, x8
str w9, [x8]
mov x8, #144
add x8, x10, x8
str w9, [x8]
mov x8, #148
add x8, x10, x8
str w9, [x8]
mov x8, #152
add x8, x10, x8
str w9, [x8]
mov x8, #156
add x8, x10, x8
str w9, [x8]
mov x8, #160
add x8, x10, x8
str w9, [x8]
mov x8, #164
add x8, x10, x8
str w9, [x8]
mov x8, #168
add x8, x10, x8
str w9, [x8]
mov x8, #172
add x8, x10, x8
str w9, [x8]
mov x8, #176
add x8, x10, x8
str w9, [x8]
mov x8, #180
add x8, x10, x8
str w9, [x8]
mov x8, #184
add x8, x10, x8
str w9, [x8]
mov x8, #188
add x8, x10, x8
str w9, [x8]
mov x8, #192
add x8, x10, x8
str w9, [x8]
mov x8, #196
add x8, x10, x8
str w9, [x8]
mov x8, #200
add x8, x10, x8
str w9, [x8]
mov x8, #204
add x8, x10, x8
str w9, [x8]
mov x8, #208
add x8, x10, x8
str w9, [x8]
mov x8, #212
add x8, x10, x8
str w9, [x8]
mov x8, #216
add x8, x10, x8
str w9, [x8]
mov x8, #220
add x8, x10, x8
str w9, [x8]
mov x8, #224
add x8, x10, x8
str w9, [x8]
mov x8, #228
add x8, x10, x8
str w9, [x8]
mov x8, #232
add x8, x10, x8
str w9, [x8]
mov x8, #236
add x8, x10, x8
str w9, [x8]
mov x8, #240
add x8, x10, x8
str w9, [x8]
mov x8, #244
add x8, x10, x8
str w9, [x8]
mov x8, #248
add x8, x10, x8
str w9, [x8]
mov x8, #252
add x8, x10, x8
str w9, [x8]
mov x8, #256
add x8, x10, x8
str w9, [x8]
mov x8, #260
add x8, x10, x8
str w9, [x8]
mov x8, #264
add x8, x10, x8
str w9, [x8]
mov x8, #268
add x8, x10, x8
str w9, [x8]
mov x8, #272
add x8, x10, x8
str w9, [x8]
mov x8, #276
add x8, x10, x8
str w9, [x8]
mov x8, #280
add x8, x10, x8
str w9, [x8]
mov x8, #284
add x8, x10, x8
str w9, [x8]
mov x8, #288
add x8, x10, x8
str w9, [x8]
mov x8, #292
add x8, x10, x8
str w9, [x8]
mov x8, #296
add x8, x10, x8
str w9, [x8]
mov x8, #300
add x8, x10, x8
str w9, [x8]
mov x8, #304
add x8, x10, x8
str w9, [x8]
mov x8, #308
add x8, x10, x8
str w9, [x8]
mov x8, #312
add x8, x10, x8
str w9, [x8]
mov x8, #316
add x8, x10, x8
str w9, [x8]
mov x8, #320
add x8, x10, x8
str w9, [x8]
mov x8, #324
add x8, x10, x8
str w9, [x8]
mov x8, #328
add x8, x10, x8
str w9, [x8]
mov x8, #332
add x8, x10, x8
str w9, [x8]
mov x8, #336
add x8, x10, x8
str w9, [x8]
mov x8, #340
add x8, x10, x8
str w9, [x8]
mov x8, #344
add x8, x10, x8
str w9, [x8]
mov x8, #348
add x8, x10, x8
str w9, [x8]
mov x8, #352
add x8, x10, x8
str w9, [x8]
mov x8, #356
add x8, x10, x8
str w9, [x8]
mov x8, #360
add x8, x10, x8
str w9, [x8]
mov x8, #364
add x8, x10, x8
str w9, [x8]
mov x8, #368
add x8, x10, x8
str w9, [x8]
mov x8, #372
add x8, x10, x8
str w9, [x8]
mov x8, #376
add x8, x10, x8
str w9, [x8]
mov x8, #380
add x8, x10, x8
str w9, [x8]
mov x8, #384
add x8, x10, x8
str w9, [x8]
mov x8, #388
add x8, x10, x8
str w9, [x8]
mov x8, #392
add x8, x10, x8
str w9, [x8]
mov x8, #396
add x8, x10, x8
str w9, [x8]
mov x8, #400
add x8, x10, x8
str w9, [x8]
mov x8, #404
add x8, x10, x8
str w9, [x8]
mov x8, #408
add x8, x10, x8
str w9, [x8]
mov x8, #412
add x8, x10, x8
str w9, [x8]
mov x8, #416
add x8, x10, x8
str w9, [x8]
mov x8, #420
add x8, x10, x8
str w9, [x8]
mov x8, #424
add x8, x10, x8
str w9, [x8]
mov x8, #428
add x8, x10, x8
str w9, [x8]
mov x8, #432
add x8, x10, x8
str w9, [x8]
mov x8, #436
add x8, x10, x8
str w9, [x8]
mov x8, #440
add x8, x10, x8
str w9, [x8]
mov x8, #444
add x8, x10, x8
str w9, [x8]
mov x8, #448
add x8, x10, x8
str w9, [x8]
mov x8, #452
add x8, x10, x8
str w9, [x8]
mov x8, #456
add x8, x10, x8
str w9, [x8]
mov x8, #460
add x8, x10, x8
str w9, [x8]
mov x8, #464
add x8, x10, x8
str w9, [x8]
mov x8, #468
add x8, x10, x8
str w9, [x8]
mov x8, #472
add x8, x10, x8
str w9, [x8]
mov x8, #476
add x8, x10, x8
str w9, [x8]
mov x8, #480
add x8, x10, x8
str w9, [x8]
mov x8, #484
add x8, x10, x8
str w9, [x8]
mov x8, #488
add x8, x10, x8
str w9, [x8]
mov x8, #492
add x8, x10, x8
str w9, [x8]
mov x8, #496
add x8, x10, x8
str w9, [x8]
mov x8, #500
add x8, x10, x8
str w9, [x8]
mov x8, #504
add x8, x10, x8
str w9, [x8]
mov x8, #508
add x8, x10, x8
str w9, [x8]
mov x8, #512
add x8, x10, x8
str w9, [x8]
mov x8, #516
add x8, x10, x8
str w9, [x8]
mov x8, #520
add x8, x10, x8
str w9, [x8]
mov x8, #524
add x8, x10, x8
str w9, [x8]
mov x8, #528
add x8, x10, x8
str w9, [x8]
mov x8, #532
add x8, x10, x8
str w9, [x8]
mov x8, #536
add x8, x10, x8
str w9, [x8]
mov x8, #540
add x8, x10, x8
str w9, [x8]
mov x8, #544
add x8, x10, x8
str w9, [x8]
mov x8, #548
add x8, x10, x8
str w9, [x8]
mov x8, #552
add x8, x10, x8
str w9, [x8]
mov x8, #556
add x8, x10, x8
str w9, [x8]
mov x8, #560
add x8, x10, x8
str w9, [x8]
mov x8, #564
add x8, x10, x8
str w9, [x8]
mov x8, #568
add x8, x10, x8
str w9, [x8]
mov x8, #572
add x8, x10, x8
str w9, [x8]
mov x8, #576
add x8, x10, x8
str w9, [x8]
mov x8, #580
add x8, x10, x8
str w9, [x8]
mov x8, #584
add x8, x10, x8
str w9, [x8]
mov x8, #588
add x8, x10, x8
str w9, [x8]
mov x8, #592
add x8, x10, x8
str w9, [x8]
mov x8, #596
add x8, x10, x8
str w9, [x8]
mov x8, #600
add x8, x10, x8
str w9, [x8]
mov x8, #604
add x8, x10, x8
str w9, [x8]
mov x8, #608
add x8, x10, x8
str w9, [x8]
mov x8, #612
add x8, x10, x8
str w9, [x8]
mov x8, #616
add x8, x10, x8
str w9, [x8]
mov x8, #620
add x8, x10, x8
str w9, [x8]
mov x8, #624
add x8, x10, x8
str w9, [x8]
mov x8, #628
add x8, x10, x8
str w9, [x8]
mov x8, #632
add x8, x10, x8
str w9, [x8]
mov x8, #636
add x8, x10, x8
str w9, [x8]
mov x8, #640
add x8, x10, x8
str w9, [x8]
mov x8, #644
add x8, x10, x8
str w9, [x8]
mov x8, #648
add x8, x10, x8
str w9, [x8]
mov x8, #652
add x8, x10, x8
str w9, [x8]
mov x8, #656
add x8, x10, x8
str w9, [x8]
mov x8, #660
add x8, x10, x8
str w9, [x8]
mov x8, #664
add x8, x10, x8
str w9, [x8]
mov x8, #668
add x8, x10, x8
str w9, [x8]
mov x8, #672
add x8, x10, x8
str w9, [x8]
mov x8, #676
add x8, x10, x8
str w9, [x8]
mov x8, #680
add x8, x10, x8
str w9, [x8]
mov x8, #684
add x8, x10, x8
str w9, [x8]
mov x8, #688
add x8, x10, x8
str w9, [x8]
mov x8, #692
add x8, x10, x8
str w9, [x8]
mov x8, #696
add x8, x10, x8
str w9, [x8]
mov x8, #700
add x8, x10, x8
str w9, [x8]
mov x8, #704
add x8, x10, x8
str w9, [x8]
mov x8, #708
add x8, x10, x8
str w9, [x8]
mov x8, #712
add x8, x10, x8
str w9, [x8]
mov x8, #716
add x8, x10, x8
str w9, [x8]
mov x8, #720
add x8, x10, x8
str w9, [x8]
mov x8, #724
add x8, x10, x8
str w9, [x8]
mov x8, #728
add x8, x10, x8
str w9, [x8]
mov x8, #732
add x8, x10, x8
str w9, [x8]
mov x8, #736
add x8, x10, x8
str w9, [x8]
mov x8, #740
add x8, x10, x8
str w9, [x8]
mov x8, #744
add x8, x10, x8
str w9, [x8]
mov x8, #748
add x8, x10, x8
str w9, [x8]
mov x8, #752
add x8, x10, x8
str w9, [x8]
mov x8, #756
add x8, x10, x8
str w9, [x8]
mov x8, #760
add x8, x10, x8
str w9, [x8]
mov x8, #764
add x8, x10, x8
str w9, [x8]
mov x8, #768
add x8, x10, x8
str w9, [x8]
mov x8, #772
add x8, x10, x8
str w9, [x8]
mov x8, #776
add x8, x10, x8
str w9, [x8]
mov x8, #780
add x8, x10, x8
str w9, [x8]
mov x8, #784
add x8, x10, x8
str w9, [x8]
mov x8, #788
add x8, x10, x8
str w9, [x8]
mov x8, #792
add x8, x10, x8
str w9, [x8]
mov x8, #796
add x8, x10, x8
str w9, [x8]
mov x8, #800
add x8, x10, x8
str w9, [x8]
mov x8, #804
add x8, x10, x8
str w9, [x8]
mov x8, #808
add x8, x10, x8
str w9, [x8]
mov x8, #812
add x8, x10, x8
str w9, [x8]
mov x8, #816
add x8, x10, x8
str w9, [x8]
mov x8, #820
add x8, x10, x8
str w9, [x8]
mov x8, #824
add x8, x10, x8
str w9, [x8]
mov x8, #828
add x8, x10, x8
str w9, [x8]
mov x8, #832
add x8, x10, x8
str w9, [x8]
mov x8, #836
add x8, x10, x8
str w9, [x8]
mov x8, #840
add x8, x10, x8
str w9, [x8]
mov x8, #844
add x8, x10, x8
str w9, [x8]
mov x8, #848
add x8, x10, x8
str w9, [x8]
mov x8, #852
add x8, x10, x8
str w9, [x8]
mov x8, #856
add x8, x10, x8
str w9, [x8]
mov x8, #860
add x8, x10, x8
str w9, [x8]
mov x8, #864
add x8, x10, x8
str w9, [x8]
mov x8, #868
add x8, x10, x8
str w9, [x8]
mov x8, #872
add x8, x10, x8
str w9, [x8]
mov x8, #876
add x8, x10, x8
str w9, [x8]
mov x8, #880
add x8, x10, x8
str w9, [x8]
mov x8, #884
add x8, x10, x8
str w9, [x8]
mov x8, #888
add x8, x10, x8
str w9, [x8]
mov x8, #892
add x8, x10, x8
str w9, [x8]
mov x8, #896
add x8, x10, x8
str w9, [x8]
mov x8, #900
add x8, x10, x8
str w9, [x8]
mov x8, #904
add x8, x10, x8
str w9, [x8]
mov x8, #908
add x8, x10, x8
str w9, [x8]
mov x8, #912
add x8, x10, x8
str w9, [x8]
mov x8, #916
add x8, x10, x8
str w9, [x8]
mov x8, #920
add x8, x10, x8
str w9, [x8]
mov x8, #924
add x8, x10, x8
str w9, [x8]
mov x8, #928
add x8, x10, x8
str w9, [x8]
mov x8, #932
add x8, x10, x8
str w9, [x8]
mov x8, #936
add x8, x10, x8
str w9, [x8]
mov x8, #940
add x8, x10, x8
str w9, [x8]
mov x8, #944
add x8, x10, x8
str w9, [x8]
mov x8, #948
add x8, x10, x8
str w9, [x8]
mov x8, #952
add x8, x10, x8
str w9, [x8]
mov x8, #956
add x8, x10, x8
str w9, [x8]
mov x8, #960
add x8, x10, x8
str w9, [x8]
mov x8, #964
add x8, x10, x8
str w9, [x8]
mov x8, #968
add x8, x10, x8
str w9, [x8]
mov x8, #972
add x8, x10, x8
str w9, [x8]
mov x8, #976
add x8, x10, x8
str w9, [x8]
mov x8, #980
add x8, x10, x8
str w9, [x8]
mov x8, #984
add x8, x10, x8
str w9, [x8]
mov x8, #988
add x8, x10, x8
str w9, [x8]
mov x8, #992
add x8, x10, x8
str w9, [x8]
mov x8, #996
add x8, x10, x8
str w9, [x8]
mov x8, #1000
add x8, x10, x8
str w9, [x8]
mov x8, #1004
add x8, x10, x8
str w9, [x8]
mov x8, #1008
add x8, x10, x8
str w9, [x8]
mov x8, #1012
add x8, x10, x8
str w9, [x8]
mov x8, #1016
add x8, x10, x8
str w9, [x8]
mov x8, #1020
add x8, x10, x8
str w9, [x8]
mov x10, x29
sub x10, x10, #2048
str w9, [x10]
mov x8, #4
add x8, x10, x8
str w9, [x8]
mov x8, #8
add x8, x10, x8
str w9, [x8]
mov x8, #12
add x8, x10, x8
str w9, [x8]
mov x8, #16
add x8, x10, x8
str w9, [x8]
mov x8, #20
add x8, x10, x8
str w9, [x8]
mov x8, #24
add x8, x10, x8
str w9, [x8]
mov x8, #28
add x8, x10, x8
str w9, [x8]
mov x8, #32
add x8, x10, x8
str w9, [x8]
mov x8, #36
add x8, x10, x8
str w9, [x8]
mov x8, #40
add x8, x10, x8
str w9, [x8]
mov x8, #44
add x8, x10, x8
str w9, [x8]
mov x8, #48
add x8, x10, x8
str w9, [x8]
mov x8, #52
add x8, x10, x8
str w9, [x8]
mov x8, #56
add x8, x10, x8
str w9, [x8]
mov x8, #60
add x8, x10, x8
str w9, [x8]
mov x8, #64
add x8, x10, x8
str w9, [x8]
mov x8, #68
add x8, x10, x8
str w9, [x8]
mov x8, #72
add x8, x10, x8
str w9, [x8]
mov x8, #76
add x8, x10, x8
str w9, [x8]
mov x8, #80
add x8, x10, x8
str w9, [x8]
mov x8, #84
add x8, x10, x8
str w9, [x8]
mov x8, #88
add x8, x10, x8
str w9, [x8]
mov x8, #92
add x8, x10, x8
str w9, [x8]
mov x8, #96
add x8, x10, x8
str w9, [x8]
mov x8, #100
add x8, x10, x8
str w9, [x8]
mov x8, #104
add x8, x10, x8
str w9, [x8]
mov x8, #108
add x8, x10, x8
str w9, [x8]
mov x8, #112
add x8, x10, x8
str w9, [x8]
mov x8, #116
add x8, x10, x8
str w9, [x8]
mov x8, #120
add x8, x10, x8
str w9, [x8]
mov x8, #124
add x8, x10, x8
str w9, [x8]
mov x8, #128
add x8, x10, x8
str w9, [x8]
mov x8, #132
add x8, x10, x8
str w9, [x8]
mov x8, #136
add x8, x10, x8
str w9, [x8]
mov x8, #140
add x8, x10, x8
str w9, [x8]
mov x8, #144
add x8, x10, x8
str w9, [x8]
mov x8, #148
add x8, x10, x8
str w9, [x8]
mov x8, #152
add x8, x10, x8
str w9, [x8]
mov x8, #156
add x8, x10, x8
str w9, [x8]
mov x8, #160
add x8, x10, x8
str w9, [x8]
mov x8, #164
add x8, x10, x8
str w9, [x8]
mov x8, #168
add x8, x10, x8
str w9, [x8]
mov x8, #172
add x8, x10, x8
str w9, [x8]
mov x8, #176
add x8, x10, x8
str w9, [x8]
mov x8, #180
add x8, x10, x8
str w9, [x8]
mov x8, #184
add x8, x10, x8
str w9, [x8]
mov x8, #188
add x8, x10, x8
str w9, [x8]
mov x8, #192
add x8, x10, x8
str w9, [x8]
mov x8, #196
add x8, x10, x8
str w9, [x8]
mov x8, #200
add x8, x10, x8
str w9, [x8]
mov x8, #204
add x8, x10, x8
str w9, [x8]
mov x8, #208
add x8, x10, x8
str w9, [x8]
mov x8, #212
add x8, x10, x8
str w9, [x8]
mov x8, #216
add x8, x10, x8
str w9, [x8]
mov x8, #220
add x8, x10, x8
str w9, [x8]
mov x8, #224
add x8, x10, x8
str w9, [x8]
mov x8, #228
add x8, x10, x8
str w9, [x8]
mov x8, #232
add x8, x10, x8
str w9, [x8]
mov x8, #236
add x8, x10, x8
str w9, [x8]
mov x8, #240
add x8, x10, x8
str w9, [x8]
mov x8, #244
add x8, x10, x8
str w9, [x8]
mov x8, #248
add x8, x10, x8
str w9, [x8]
mov x8, #252
add x8, x10, x8
str w9, [x8]
mov x8, #256
add x8, x10, x8
str w9, [x8]
mov x8, #260
add x8, x10, x8
str w9, [x8]
mov x8, #264
add x8, x10, x8
str w9, [x8]
mov x8, #268
add x8, x10, x8
str w9, [x8]
mov x8, #272
add x8, x10, x8
str w9, [x8]
mov x8, #276
add x8, x10, x8
str w9, [x8]
mov x8, #280
add x8, x10, x8
str w9, [x8]
mov x8, #284
add x8, x10, x8
str w9, [x8]
mov x8, #288
add x8, x10, x8
str w9, [x8]
mov x8, #292
add x8, x10, x8
str w9, [x8]
mov x8, #296
add x8, x10, x8
str w9, [x8]
mov x8, #300
add x8, x10, x8
str w9, [x8]
mov x8, #304
add x8, x10, x8
str w9, [x8]
mov x8, #308
add x8, x10, x8
str w9, [x8]
mov x8, #312
add x8, x10, x8
str w9, [x8]
mov x8, #316
add x8, x10, x8
str w9, [x8]
mov x8, #320
add x8, x10, x8
str w9, [x8]
mov x8, #324
add x8, x10, x8
str w9, [x8]
mov x8, #328
add x8, x10, x8
str w9, [x8]
mov x8, #332
add x8, x10, x8
str w9, [x8]
mov x8, #336
add x8, x10, x8
str w9, [x8]
mov x8, #340
add x8, x10, x8
str w9, [x8]
mov x8, #344
add x8, x10, x8
str w9, [x8]
mov x8, #348
add x8, x10, x8
str w9, [x8]
mov x8, #352
add x8, x10, x8
str w9, [x8]
mov x8, #356
add x8, x10, x8
str w9, [x8]
mov x8, #360
add x8, x10, x8
str w9, [x8]
mov x8, #364
add x8, x10, x8
str w9, [x8]
mov x8, #368
add x8, x10, x8
str w9, [x8]
mov x8, #372
add x8, x10, x8
str w9, [x8]
mov x8, #376
add x8, x10, x8
str w9, [x8]
mov x8, #380
add x8, x10, x8
str w9, [x8]
mov x8, #384
add x8, x10, x8
str w9, [x8]
mov x8, #388
add x8, x10, x8
str w9, [x8]
mov x8, #392
add x8, x10, x8
str w9, [x8]
mov x8, #396
add x8, x10, x8
str w9, [x8]
mov x8, #400
add x8, x10, x8
str w9, [x8]
mov x8, #404
add x8, x10, x8
str w9, [x8]
mov x8, #408
add x8, x10, x8
str w9, [x8]
mov x8, #412
add x8, x10, x8
str w9, [x8]
mov x8, #416
add x8, x10, x8
str w9, [x8]
mov x8, #420
add x8, x10, x8
str w9, [x8]
mov x8, #424
add x8, x10, x8
str w9, [x8]
mov x8, #428
add x8, x10, x8
str w9, [x8]
mov x8, #432
add x8, x10, x8
str w9, [x8]
mov x8, #436
add x8, x10, x8
str w9, [x8]
mov x8, #440
add x8, x10, x8
str w9, [x8]
mov x8, #444
add x8, x10, x8
str w9, [x8]
mov x8, #448
add x8, x10, x8
str w9, [x8]
mov x8, #452
add x8, x10, x8
str w9, [x8]
mov x8, #456
add x8, x10, x8
str w9, [x8]
mov x8, #460
add x8, x10, x8
str w9, [x8]
mov x8, #464
add x8, x10, x8
str w9, [x8]
mov x8, #468
add x8, x10, x8
str w9, [x8]
mov x8, #472
add x8, x10, x8
str w9, [x8]
mov x8, #476
add x8, x10, x8
str w9, [x8]
mov x8, #480
add x8, x10, x8
str w9, [x8]
mov x8, #484
add x8, x10, x8
str w9, [x8]
mov x8, #488
add x8, x10, x8
str w9, [x8]
mov x8, #492
add x8, x10, x8
str w9, [x8]
mov x8, #496
add x8, x10, x8
str w9, [x8]
mov x8, #500
add x8, x10, x8
str w9, [x8]
mov x8, #504
add x8, x10, x8
str w9, [x8]
mov x8, #508
add x8, x10, x8
str w9, [x8]
mov x8, #512
add x8, x10, x8
str w9, [x8]
mov x8, #516
add x8, x10, x8
str w9, [x8]
mov x8, #520
add x8, x10, x8
str w9, [x8]
mov x8, #524
add x8, x10, x8
str w9, [x8]
mov x8, #528
add x8, x10, x8
str w9, [x8]
mov x8, #532
add x8, x10, x8
str w9, [x8]
mov x8, #536
add x8, x10, x8
str w9, [x8]
mov x8, #540
add x8, x10, x8
str w9, [x8]
mov x8, #544
add x8, x10, x8
str w9, [x8]
mov x8, #548
add x8, x10, x8
str w9, [x8]
mov x8, #552
add x8, x10, x8
str w9, [x8]
mov x8, #556
add x8, x10, x8
str w9, [x8]
mov x8, #560
add x8, x10, x8
str w9, [x8]
mov x8, #564
add x8, x10, x8
str w9, [x8]
mov x8, #568
add x8, x10, x8
str w9, [x8]
mov x8, #572
add x8, x10, x8
str w9, [x8]
mov x8, #576
add x8, x10, x8
str w9, [x8]
mov x8, #580
add x8, x10, x8
str w9, [x8]
mov x8, #584
add x8, x10, x8
str w9, [x8]
mov x8, #588
add x8, x10, x8
str w9, [x8]
mov x8, #592
add x8, x10, x8
str w9, [x8]
mov x8, #596
add x8, x10, x8
str w9, [x8]
mov x8, #600
add x8, x10, x8
str w9, [x8]
mov x8, #604
add x8, x10, x8
str w9, [x8]
mov x8, #608
add x8, x10, x8
str w9, [x8]
mov x8, #612
add x8, x10, x8
str w9, [x8]
mov x8, #616
add x8, x10, x8
str w9, [x8]
mov x8, #620
add x8, x10, x8
str w9, [x8]
mov x8, #624
add x8, x10, x8
str w9, [x8]
mov x8, #628
add x8, x10, x8
str w9, [x8]
mov x8, #632
add x8, x10, x8
str w9, [x8]
mov x8, #636
add x8, x10, x8
str w9, [x8]
mov x8, #640
add x8, x10, x8
str w9, [x8]
mov x8, #644
add x8, x10, x8
str w9, [x8]
mov x8, #648
add x8, x10, x8
str w9, [x8]
mov x8, #652
add x8, x10, x8
str w9, [x8]
mov x8, #656
add x8, x10, x8
str w9, [x8]
mov x8, #660
add x8, x10, x8
str w9, [x8]
mov x8, #664
add x8, x10, x8
str w9, [x8]
mov x8, #668
add x8, x10, x8
str w9, [x8]
mov x8, #672
add x8, x10, x8
str w9, [x8]
mov x8, #676
add x8, x10, x8
str w9, [x8]
mov x8, #680
add x8, x10, x8
str w9, [x8]
mov x8, #684
add x8, x10, x8
str w9, [x8]
mov x8, #688
add x8, x10, x8
str w9, [x8]
mov x8, #692
add x8, x10, x8
str w9, [x8]
mov x8, #696
add x8, x10, x8
str w9, [x8]
mov x8, #700
add x8, x10, x8
str w9, [x8]
mov x8, #704
add x8, x10, x8
str w9, [x8]
mov x8, #708
add x8, x10, x8
str w9, [x8]
mov x8, #712
add x8, x10, x8
str w9, [x8]
mov x8, #716
add x8, x10, x8
str w9, [x8]
mov x8, #720
add x8, x10, x8
str w9, [x8]
mov x8, #724
add x8, x10, x8
str w9, [x8]
mov x8, #728
add x8, x10, x8
str w9, [x8]
mov x8, #732
add x8, x10, x8
str w9, [x8]
mov x8, #736
add x8, x10, x8
str w9, [x8]
mov x8, #740
add x8, x10, x8
str w9, [x8]
mov x8, #744
add x8, x10, x8
str w9, [x8]
mov x8, #748
add x8, x10, x8
str w9, [x8]
mov x8, #752
add x8, x10, x8
str w9, [x8]
mov x8, #756
add x8, x10, x8
str w9, [x8]
mov x8, #760
add x8, x10, x8
str w9, [x8]
mov x8, #764
add x8, x10, x8
str w9, [x8]
mov x8, #768
add x8, x10, x8
str w9, [x8]
mov x8, #772
add x8, x10, x8
str w9, [x8]
mov x8, #776
add x8, x10, x8
str w9, [x8]
mov x8, #780
add x8, x10, x8
str w9, [x8]
mov x8, #784
add x8, x10, x8
str w9, [x8]
mov x8, #788
add x8, x10, x8
str w9, [x8]
mov x8, #792
add x8, x10, x8
str w9, [x8]
mov x8, #796
add x8, x10, x8
str w9, [x8]
mov x8, #800
add x8, x10, x8
str w9, [x8]
mov x8, #804
add x8, x10, x8
str w9, [x8]
mov x8, #808
add x8, x10, x8
str w9, [x8]
mov x8, #812
add x8, x10, x8
str w9, [x8]
mov x8, #816
add x8, x10, x8
str w9, [x8]
mov x8, #820
add x8, x10, x8
str w9, [x8]
mov x8, #824
add x8, x10, x8
str w9, [x8]
mov x8, #828
add x8, x10, x8
str w9, [x8]
mov x8, #832
add x8, x10, x8
str w9, [x8]
mov x8, #836
add x8, x10, x8
str w9, [x8]
mov x8, #840
add x8, x10, x8
str w9, [x8]
mov x8, #844
add x8, x10, x8
str w9, [x8]
mov x8, #848
add x8, x10, x8
str w9, [x8]
mov x8, #852
add x8, x10, x8
str w9, [x8]
mov x8, #856
add x8, x10, x8
str w9, [x8]
mov x8, #860
add x8, x10, x8
str w9, [x8]
mov x8, #864
add x8, x10, x8
str w9, [x8]
mov x8, #868
add x8, x10, x8
str w9, [x8]
mov x8, #872
add x8, x10, x8
str w9, [x8]
mov x8, #876
add x8, x10, x8
str w9, [x8]
mov x8, #880
add x8, x10, x8
str w9, [x8]
mov x8, #884
add x8, x10, x8
str w9, [x8]
mov x8, #888
add x8, x10, x8
str w9, [x8]
mov x8, #892
add x8, x10, x8
str w9, [x8]
mov x8, #896
add x8, x10, x8
str w9, [x8]
mov x8, #900
add x8, x10, x8
str w9, [x8]
mov x8, #904
add x8, x10, x8
str w9, [x8]
mov x8, #908
add x8, x10, x8
str w9, [x8]
mov x8, #912
add x8, x10, x8
str w9, [x8]
mov x8, #916
add x8, x10, x8
str w9, [x8]
mov x8, #920
add x8, x10, x8
str w9, [x8]
mov x8, #924
add x8, x10, x8
str w9, [x8]
mov x8, #928
add x8, x10, x8
str w9, [x8]
mov x8, #932
add x8, x10, x8
str w9, [x8]
mov x8, #936
add x8, x10, x8
str w9, [x8]
mov x8, #940
add x8, x10, x8
str w9, [x8]
mov x8, #944
add x8, x10, x8
str w9, [x8]
mov x8, #948
add x8, x10, x8
str w9, [x8]
mov x8, #952
add x8, x10, x8
str w9, [x8]
mov x8, #956
add x8, x10, x8
str w9, [x8]
mov x8, #960
add x8, x10, x8
str w9, [x8]
mov x8, #964
add x8, x10, x8
str w9, [x8]
mov x8, #968
add x8, x10, x8
str w9, [x8]
mov x8, #972
add x8, x10, x8
str w9, [x8]
mov x8, #976
add x8, x10, x8
str w9, [x8]
mov x8, #980
add x8, x10, x8
str w9, [x8]
mov x8, #984
add x8, x10, x8
str w9, [x8]
mov x8, #988
add x8, x10, x8
str w9, [x8]
mov x8, #992
add x8, x10, x8
str w9, [x8]
mov x8, #996
add x8, x10, x8
str w9, [x8]
mov x8, #1000
add x8, x10, x8
str w9, [x8]
mov x8, #1004
add x8, x10, x8
str w9, [x8]
mov x8, #1008
add x8, x10, x8
str w9, [x8]
mov x8, #1012
add x8, x10, x8
str w9, [x8]
mov x8, #1016
add x8, x10, x8
str w9, [x8]
mov x8, #1020
add x8, x10, x8
str w9, [x8]
adrp x13, cur_token
ldr w8, [x13, #:lo12:cur_token]
mov w9, #0
cmp w8, w9
b.ne .L.eval.1
b .L.eval.2
.L.eval.1:
bl panic
mov w8, w0
mov w0, w8
ldr x22, [sp, #0]
ldr x21, [sp, #8]
ldr x19, [sp, #16]
ldr x20, [sp, #24]
add sp, sp, #2096
ldp x29, x30, [sp], #16
ret
.L.eval.2:
adrp x13, num
ldr w8, [x13, #:lo12:num]
mov x9, x29
sub x9, x9, #1024
mov x0, x9
mov w1, w8
bl stack_push
bl next_token
mov w8, w0
b .L.eval.3
.L.eval.3:
adrp x13, cur_token
ldr w8, [x13, #:lo12:cur_token]
mov w9, #1
cmp w8, w9
b.eq .L.eval.4
b .L.eval.5
.L.eval.4:
adrp x13, other
ldr w19, [x13, #:lo12:other]
mov w0, w19
bl get_op_prec
mov w8, w0
mov w9, #0
cmp w8, w9
b.eq .L.eval.6
b .L.eval.7
.L.eval.5:
bl next_token
mov w8, w0
b .L.eval.14
.L.eval.6:
b .L.eval.5
.L.eval.7:
bl next_token
mov w8, w0
mov w20, w19
b .L.eval.8
.L.eval.8:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
bl stack_size
mov w8, w0
mov w9, #0
cmp w8, w9
b.ne .L.eval.11
b .L.eval.10
.L.eval.9:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
bl stack_pop
mov w22, w0
mov x21, x29
sub x21, x21, #1024
mov x0, x21
bl stack_pop
mov w19, w0
mov x0, x21
bl stack_pop
mov w8, w0
mov w0, w22
mov w1, w8
mov w2, w19
bl eval_op
mov w8, w0
mov x0, x21
mov w1, w8
bl stack_push
b .L.eval.8
.L.eval.10:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
mov w1, w20
bl stack_push
adrp x13, cur_token
ldr w9, [x13, #:lo12:cur_token]
mov w8, #0
cmp w9, w8
b.ne .L.eval.12
b .L.eval.13
.L.eval.11:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
bl stack_peek
mov w8, w0
mov w0, w8
bl get_op_prec
mov w19, w0
mov w0, w20
bl get_op_prec
mov w8, w0
cmp w19, w8
b.ge .L.eval.9
b .L.eval.10
.L.eval.12:
bl panic
mov w8, w0
mov w0, w8
ldr x22, [sp, #0]
ldr x21, [sp, #8]
ldr x19, [sp, #16]
ldr x20, [sp, #24]
add sp, sp, #2096
ldp x29, x30, [sp], #16
ret
.L.eval.13:
adrp x13, num
ldr w9, [x13, #:lo12:num]
mov x8, x29
sub x8, x8, #1024
mov x0, x8
mov w1, w9
bl stack_push
bl next_token
mov w8, w0
b .L.eval.3
.L.eval.14:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
bl stack_size
mov w8, w0
mov w9, #0
cmp w8, w9
b.ne .L.eval.15
b .L.eval.16
.L.eval.15:
mov x8, x29
sub x8, x8, #2048
mov x0, x8
bl stack_pop
mov w19, w0
mov x20, x29
sub x20, x20, #1024
mov x0, x20
bl stack_pop
mov w21, w0
mov x0, x20
bl stack_pop
mov w8, w0
mov w0, w19
mov w1, w8
mov w2, w21
bl eval_op
mov w8, w0
mov x0, x20
mov w1, w8
bl stack_push
b .L.eval.14
.L.eval.16:
mov x8, x29
sub x8, x8, #1024
mov x0, x8
bl stack_peek
mov w8, w0
mov w0, w8
ldr x22, [sp, #0]
ldr x21, [sp, #8]
ldr x19, [sp, #16]
ldr x20, [sp, #24]
add sp, sp, #2096
ldp x29, x30, [sp], #16
ret
.text
.globl main
.p2align 2
main:
.L.main.0:
stp x29, x30, [sp, #-16]!
mov x29, sp
sub sp, sp, #32
str x19, [sp, #0]
bl getint
mov w19, w0
bl getch
mov w8, w0
bl next_token
mov w8, w0
b .L.main.1
.L.main.1:
mov w8, #0
cmp w19, w8
b.ne .L.main.2
b .L.main.3
.L.main.2:
bl eval
mov w8, w0
mov w0, w8
bl putint
mov w8, #10
mov w0, w8
bl putch
mov w8, #1
sub w8, w19, w8
mov w19, w8
b .L.main.1
.L.main.3:
mov w8, #0
mov w0, w8
ldr x19, [sp, #0]
add sp, sp, #32
ldp x29, x30, [sp], #16
ret